c#中的BesselK函数
BesselK Function in C#
我正试图从Boost(一个c++库)实现BesselK方法。Boost方法接受两个双精度体并返回一个双精度体。(我把它实现为cyl_bessel_k .)
我的模型来自于boost文档:http://www.boost.org/doc/libs/1_45_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/mbessel.html
我也一直在检查Wolfram的值:http://www.wolframalpha.com/input/?i=BesselK%283%2C1%29
当传递"v"的正非整数值时,我能够匹配Boost方法的输出。但是,当传递一个整数时,我的输出就严重中断了。因此,这是一个明显的不连续问题。从阅读这一点来看,这个问题似乎是由传递一个负整数到函数引起的。不知怎的,反射在Bessel_I方法中发挥了作用,但我的数学技能已经接近尾声了。
1)。什么需要发生的bessel_i方法与反射使这项工作?
2)。我现在用的是部分和法。Boost使用连续分数方法。我如何修改它来解释收敛?
任何输入都是赞赏的!谢谢你!
static double cyl_bessel_k(double v, double x)
{
if (v > 0)
{
double iNegativeV = cyl_bessel_i(-v, x);
double iPositiveV = cyl_bessel_i(v, x);
double besselSecondKind = (Math.PI / 2) * ((iNegativeV - iPositiveV ) / (Math.Sin(Math.PI * v)));
return besselSecondKind;
}
else
{
//error handling
}
}
static double cyl_bessel_i(double v, double x)
{
if (x == 0)
{
return 0;
}
double summed = 0;
double a = Math.Pow((0.5d * x), v);
for (double k = 0; k < 10; k++) //how to account for convergence? 10 is arbitrary
{
double b = Math.Pow(0.25d * Math.Pow(x, 2), k);
double kFactorial = SpecialFunctions.Factorial((int)k); //comes from MathNet.Numerics (Nuget)
double gamma = SpecialFunctions.Gamma(v + k + 1); //comes from MathNet.Numerics
summed += b / (kFactorial * gamma);
}
return a * summed;
}
在进行了大量重构和尝试了一些行不通的东西之后,我想出了这个。它主要是Boost逻辑,已经被改编并翻译成c#。
它并不完美(可能是由于舍入,精度等)。欢迎任何改进!Wolfram的真实Bessel_K值与我的适应方法之间的最大误差为0.0000001926%。当参数'v'是整数时,会发生这种情况。对我来说,这已经很接近了。
链接到小提琴:https://dotnetfiddle.net/QIYzK6
希望这能让一些人不那么头疼。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 在 C MexFunction 中使用 Besselk 函数
- c#中的BesselK函数