c++ 拉格朗日插值多项式
时间: 2023-06-28 16:14:15 浏览: 119
拉格朗日插值多项式
拉格朗日插值多项式是一种常用的插值方法,它可以通过已知的数据点来构造一个多项式函数,从而在未知的数据点处进行插值。
具体来说,假设有n个数据点(x1,y1),(x2,y2),...,(xn,yn),其中x1<x2<...<xn,要构造一个n-1次多项式函数P(x),使得P(xi)=yi,那么拉格朗日插值多项式可以表示为:
P(x)=∑(i=1 to n) yiL(x,i) / L(xi,i)
其中L(x,i)是一个n-1次的基函数,它可以表示为:
L(x,i)=∏(j=1 to n, j≠i) (x-xj)/(xi-xj)
这个基函数的特点是,当x=i时,L(x,i)=1,而当x≠i时,L(x,i)=0。因此,在求解P(x)的时候,只有当x等于某个xi时,才会有相应的yiL(x,i)会对P(x)做出贡献,而其他的yiL(x,i)都会变成0。
下面是一个使用c++实现拉格朗日插值多项式的示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 求解拉格朗日插值多项式
double lagrange_interpolation(const vector<double>& x, const vector<double>& y, double xi) {
int n = x.size();
double res = 0;
for (int i = 0; i < n; i++) {
double Li = 1;
for (int j = 0; j < n; j++) {
if (j != i) {
Li *= (xi - x[j]) / (x[i] - x[j]);
}
}
res += y[i] * Li;
}
return res;
}
int main() {
vector<double> x = {1, 2, 3, 4, 5};
vector<double> y = {2.1, 3.5, 4.2, 5.0, 6.3};
double xi = 2.5;
double res = lagrange_interpolation(x, y, xi);
cout << "P(" << xi << ") = " << res << endl;
return 0;
}
```
阅读全文