You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iAlg/iAlgRegress/zxAlgRegress.h

98 lines
3.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include <QObject>
#include <QColor>
#include <QVector>
#include <QString>
#include <QMap>
#include <QMapIterator>
#include <QMatrix>
#include "iAlgRegress_global.h"
#include "zxAlgMatrix.h"
// 拟合算法
class I_ALGREGRESS_EXPORT zxAlgRegress
{
public:
zxAlgRegress();
virtual ~zxAlgRegress();
// 组织表达式
virtual QString getExpStr() = 0;
public:
// 过滤掉无效数据。
virtual bool setFiltering() = 0;
virtual bool cal() = 0;
// 将参数约束、数据源等转换为线性回归方程可以处理的形式。
virtual bool setTransformation() = 0;
// 将线性回归方程计算完成的参数反向变换成当前回归类型的参数。
virtual bool setReciprocalTransformation() = 0;
// 根据回归线进行计算
virtual double getValue(VecDouble& vMatrixX) = 0;
double getValue(double d)
{
VecDouble vMatrixX;
vMatrixX.push_back(d);
return getValue(vMatrixX);
}
public:
void setCoeff(QMap<uint, double>& mapCoeff);
void setRestrain(bool bRestrain);
void setSourceData(VVecDouble& vSourceData);
void setRestrainMatrix(VVecDouble& vRestrainMatrix);
void setRestrainType(uint nType);
void setRestrainPoint(VecDouble vRestrainPoint);
QMap<uint, double>& getCoeff();
bool isRestrain();
VVecDouble getSourceData();
VVecDouble getRestrainMatrix();
double getDeterCoff();
uint getValidDataNum();
uint getDataNum();
protected:
double m_dDeterCoff; // 决定系数R2
bool m_bModeLimit; // 是否为约束回归
uint m_nDataNum; // 数据个数
uint m_nValidDataNum; // 有效数据个数
uint m_nTypeLimit;// 约束类型0定点1定参数2矩阵约束。
// 所有项的系数。map<参数编号, 对应项系数>
// 线性下 0乘积项系数 1常数项系数
// 指数下 0乘积项系数 1指数项系数
// 对数下 0乘积项系数 1常数项系数
// 乘幂下 0乘积项系数 1指数项系数
// 特殊回归模型的参数编号见具体的类。
QMap<uint, double> m_mapCoeff;
// 约束点。第一个为Y0再依次为X10、X20、X30...
VecDouble m_vRestrainPoint;
// 源数据。
// 外部的vector的每一项指的是一组观察变量。
// 内部的每一个vector指的是每一组观察变量的每一个子项 Yi、Xi1、Xi2、Xi3......
VVecDouble m_vSourceData;
// 约束矩阵
// 假定回归方程的待求参数向量为 C 。C的排序为由低次向高次参数。
// C受矩阵约束 AC = b 。 A的排序与C相同。
// A 为 k * p 矩阵,并且秩为 k C 为 p * 1 矩阵b 为 k * 1 矩阵即C、b为列向量。
// 外部的vector的每一项指的是一组约束条件,即约束方程组中的一个方程。
// 内部的vector的每一项指的是一组约束条件中的每一个参数。
// 内部的vector的排序方式为 : bi 、Ai1、Ai2、Ai3......
VVecDouble m_vRestrainMatrix;
};