57 lines
2.2 KiB
C
57 lines
2.2 KiB
C
#ifndef MATHMODELDEFINE_H
|
||
#define MATHMODELDEFINE_H
|
||
#ifndef ARMA_WARN_LEVEL
|
||
#define ARMA_WARN_LEVEL 1
|
||
#endif
|
||
|
||
#include <armadillo>
|
||
|
||
// 一次函数 y = a0 + a1*x
|
||
double LinearFunction(double x, double a0, double a1);
|
||
arma::vec LinearFunction(const arma::vec& x, double a0, double a1);
|
||
|
||
// 二次函数 y = a0 + a1*x + a2*x^2
|
||
double QuadraticPolynomial(double x, double a0, double a1, double a2);
|
||
arma::vec QuadraticPolynomial(const arma::vec& x, double a0, double a1, double a2);
|
||
|
||
// 定义模型函数:y = a*exp(b*x)
|
||
double ExpModel(double x, const arma::vec& p);
|
||
|
||
// 能量分辨率模型:FWHM = sqrt(a² + b²·E)
|
||
// double FwhmModel(double E, const arma::vec& p);
|
||
|
||
// 能量分辨率模型:FWHM = k * sqrt(E) + c
|
||
double FwhmModel(double E, const arma::vec& p);
|
||
|
||
// 高斯模型: y = A * exp(-pow(x - mu, 2) / (2 * pow(sigma, 2)))
|
||
double GaussianModel(double x, const arma::vec& p);
|
||
// 预估GaussianModel初始参数估计值
|
||
arma::vec EstimateGaussianModelInitialParams(const arma::vec& x, const arma::vec& y);
|
||
|
||
// 高斯峰+阶跃背景+常数背景模型: y=A*exp(-pow(x-P,2)/(2*pow(delt,2))) + H/(1+exp((x-P)/W)) + C
|
||
double PhotonPeakModel(double x, const arma::vec& p);
|
||
arma::vec PhotonPeakModel(const arma::vec& x, const arma::vec& p);
|
||
|
||
// 拖尾: y= H/(1+exp((x-P)/W)) + C
|
||
arma::vec PhotonPeakModelTuowei(const arma::vec& x, const arma::vec& p);
|
||
|
||
// 预估PhotonPeakModel初始参数估计值
|
||
arma::vec EstimatePhotonPeakModelInitialParams(const arma::vec& x, const arma::vec& y);
|
||
|
||
// 电子峰模型: y=Bg + A * pow((1 + pow(x/a, 2)), -m) * exp(-delt*atan(x/a));
|
||
double ElectronPeakModel(double x, const arma::vec& p);
|
||
arma::vec ElectronPeakModel(const arma::vec& x, const arma::vec& p);
|
||
// 预估ElectronPeakModel初始参数估计值
|
||
arma::vec EstimateElectronPeakModelInitialParams(const arma::vec& x, const arma::vec& y);
|
||
|
||
// 效率值实验计算,N为净峰计数,A为活度,P为分支比,t为测量时间s(秒)
|
||
double EfficiencyExperimentalCalc(int N, double A, double P, double t);
|
||
// 光子能量探测效率
|
||
// ln(ε) = a0 + a1*lnE + a2*(lnE)^2 + a3*(lnE)^3 + ... + ai*(lnE)^i
|
||
double EnergyEfficiency(double E, const arma::vec& coeffs) ;
|
||
|
||
|
||
|
||
|
||
#endif // MATHMODELDEFINE_H
|