已知三个点,用C语言构造一次二次lagrange插值多项式
时间: 2024-09-10 11:07:58 浏览: 50
在数值分析中,拉格朗日插值是一种构造插值多项式的技巧。给定三个点(x0, y0),(x1, y1),(x2, y2),我们可以通过拉格朗日插值公式来构造一个通过这三个点的一次二次多项式。拉格朗日插值多项式的构造方式如下:
L(x) = y0 * l0(x) + y1 * l1(x) + y2 * l2(x)
其中,li(x) 是基多项式,定义为:
l0(x) = ((x - x1) * (x - x2)) / ((x0 - x1) * (x0 - x2))
l1(x) = ((x - x0) * (x - x2)) / ((x1 - x0) * (x1 - x2))
l2(x) = ((x - x0) * (x - x1)) / ((x2 - x0) * (x2 - x1))
在C语言中,我们可以通过编写一个函数来实现这个插值多项式。以下是一个简单的示例代码:
```c
#include <stdio.h>
// 计算基多项式l0(x), l1(x), l2(x)的函数
double basePolynomial(double x, int i, double x0, double x1, double x2) {
double numerator = 1;
double denominator = 1;
for (int j = 0; j < 3; j++) {
if (j != i) {
numerator *= (x - (j == 0 ? x1 : j == 1 ? x2 : x0));
denominator *= (x0 + (j == 0 ? x1 + x2) + (j == 1 ? x0 + x2) + (j == 2 ? x0 + x1));
}
}
return numerator / denominator;
}
// 拉格朗日插值函数
double lagrangeInterpolation(double x, double x0, double y0, double x1, double y1, double x2, double y2) {
double L = 0;
L += y0 * basePolynomial(x, 0, x0, x1, x2);
L += y1 * basePolynomial(x, 1, x0, x1, x2);
L += y2 * basePolynomial(x, 2, x0, x1, x2);
return L;
}
int main() {
double x0 = 1, y0 = 2; // 三个点
double x1 = 2, y1 = 3;
double x2 = 3, y2 = 5;
double x = 2.5; // 要计算插值的点
printf("L(%lf) = %lf\n", x, lagrangeInterpolation(x, x0, y0, x1, y1, x2, y2));
return 0;
}
```
这段代码定义了一个函数`lagrangeInterpolation`,它接收一个x值和三个点的坐标,然后计算并返回这个x值对应的插值多项式的值。`basePolynomial`函数用于计算基多项式。在`main`函数中,我们以三个点和一个插值点作为示例,调用`lagrangeInterpolation`函数并打印结果。
阅读全文