Legendre多项式

时间限制: 1 Sec  内存限制: 128 MB

题目描述

Legendre多项式的递归公式

编写程序, 输出n阶Legendre多项式x在[-1,1]闭区间的101个点值, (每个点等间距)

输入

输入阶数 n

输出

输出n阶Legendre多项式x在[-1,1]闭区间的101个点值, 保留4位有效小数(每个点等间距)

样例输入

5

样例输出

-1.0000
-0.7204
-0.4796
-0.2744
-0.1017
0.0411
0.1570
0.2484
0.3177
0.3674
0.3995
0.4162
0.4193
0.4107
0.3922
0.3652
0.3313
0.2919
0.2482
0.2014
0.1526
0.1028
0.0529
0.0037
-0.0441
-0.0898
-0.1330
-0.1730
-0.2095
-0.2421
-0.2706
-0.2948
-0.3144
-0.3294
-0.3397
-0.3454
-0.3465
-0.3431
-0.3353
-0.3234
-0.3075
-0.2880
-0.2650
-0.2389
-0.2101
-0.1788
-0.1455
-0.1106
-0.0744
-0.0374
0.0000
0.0374
0.0744
0.1106
0.1455
0.1788
0.2101
0.2389
0.2650
0.2880
0.3075
0.3234
0.3353
0.3431
0.3465
0.3454
0.3397
0.3294
0.3144
0.2948
0.2706
0.2421
0.2095
0.1730
0.1330
0.0898
0.0441
-0.0037
-0.0529
-0.1028
-0.1526
-0.2014
-0.2482
-0.2919
-0.3313
-0.3652
-0.3922
-0.4107
-0.4193
-0.4162
-0.3995
-0.3674
-0.3177
-0.2484
-0.1570
-0.0411
0.1017
0.2744
0.4796
0.7204
1.0000

提示

x的取值在[-1, 1]之间, 每个点之间相距0.02, 即x=x+0.02, 这样就有101个点的数据

 #include <iostream>
#include <stdio.h>
using namespace std; double Leg(int n, double x)
{
double ans;
if(n == )
ans = ;
else if(n == )
ans = x;
else ans = ( ( * n - ) * x * Leg(n-,x) - (n - ) * Leg(n - ,x) ) / n;
return ans;
} int main()
{
int n;
double x;
scanf("%d",&n);
for(x = -; x <= 1.02; x=x+0.02)
{
double leg;
leg = Leg(n,x);
printf("%.4lf\n",leg);
}
return ;
}
05-14 16:39