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.
nmWTAI-Platform/Include/mAlg/mAlgPseudo/iAlgPseuCal3.h

84 lines
2.8 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 "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<QString, iPseudo3Info *>* pMap1, \
const QMap<QString, double>* 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<QString, iPseudo3Info*> m_mapPsInfos;
static QMap<QString, double> m_mapOthers;
// 用压力算拟压力的系数
static VecDouble m_vecCoefsPtoPS;
// 用拟压力算压力的系数
static VecDouble m_vecCoefsPStoP;
// job里的三组数据
static VecDouble m_vecP;
static VecDouble m_vecPs;
// 这是为了方便调用,加快速度
static QMap<int, zxAlgRegress*> m_mapAlgs;
static double m_dPP;
static double m_dPD;
};