拉格朗日多项式与均值

张开发
2026/4/17 13:27:18 15 分钟阅读

分享文章

拉格朗日多项式与均值
#include stdio.h // 多项式 × (x-a) void mulPoly(double p[], double a) { double temp[10] {0}; for (int i 0; i 9; i) { temp[i 1] p[i]; temp[i] - p[i] * a; } for (int i 0; i 10; i) p[i] temp[i]; } // 多项式相加 void addPoly(double res[], double src[]) { for (int i 0; i 10; i) res[i] src[i]; } int main() { int n; // 输入点数 printf(请输入数据点数量); scanf(%d, n); double x[20], y[20]; double sumY 0.0; // 循环输入 x y for (int i 0; i n; i) { printf(输入第%d组 x, y, i 1); scanf(%lf %lf, x[i], y[i]); sumY y[i]; } // 计算平均值 double avg sumY / n; printf(\n平均值 %.2f\n\n, avg); double total[10] {0}; // 拉格朗日构造多项式 for (int i 0; i n; i) { double base[10] {0}; base[0] 1.0; // 分子(x-xj)累乘 for (int j 0; j n; j) { if (j ! i) mulPoly(base, x[j]); } // 分母常数 double den 1.0; for (int j 0; j n; j) { if (j ! i) den * (x[i] - x[j]); } // 分子/分母 * yi for (int d 0; d 10; d) { base[d] base[d] / den * y[i]; } addPoly(total, base); } // 输出多项式公式 printf(插值多项式 L(x) \n); for (int i n - 1; i 0; i--) { if (total[i] -0.0001 total[i] 0.0001) continue; if (i n - 1) printf(%.4fx^%d, total[i], i); else printf(%.4fx^%d, total[i], i); } printf(\n); return 0; }

更多文章