本文共 858 字,大约阅读时间需要 2 分钟。
#includeconst int maxn = 5;double x[maxn] = { 0.4, 0.55, 0.65, 0.8, 0.9};double y[maxn] = { 0.4175, 0.57815, 0.69657, 0.88811, 1.02652};void dq(double x[maxn], double y[maxn], double F[maxn][maxn]){ int i, j; for(i = 0; i < maxn; i++) F[i][0] = y[i]; //计算各阶差商 for(j = 1; j < maxn; j++) for(i = j; i < maxn; i++) F[i][j] = (F[i][j - 1] - F[i - 1][j - 1]) / (x[i] - x[i - j]); for(i = 0; i < maxn; i++){ //打印差商表 printf("%-10f", x[i]); for(j = 0; j <= i; j++) printf("%-10f", F[i][j]); printf("\n"); }}int main(){ int k; double P, X, F[maxn][maxn]; dq(x, y, F); while(scanf("%lf", &X) != EOF){ P = F[maxn - 1][maxn - 1]; //牛顿插值多项式 for(k = maxn - 2; k >= 0; k--) P = P * (X- x[k]) + F[k][k]; printf("P(%f) = %f\n", X, P); } return 0;}
实验结果: