123456789101112131415161718192021222324252627282930313233343536 |
- // 求勒让德多项式在当前点的值
- // 输入:n:多项式的阶数
- // x:当前点的值
- // 方法:正交多项式的三维递推公式
- // 编写:李兆亭
- // 时间:2019 / 11 / 04
- // 其他:适用于求解单点处函数值
- #include "GPM.h"
- int Legendre(int* n, double* x0, double* f)
- {
- if (*n == 0) {
- *f = 0;
- }
- else if (*n == 1) {
- *f = *x0;
- }
- else {
- // 公式递推
- double L0 = 1;
- vec L(*n, fill::zeros);
- L(0) = *x0;
- for (int i = 0; i < (*n) - 1; i++ ) {
- // cout << i << endl;
- if (i == 0) {
- L(i + 1) = ((2 * (i + 1) + 1)*(*x0)*L(i) - (i + 1)*L0) / (i + 2);
- }
- else {
- L(i + 1) = ((2 * (i + 1) + 1)*(*x0)*L(i) - (i + 1)*L(i - 1)) / (i + 2);
- }
- // L.print("L");
- }
- *f = L((*n) - 1);
- }
- }
|