我正在尝试编写一个简单的递归函数来评估C中的Associated Legendre多项式。到目前为止,我只写了L = 4和M = 3。我正在使用以下维基百科文章中的第七个递推公式:
https://en.wikipedia.org/wiki/Associated_Legendre_polynomials
这是我的代码:
#include <stdio.h>
#include <math.h>
long double Legendre(int L, int M, double x){
if((M == 0) && (L == 0)){
return 1;
}
if((M == 0) && (L == 1)){
return x;
}
if((M == 0) && (L == 2)){
return (1/2) * ((3*x*x) - 1);
}
if((M == 0) && (L == 3)){
return (1/2) * ((5*pow(x,3)) - (3*x));
}
if((M == 0) && (L == 4)){
return (1/8) * (3 - (30*x*x) + (35*pow(x,4)));
}
else if(M > 0){
return (((L - M + 1)*x*Legendre(L,M-1,x))
- ((L + M - 1)*Legendre(L-1,M-1,x)))
/ sqrt(1-(x*x));
}
return 0;
}
int main(void){
int L = 4;
int M = 2;
double x = 0.6;
printf("%Lf\n",Legendre(L,M,x));
}
根据Mathematica,L = 4,M = 2和x = 0.6的相关勒让德多项式应为7.3。但是,当我运行上面的程序时,我得到以下结果:
$ gcc Rodrigues.c -o Rodrigues
$ ./Rodrigues
0.000000
$
(我的源文件名是Rodrigues.c)。输出应该是7.3左右,而不是0.该代码还为不同的Ls生成其他非零(但仍然不正确)值。我怀疑这是因为我有点搞砸了递归(你可以告诉我,我我对编程比较陌生。我错过了什么?感谢。