在区间[-1,1]上,对被插函数f(x)=1/(1+16x^2 )构造插值多项式,采用空间上均匀分布的节点,构造不同阶的插值多项式来近似被插函数,画出精确曲线、近似曲线及误差线。的C语言代码
时间: 2024-03-19 18:45:16 浏览: 38
牛顿插值多项式C代码.zip
这是一个求解插值多项式的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10 //节点个数
#define M 100 //插值点个数
#define a -1 //插值区间左端点
#define b 1 //插值区间右端点
double f(double x){
return 1.0/(1+16*x*x);
}
double lagrange(double x, double *px, double *py, int n){
double L=0.0;
for(int i=0;i<n;i++){
double w=1.0;
for(int j=0;j<n;j++){
if(j!=i){
w*=(x-px[j])/(px[i]-px[j]);
}
}
L+=w*py[i];
}
return L;
}
int main(){
double x[N], y[N], X[M], Y[M], E[M];
double h=(b-a)/(N-1);
for(int i=0;i<N;i++){
x[i]=a+i*h;
y[i]=f(x[i]);
}
h=(b-a)/(M-1);
for(int i=0;i<M;i++){
X[i]=a+i*h;
Y[i]=f(X[i]);
E[i]=Y[i]-lagrange(X[i], x, y, N);
}
FILE *fp=fopen("results.txt", "w");
fprintf(fp, "x\tf(x)\tL(x)\tE(x)\n");
for(int i=0;i<M;i++){
fprintf(fp, "%lf\t%lf\t%lf\t%lf\n", X[i], Y[i], lagrange(X[i], x, y, N), E[i]);
}
fclose(fp);
printf("Results saved in file 'results.txt'\n");
return 0;
}
```
这段代码使用拉格朗日插值法来求解插值多项式,并将结果保存在文件中。您可以根据需要修改节点个数N、插值点个数M、插值区间左右端点a和b,以及被插函数f(x)。
阅读全文