数值计算方法实验2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学院(系)名称:

三.埃特金插值法

附录(源程序及运行结果): 一. 拉格朗日插值法

#include #include #define MAX 100 void main(){ int n,k=0,j=0;

double x[MAX],y[MAX],x0,y0=0; printf("请输入节点个数n :"); scanf("%d",&n);

printf("请输入节点值(x,y):");

for(int i=0;i

}

printf("使用拉格朗日插值法输出x 的y 值为:%lf\n",y0); } 运行结果:

二. 分段抛物线插值法

#include #include #define MAX 20

void Y(double x[],double y[],double x0,int i){ double y0;

printf("选取的节点为(%lf,%lf) (%lf,%lf) (%lf,%lf)\n",x[i-1],y[i-1],x[i],y[i],x[i+1],y[i+1]);

y0=(x0-x[i])*(x0-x[i+1])*y[i-1]/(x[i-1]-x[i])/(x[i-1]-x[i+1]) +(x0-x[i-1])*(x0-x[i+1])*y[i]/(x[i]-x[i-1])/(x[i]-x[i+1])

+(x0-x[i-1])*(x0-x[i])*y[i+1]/(x[i+1]-x[i-1])/(x[i+1]-x[i]);

printf("使用分段抛物线插值输出结果为:%lf\n",y0);

}

void main(){

int n,i;

double x[MAX],y[MAX],x0,y0=0;

printf("请输入节点个数n:");

scanf("%d",&n);

printf("请输入节点值(x,y):");

for(i=1;i<=n;i++) scanf("%lf,%lf",&x[i],&y[i]);

printf("输入所求节点的x的值:");

scanf("%lf",&x0);

if(x0<=x[1]) { i=2;

Y(x,y,x0,i);

}

if(x0>=x[n]) { i=n-1;

Y(x,y,x0,i);

}

for(i=2;i<=n;i++){

if(x0<=x[i]){

if(fabs(x0-x[i-1])<=fabs(x0-x[i])) i=i-1;

Y(x,y,x0,i);break;

}

}

}

运行结果:

三.埃特金插值法

#include

#include

#define MAX 100

void main(){

int n,k=0;

double x[MAX],y[MAX],x0,y0=0;

printf("请输入节点个数n:");

scanf("%d",&n);

printf("请输入节点值(x,y):");

for(int i=0;i

scanf("%lf,%lf",&x[i],&y[i]);

}

printf("输入所求节点的x的值:");

scanf("%lf",&x0);

while(k!=n){

for(int i=k;i

y[i]=(x0-x[k-1])/(x[i]-x[k-1])*y[i]+(x0-x[i])/(x[k-1]-x[i])*y[k-1];

k++;

}

printf("用埃特金插值法输出:%lf\n",y[n-1]);

}

运行结果:

相关文档
最新文档