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

#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;
};