#ifndef MATHMODELDEFINE_H #define MATHMODELDEFINE_H #ifndef ARMA_WARN_LEVEL #define ARMA_WARN_LEVEL 1 #endif #include // 一次函数 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