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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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