1 / 12
文档名称:

计算方法上机题.doc

格式:doc   大小:976KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

计算方法上机题.doc

上传人:czhenrgjiangh 2021/5/28 文件大小:976 KB

下载得到文件列表

计算方法上机题.doc

文档介绍

文档介绍:第八题:
一,题目
从函数表
x






f(x)






出发,用下列方法计算f(),f(),f()的近似值:
分段线性插值;(2)分段二次插值;(3)全区间上拉格朗日插值
(要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的结点)。
二,基本方法
先选取两个结点与使[,],然后在区间[,]上作线性插值,即得f(x)≈。
选取距点x最近的三个结点,,进行二次插值,即取f(x)≈。
n=5,
三,计算结果
(1)
x



f(x)



(2)
x



f(x)



(3)
x



f(x)



四,结果分析
编程基本按照课本套公式,方法从(1)至(3),计算结果越来越精确。
五,源程序
(1)
#include<>
int main(void)
{
int i,j;
double a[6],b[6],x,y;
printf("Enter x:");
for(i=0;i<6;i++)
scanf("%lf",&a[i]);
printf("Enter f(x):");
for(i=0;i<6;i++)
scanf("%lf",&b[i]);
for(j=0;j<3;j++){
printf("Enter x:");
scanf("%lf",&x);
for(i=0;x>a[i];i++);
y=b[i-1]*(x-a[i])/(a[i-1]-a[i])+b[i]*(x-a[i-1])/(a[i]-a[i-1]);
printf("x=%lf , ",x);
printf("y=%lf\n",y);
}
return 0;
}
(2)
#include<>
int main(void)
{
int i,j;
double a[6],b[6],x,y;
printf("Enter x:");
for(i=0;i<6;i++)
scanf("%lf",&a[i]);
printf("Enter f(x):");
for(i=0;i<6;i++)
scanf("%lf",&b[i]);
for(j=0;j<3;j++){
printf("Enter x:");
scanf("%lf",&x);
for(i=0;x>a[i];i++);
if((a[i+1]-x)<(x-a[i-2]))
{
y=b[i-1]*(x-a[i])/(a[i-1]-a[i])*(x-a[i+1])/(a[i-1]-a[i+1]);
y=y+b[i]*(x-a[i-1])/(a[i]-a[i-1])*(x-a[i+1])/(a[i]-a[i+1]);
y=y+b[i+1]*(x-a[i-1])/(a[i+1]-a[i-1])*(x-a[i])/(a[i+1]-a[i]);
printf("x=%lf , ",x); printf("y=%lf\n",y);
}
else{
y=b[i-2]*(x-a[i-1])/(a[i-2]-a[i-1])*(x-a[i])/(a[i-2]-a[i]);
y=y+b[i-1]*(x-a[i-2])/(a[i-1]-a[i-2])*(x-a[i])/(a[i-1]-a[i]);
y=y+b[i]*(x-a[i-2])/(a[i]-a[i-2])*(x-a[i-1])/(a[i]-a[i-1]);
printf("x=%lf , ",x); printf("y=%lf\n",y);
}
}
return 0;
}
(3)
#include<>
int main(void)
{
int i,j,k;
double a[6],b[6],x,y,p;
printf("Enter x:");
for(i=0