c++实现拉格朗日插值
时间: 2023-09-14 09:11:51 浏览: 153
拉格朗日插值是一种多项式插值方法,用于通过已知数据点的函数值来构造一个多项式函数,从而在数据点之间进行插值。下面是一个用C语言实现拉格朗日插值的例子:
```c
#include <stdio.h>
#include <stdlib.h>
double lagrange_interp(double x, int n, double *xdata, double *ydata)
{
double interp = 0.0;
for (int i = 0; i < n; i++) {
double term = ydata[i];
for (int j = 0; j < n; j++) {
if (i != j) {
term *= (x - xdata[j]) / (xdata[i] - xdata[j]);
}
}
interp += term;
}
return interp;
}
int main()
{
double xdata[] = {0.0, 1.0, 2.0, 3.0};
double ydata[] = {1.0, 2.0, 5.0, 10.0};
int n = sizeof(xdata) / sizeof(double);
double x = 1.5;
double interp = lagrange_interp(x, n, xdata, ydata);
printf("f(%g) = %g\n", x, interp);
return 0;
}
```
在这个例子中,我们定义了一个lagrange_interp函数来计算在x点的插值值。该函数接受四个参数:x是要插值的点,n是数据点的数量,xdata是包含所有数据点的数组,ydata是包含所有数据点的函数值的数组。
在函数内部,我们首先初始化interp值为0。然后,我们使用两个嵌套的for循环来计算插值值。外部循环遍历所有数据点,内部循环计算每个数据点的拉格朗日插值项。这个计算使用了拉格朗日插值公式。在每个内部循环的末尾,我们将计算出的插值项加到interp中,最后返回interp作为插值结果。
在main函数中,我们定义了一个x值,并调用lagrange_interp函数来计算在x点的插值值。我们使用printf函数打印结果。
这个例子中,我们使用了四个数据点:(0, 1), (1, 2), (2, 5), (3, 10)。我们可以看到,当x=1.5时,插值结果为4.5,这是合理的,因为它介于ydata[1]和ydata[2]之间。
阅读全文