数值计算方法实验2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院(系)名称:
三.埃特金插值法
附录(源程序及运行结果): 一. 拉格朗日插值法
#include
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 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]); } 运行结果: