数值分析:Newtown插值多项式推导+代码实现
一、差商的推导及其性质
二、构造n次Newtown插值多项式以及n次Newtown插值余项
三、列差商表和例题
四、C++代码实现以及验证例题
#include<stdio.h>
#include<iostream>
using namespace std;
class Newtown {
public:
void addX(double n) {
X = n;
}
//构造差商前先构造W_n(x):
//x数组,X为想要预测的数字,n为W_(x)的次数
double W_n(double x[], double X, int n) {
double Z = 1;
for (int i = 0; i < n; i++) {
Z = Z * (X - x[i]);
}
return Z;
}
//构造k阶差商:
double f_k(double x[], double y[], int k) {
if (k == 1) {
return (y[k] - y[0]) / (x[k] - x[0]);
}
double* z= new double[k];
double* zy= new double[k];
for (int i = 1; i <= k; i++) {
z[i - 1] = x[i];
zy[i - 1] = y[i];
}
return (f_k(x, y, k - 1) - f_k(z, zy, k - 1)) / (x[0] - x[k]);
}
//n次Newtown插值多项式
double formula(double x[], double y[], int n) {
if (n == 0) {
return y[0];
}
return formula(x, y, n - 1) + f_k(x, y, n) * W_n(x, X, n);
}
double X;
};
int main() {
double x[] = { -2,0,1,2 };
double y[] = { 17,1,2,17 };
int n = 3 ;
Newtown N1;
N1.addX(0.5);
cout << "预测值为:" << N1.formula(x,y,n) << endl;
return 0;
}
,y,n) << endl;
return 0;
}
[外链图片转存中...(img-ke1MtUeJ-1668567158451)]