C# math.net中的第一类贝塞尔函数
我需要使用c在unity3d中使用第一种贝塞尔函数。在尝试在unity中使用mathnet.numerics.dll后,我发现许多错误显然是由于unity3d不支持.NET 4。然后我决定使用jetbrains dotPeek反编译器查找贝塞尔函数源代码 然而,贝塞尔函数给出了错误的输出,老实说,数学高于我的工资等级,所以调试它非常困难。有人能看到我用过的东西有什么错误吗 例如,x=20的输出为4355822.5571362 其中应为0.167025C# math.net中的第一类贝塞尔函数,c#,math,math.net,bessel-functions,C#,Math,Math.net,Bessel Functions,我需要使用c在unity3d中使用第一种贝塞尔函数。在尝试在unity中使用mathnet.numerics.dll后,我发现许多错误显然是由于unity3d不支持.NET 4。然后我决定使用jetbrains dotPeek反编译器查找贝塞尔函数源代码 然而,贝塞尔函数给出了错误的输出,老实说,数学高于我的工资等级,所以调试它非常困难。有人能看到我用过的东西有什么错误吗 例如,x=20的输出为4355822.5571362 其中应为0.167025 public static double B
public static double BesselI0(double x)
{
if (x < 0.0)
x = -x;
if (x <= 8.0)
{
double x1 = x / 2.0 - 2.0;
return Math.Exp(x) * ChebyshevA(BesselI0A, x1);
}
else
{
double x1 = 32.0 / x - 2.0;
return Math.Exp(x) * ChebyshevA(BesselI0B, x1) / Math.Sqrt(x);
}
}
internal static double ChebyshevA(double[] coefficients, double x)
{
int num1 = 0;
double[] numArray = coefficients;
int index = num1;
int num2 = 1;
int num3 = index + num2;
double num4 = numArray[index];
double num5 = 0.0;
int num6 = coefficients.Length - 1;
double num7;
do
{
num7 = num5;
num5 = num4;
num4 = x * num5 - num7 + coefficients[num3++];
}
while (--num6 > 0);
return 0.5 * (num4 - num7);
}
private static readonly double[] BesselI0A = new double[30]
{
-4.41534164647934E-18,
3.33079451882224E-17,
-2.43127984654795E-16,
1.71539128555513E-15,
-1.16853328779935E-14,
7.67618549860494E-14,
0.0 / 1.0,
0.0 / 1.0,
0.0 / 1.0,
0.0 / 1.0,
-5.18979560163526E-10,
2.65982372468239E-09,
-1.30002500998625E-08,
6.04699502254192E-08,
-2.67079385394061E-07,
1.1173875391201E-06,
-4.41673835845875E-06,
1.64484480707289E-05,
-5.7541950100821E-05,
0.000188502885095842,
-0.000576375574538582,
0.00163947561694134,
-0.00432430999505058,
0.010546460394595,
-0.0237374148058995,
0.0493052842396707,
-0.0949010970480476,
0.171620901522209,
-0.304682672343198,
0.676795274409476
};
private static readonly double[] BesselI0B = new double[25]
{
-7.23318048787475E-18,
-4.83050448594418E-18,
4.46562142029676E-17,
3.46122286769746E-17,
-2.82762398051658E-16,
-3.42548561967722E-16,
1.77256013305653E-15,
3.81168066935262E-15,
-9.55484669882831E-15,
-4.15056934728722E-14,
1.54008621752141E-14,
0.0 / 1.0,
0.0 / 1.0,
0.0 / 1.0,
0.0 / 1.0,
0.0 / 1.0,
0.0 / 1.0,
4.94060238822497E-10,
3.39623202570839E-09,
2.26666899049818E-08,
2.04891858946906E-07,
2.89137052083476E-06,
6.88975834691682E-05,
0.00336911647825569,
0.804490411014109
};
如果您试图使用贝塞尔函数,而不是修改后的贝塞尔函数,则应查找贝塞尔j,而不是贝塞尔i。然而,我在这个库中没有发现这样的情况。不深入细节,我的演算已经不可靠了,你是否尝试过验证你的操作顺序是否正确?我已经看到一些数学函数仅仅由于操作顺序而返回意外结果的问题。我将尝试验证这一点。谢谢你确定这是正确的功能吗?第一类和第二类的贝塞尔函数通常用J和Y表示,而第一类和第二类的修改贝塞尔函数通常用I和K表示。还声称它们支持.NET 3.5。对不起,我正在查阅文档。代码用于修改的贝塞尔函数。不是贝塞尔函数。谢谢