#pragma once #include "Defines.h" #include "mAlgPVT_global.h" //#ifndef QT_DEBUG // 这个定义是专门为编写算法时测试用的 // MPA+WTAI调用时,需要屏蔽该定义 //#define PVT_TESTONLY_MODE //#endif class zxAlgRegressLinear; // PVT相关小算法的基类 class M_PVT_EXPORT iAlgPvtBase { public: iAlgPvtBase(); ~iAlgPvtBase(); // 绑定成员变量 virtual void bindMembers() = 0; // 建立并绑定关联的算法类,如gasOilRatio需要调用bubblePre // 在调用cal函数之前调用该函数 void bindBrother(QString sName, iAlgPvtBase* pBrother); QMap* getBrothers() { return &m_mapBrothers; } // 统一的初始化函数 virtual void init(); // 统一传值函数/取值函数 virtual void setMemValue(QString sKey, double d); double getMemValue(QString sKey); virtual void setMemValues(QMap map); void getMemValues(QMap& map); // 设置内部的算法类型 // 为了统一,此处用了整形,各子类内部转换为enum void setSubType(int n); int getSubType(); // 虚函数,计算函数 virtual bool cal(VecDouble vecIns, VecDouble& vecOuts); // 虚函数,计算函数 virtual bool cal(double dIn, double& dOut); // 虚函数,计算函数 virtual bool cal(double& dIn, double& dOut); // 获取错误信息 QString getLastError(); //Pseudo QString getPvtName(); /////////////////////////////////////////////////////////////////////////////// // Match功能 public: // vecIns:P(in) // vecOuts:Z(out) // vecExps:实验数据 (in) virtual bool match(VecDouble vecIns, VecDouble& vecOuts, VecPointF& vecExps, double* pExtParas = nullptr); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // Match功能,尝试2 20210715 public: // vecMatches:拟合点(编辑+新增) // vecExps:实验数据,201 // bool match1(VecPointF& vecMatches, VecPointF& vecExps); //virtual double getValue(VecDouble& vMatrixX); protected: // 全部转换为线性进行处理 // double m_dK; //乘积项系数 // double m_dB; //指数项系数 // 在转换成线性回归时,约束方式可能发生改变,在当前条件为指定参数约束, // 转换时可能变成约束矩阵约束。因此不采用当前计算类由CLinearRegressAlgo派生, // 而记录CLinearRegressAlgo作为成员的方式。以免其它成员变量受到影响。 // zxAlgRegressLinear* m_pLinearRegress; /////////////////////////////////////////////////////////////////////////////// protected: QString m_sAlgo; //算法本身名称 //Pseudo QString m_sPvtName; // 内部的算法类型,为了统一,此处用了整形,各子类内部转换为enum int m_nSubType; // 各个参数(需要外界传入)的Key值 // 注意:Key为英文、在ModelParaDefinesLP.xml等文件中配置 QMap m_mapMemPtrs; // 这是关联的算法,如gasOilRatio需要调用bubblePre QMap m_mapBrothers; bool m_bMatching; //match过程也调用cal函数,通过该变量进行区分 // 出错信息 QString m_sLastError; };