插值需求的诞生:如何通过已知数据得到函数的近似解析表达式,从而获得更多的有用数据。
在实际应用中常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法“模拟产生”一些新的但又比较靠谱的值来满足需求,这就是插值的作用。
一、Lagrange插值节点基函数推导
二、n次Lagrange插值多项式公式推导
由于上面已经推导出Lagrange插值节点基函数的公式所以下面直接带入就可以了。
三、Lagrange插值余项(误差)推导
四、例题
五、插值误差估计-事后误差估计
文章来源:https://www.toymoban.com/news/detail-520760.html
六、C++代码实现以及验证例题
//定义拉格朗日插值多项式函数.目标:输入想预测的数字返回预测值
//x数组,y数组,num为想要预测的x,n为拉格朗日多项式次数
double Lagrange(double* x,double* y,double num,int n) {
//x,y数组长度必须一致
if ((sizeof(x) / sizeof(x[0])) != (sizeof(y) / sizeof(y[0]))) {
cout << "x,y数组长度不一致" << endl;
return 99999;
}
//给定n+1个节点最多只能构造n次Lagrange插值节点基函数
if (sizeof(x) / sizeof(x[0]) > n) {
return 99999;
}
//构造Lagrange插值节点基函数
double* l = new double[n+1];
for (int k = 0; k <= n; k++) {
double Z = 1;
for (int j = 0; j <= n;j++) {
if (j == k) {
continue;
}
Z = Z * (num - x[j]) / (x[k] - x[j]);
}
l[k] = Z;
}
//计算L_n(x):
double Ln = 0;
for (int k = 0; k <= n; k++) {
Ln = Ln + l[k]*y[k];
}
return Ln;
}
int main() {
double x[] = { 10,11,12,13 };
double y[] = { 2.302585,2.397895,2.484907,2.564949 };
int n = 2;
double num = 11.25;
cout << "预测值为:" << Lagrange(x, y, num, n) << endl;
return 0;
}
文章来源地址https://www.toymoban.com/news/detail-520760.html
到了这里,关于数值分析:拉格朗日插值法笔记以及C++代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!