#pragma once #include "math.h" #include "zxHugeNum.h" // 贝塞尔函数(支持缩放) // 202604 由殷维基于PF需要进行贝塞尔函数扩充,不限于0和1,而是改为传递double分数 // 在此基础上,解航提出,解析模型采用该方法,可以规避震荡问题(但是目前只用到novel_besselk) // 10点Gauss-Legendre求积的节点和权重 namespace GaussLegendre { static const int GL_Size = 10; static const double GL_X[GL_Size] = { 0.076526521133497, 0.227785851141645, 0.373706088715419, 0.510867001950827, 0.636053680726515, 0.746331906460150, 0.839116971822218, 0.912234428251325, 0.963971927277913, 0.993128599185094 }; static const double GL_W[GL_Size] = { 0.152753387130725, 0.149172986472603, 0.142096109318382, 0.131688638449176, 0.118194531961518, 0.101930119817240, 0.083276741576704, 0.062672048334109, 0.040601429800386, 0.017614007139152 }; } class I_ALGMATH_EXPORT zxBesselScaler { public: zxBesselScaler(); ~zxBesselScaler(); public: // 第一类修正贝塞尔函数 I_nu(z) // 注:该函数目前只被yinw算法应用 // 1.算法由yinw提供,后来因为震荡,经xieh针对溢出进行修改 // 2.但后来随着yinw算法调整,调用该函数发现,xieh修改不妥 // 只好再次倒回去 // 幸亏xieh本身没有用到该函数 // 后续还是需要进一步完善优化该函数的 static double besseli(double nu, double z); // 第二类修正贝塞尔函数 K_nu(z) // 注:该函数目前被yinw算法+xieh算法中均有应用 static double besselk(double nu, double z); // 伽马函数 Gamma(z) static double gamma(double z); };