#pragma once #include "Defines.h" #include "mAlgPseudo_global.h" class iPseudo3Info; class zxAlgRegress; // 三区拟压力计算载体,单例模式,在模型处理解释过程调用 class M_ALGPSEUDO_EXPORT iAlgPseuCal3 { public: iAlgPseuCal3(); static bool initPs(const VVecDouble& vvec, \ const QMap* pMap1, \ const QMap* pMap2); // 系统内部自动选用不同的方法 static bool calP(double ps, double &p, int which = -1); static bool calPS(double p, double &ps, int which = -1); private: /////////////////////////////////////////////////////////////////////////////////////////// // 拟合公式 // 计算“压力->拟压力”的回归曲线方程系数 // static bool fitPtoPS(bool isZero = true); // // 计算“拟压力->压力”的回归曲线方程系数 static bool fitPStoP(bool isZero = false); /////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // 压力->拟压力,三段各自的拟合函数 static bool pToPs_Ps3Fitting(double p, double &ps); // 拟压力->压力,三段各自的反推函数 static bool psToP_Ps3Fitting(double ps, double &p); // 压力->拟压力,借助三区计算方法来计算(载体),但是这个速度太慢,而且异常太多,主要是积分/0,暂不启用 // static bool pToPs_Ps3Integral(double p, double &ps); // // 压力->拟压力,精度比湛江方法高,临时采用 // static bool pToPs_Cv(double p, double &ps); // // 拟压力->压力,精度比湛江方法低,但对于三区来讲,没法反推,只能将就使用 //static bool psToP_Cv(double ps, double &p); // 20220317 增加新的方式,直接根据数据进行判断,看谁离得最近,则选取谁 static bool pToPs_Simple(double p, double &ps); static bool psToP_Simple(double ps, double &p); static bool _simple_find_xy(VecDouble* pVecX, VecDouble* pVecY, double x, double &y); static double _linear_value_at(double x, double x1, double x2, double y1, double y2); //////////////////////////////////////////////////////////////////////////////// private: static QMap m_mapPsInfos; static QMap m_mapOthers; // 用压力算拟压力的系数 static VecDouble m_vecCoefsPtoPS; // 用拟压力算压力的系数 static VecDouble m_vecCoefsPStoP; // job里的三组数据 static VecDouble m_vecP; static VecDouble m_vecPs; // 这是为了方便调用,加快速度 static QMap m_mapAlgs; static double m_dPP; static double m_dPD; };