// 求勒让德多项式在当前点的值 // 输入: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); } }