AnalysisSystemForRadionucli.../Fit.h

127 lines
6.2 KiB
C
Raw Normal View History

2024-06-04 15:27:02 +08:00
#ifndef FIT_H
#define FIT_H
////////////////////////////////////////////////////////////////////////
// 类说明:此类为拟合算法类
//
// 注意事项1、此类包含拟合系数计算 和拟合方程计算
//
////////////////////////////////////////////////////////////////////////
#include <QVector>
class CFit
{
public:
/////////////////////////////////////////////////////////////////////
// 函数说明LinearFit 线性拟合
// 参数说明_watch_x: 观察值x 数组
// _watch_y 观察值y 数组
// _outputData: 拟合返回值
// _output_vari:拟合误差值
//
// 返回值: true:正确返回
// fale:错误返回
//////////////////////////////////////////////////////////////////////
static bool LinearFit(QVector<double>& _watch_x,QVector<double>& _watch_y,QVector<double>& _outputData,double &_output_vari);
// 函数说明LinearFitEquation 拟合方程y = int(_fit_para[0]*_watch_x[n..]+_fit_para[1])
// 参数说明_watch_x: 观察值x 数组
// _fit_para 二次拟合方程系数
// _output_y 返回值
//
// 返回值: true:正确返回
// fale:错误返
static bool LinearFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<int>& _output_y);
static bool LinearFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<double>& _output_y);
/////////////////////////////////////////////////////////////////////
// 函数说明_2PloynimialFit 2次拟合
// 参数说明_watch_x: 观察值x 数组
// _watch_y 观察值y 数组
// _outputData: 拟合返回值
// _output_vari:拟合误差值
//
// 返回值: true:正确返回
// fale:错误返回
/////////////////////////////////////////////////////////////////////
static bool _2PloynimialFit(QVector<double>& _watch_x,QVector<double>& _watch_y,QVector<double>& _outputData,double &_output_vari);
/////////////////////////////////////////////////////////////////////
// 函数说明_2PloynimialFitEquation 拟合方程y = int(_fit_para[0]+_fit_para[1]*_watch_x[n..]+_fit_para[2]*_watch_x[n..]*_watch_x[n..]+0.5)
// 参数说明_watch_x: 观察值x 数组
// _fit_para 二次拟合方程系数
// _output_y 返回值
//
// 返回值: true:正确返回
// fale:错误返回
/////////////////////////////////////////////////////////////////////
static bool _2PloynimialFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<int>& _output_y);
/////////////////////////////////////////////////////////////////////
// 函数说明__3PloynimialFit 3次拟合
// 参数说明_watch_x: 观察值x 数组
// _watch_y 观察值y 数组
// _outputData: 拟合返回值
// _output_vari:拟合误差值
//
// 返回值: true:正确返回
// fale:错误返回
/////////////////////////////////////////////////////////////////////
/// \brief _3PloynimialFit
/// \param _watch_x
/// \param _watch_y
/// \param _outputData
/// \param _output_vari
/// \return
static bool _2PloynimialFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<double>& _output_y);
static bool _3PloynimialFit(QVector<double>& _watch_x,QVector<double>& _watch_y,QVector<double>& _outputData,double &_output_vari);
/////////////////////////////////////////////////////////////////////
// 函数说明__3PloynimialFit 3次拟合方程
// 参数说明_watch_x: 观察值x 数组
// _watch_y 观察值y 数组
// _outputData: 拟合返回值
// _output_vari:拟合误差值
//
// 返回值: true:正确返回
// fale:错误返回
/////////////////////////////////////////////////////////////////////
static bool _3PloynimialFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<int>& _output_y);
static bool _3PloynimialFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<double>& _output_y);
/////////////////////////////////////////////////////////////////////
// 函数说明GaussFit 高斯拟合
// 参数说明_watch_x: 观察值x 数组
// _watch_y 观察值y 数组
// _outputData: 拟合返回值
// _output_vari:拟合误差值
//
// 返回值: true:正确返回
// fale:错误返回
/////////////////////////////////////////////////////////////////////
static bool GaussFit(QVector<double>& _watch_x,QVector<double>& _watch_y,QVector<double>& _outputData,double &_output_vari);
/////////////////////////////////////////////////////////////////////
// 函数说明GaussFit 高斯拟合方程
// 参数说明_watch_x: 观察值x 数组
// _watch_y 观察值y 数组
// _outputData: 拟合返回值
// _output_vari:拟合误差值
//
// 返回值: true:正确返回
// fale:错误返回
/////////////////////////////////////////////////////////////////////
static bool GaussFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<int>& _output_y);
static bool GaussFitEquation(QVector<double>& _watch_x,QVector<double>& _fit_para,QVector<double>& _output_y);
private:
/////////////////////////////////////////////////////////////////////
// 函数说明_ArrayPowerSumAverage 数组数据n次方 和的平均值 空数组返回值为零
// 参数说明_data: 需要处理的数据
//
// 返回值: 输入数组为空时 0
/////////////////////////////////////////////////////////////////////
static double ArrayPowerSumAverage(QVector<double>& _data,int _pow=1);
/////////////////////////////////////////////////////////////////////
// 函数说明_ArrayPowerSumAverage 数组first数据乘以数组sencond数据n次方 和的平均值
// 参数说明_data: 需要处理的数据
//
// 返回值: 输入数组为空时 0
/////////////////////////////////////////////////////////////////////
static double TwoArrayPowerSumAverage(QVector<double>& _first,QVector<double>& _second,int _pow=1);
};
#endif