用C++实现Description: 数学poly函数的展开式也称为关于x的n阶勒让德多项式,它的递推公式为: 1n=0 polynx)= xn=1 ()-)>)y-10-1-1-/o1om0-020) n> 1给定x,请你计算n哪阶勒让德多项式的值。 Input: 输入数据中含有些浮点数:(0<x<1). Output: 对于每个x,分别计算2阶3阶4个5阶、6阶的勤让德多项式的值,其每个值的精度为6位小数。输出时,先列出x的信。保留3位小数精度,然后每输出一个阶值之前,都空出2格,由此字排开,形成一张多项式表,见样本输出格式,其中标题行上第一个对准小数点后第一位。后面的每个字母p对准下列的小数点位置。
时间: 2023-06-17 16:03:25 浏览: 126
以下是用C++实现该题的代码:
```cpp
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const int MAXN = 6;
double p[MAXN + 1][MAXN + 1];
void init(double x) {
p[0][0] = 1;
p[1][1] = sqrt(1 - x * x);
p[2][2] = (3 * x * x - 1) / 2;
for (int n = 3; n <= MAXN; n++) {
p[n][n] = (2 * n - 1) * x * p[n - 1][n - 1] / n - (n - 1) * p[n - 2][n - 2] / n;
for (int m = n - 1; m >= 1; m--) {
p[n][m] = ((2 * n - 1) * x * p[n - 1][m] - (n + m - 1) * p[n - 2][m]) / (n - m);
}
p[n][0] = ((2 * n - 1) * x * p[n - 1][0] - n * p[n - 2][0]) / n;
}
}
int main() {
double x;
cout << fixed << setprecision(3);
while (cin >> x) {
init(x);
cout << setw(10) << x;
for (int i = 2; i <= MAXN; i++) {
cout << setw(10) << p[i][0];
}
cout << endl;
cout << setw(10) << ' ';
for (int i = 2; i <= MAXN; i++) {
cout << ' ' << setw(7) << 'p' << i << "(x)";
}
cout << endl;
for (int m = 1; m <= MAXN; m++) {
cout << setw(10) << 'p' << m << "(x)";
for (int n = m; n <= MAXN; n++) {
cout << setw(10) << p[n][m];
}
cout << endl;
}
}
return 0;
}
```
输入浮点数x后,我们通过 init() 函数计算出勒让德多项式的值,并将其存储在 p 数组中。该函数的实现参考了勒让德多项式的递推公式。
接着,我们按照题目要求输出结果。首先输出 x 值和多项式阶数,然后输出每个多项式的值。注意到输出格式中多项式阶数之间需要空出 2 个字符,这可以通过 setw() 函数实现。
完整代码
阅读全文