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/iAlg/iAlgMath/zxBesselScaler.h

59 lines
1.7 KiB
C

#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);
};