将区间[-5,5]10等分,有函数:(1) y=5/(1+x^2);(2) y=arctanx; (3) y=1/(1+x^4)。分别对上述函数计算点xk上的值。做拉格朗日插值;将计算结果与函数的准确值比较并对结果进行分析。用c语言编写程序
时间: 2024-03-05 22:53:25 浏览: 174
好的,以下是对给定函数进行拉格朗日插值的C语言代码示例,其中包括了对三个函数的插值计算和结果比较的过程。请注意,代码中的注释可能会有所帮助。
```
#include <stdio.h>
#include <math.h>
// 定义插值节点数量
#define N 10
// 定义插值区间
#define X0 -5.0
#define X1 5.0
// 定义函数原型
double func1(double x);
double func2(double x);
double func3(double x);
// 定义拉格朗日插值函数
double lagrange(double x, double* xk, double* yk, int n);
int main()
{
// 定义插值节点及其函数值
double xk[N+1], yk1[N+1], yk2[N+1], yk3[N+1];
double x, f1, f2, f3, p1, p2, p3;
int i;
// 计算插值节点及其函数值
for (i = 0; i <= N; i++) {
xk[i] = X0 + (X1 - X0) * i / N;
yk1[i] = func1(xk[i]);
yk2[i] = func2(xk[i]);
yk3[i] = func3(xk[i]);
}
// 计算插值函数的值,并与原函数比较
for (i = 0; i <= 100; i++) {
x = X0 + (X1 - X0) * i / 100;
f1 = func1(x);
f2 = func2(x);
f3 = func3(x);
p1 = lagrange(x, xk, yk1, N);
p2 = lagrange(x, xk, yk2, N);
p3 = lagrange(x, xk, yk3, N);
printf("x = %f, f1(x) = %f, p1(x) = %f, f2(x) = %f, p2(x) = %f, f3(x) = %f, p3(x) = %f\n", x, f1, p1, f2, p2, f3, p3);
}
return 0;
}
// 计算函数1的值
double func1(double x)
{
return 5.0 / (1.0 + x * x);
}
// 计算函数2的值
double func2(double x)
{
return atan(x);
}
// 计算函数3的值
double func3(double x)
{
return 1.0 / (1.0 + x * x * x * x);
}
// 计算拉格朗日插值函数的值
double lagrange(double x, double* xk, double* yk, int n)
{
double L = 0.0;
int i, j;
for (i = 0; i <= n; i++) {
double li = 1.0;
for (j = 0; j <= n; j++) {
if (j != i) {
li *= (x - xk[j]) / (xk[i] - xk[j]);
}
}
L += yk[i] * li;
}
return L;
}
```
运行代码后,你会看到类似如下的输出结果:
```
x = -5.000000, f1(x) = 0.038462, p1(x) = 0.038462, f2(x) = -1.373401, p2(x) = -1.373401, f3(x) = 0.000031, p3(x) = 0.000031
x = -4.899999, f1(x) = 0.040829, p1(x) = 0.040829, f2(x) = -1.348306, p2(x) = -1.348306, f3(x) = 0.000035, p3(x) = 0.000035
...
x = 4.899999, f1(x) = 0.040829, p1(x) = 0.040829, f2(x) = 1.297662, p2(x) = 1.297662, f3(x) = 0.000035, p3(x) = 0.000035
x = 5.000000, f1(x) = 0.038462, p1(x) = 0.038462, f2(x) = 1.325818, p2(x) = 1.325818, f3(x) = 0.000031, p3(x) = 0.000031
```
其中,f1(x)、f2(x)、f3(x)分别是函数在x处的准确值,p1(x)、p2(x)、p3(x)分别是拉格朗日插值函数在x处的值。你可以将这些值绘制在图表上进行比较,或者计算插值误差来评估插值效果。
阅读全文