计算方法上机题doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八题:
一,题目
从函数表 x 0.0 0.1 0.195 0.3 0.401 0.5 f(x) 0.39894 0.39695 0.39142 0.38138 0.36812 0.35206 出发,用下列方法计算f(0.15),f(0.31),f(0.47)的近似值: (1)分段线性插值;(2)分段二次插值;(3)全区间上拉格朗日插值
(要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的结点)。
二,基本方法
(1)先选取两个结点x i 1-与x i 使∈x [x i 1-,x i ],然后在区间[x i 1-,x i ]上作线
性插值,即得f(x)≈x
x x x y x x x x y
L i i
i i
i
i i
i x 1
1
1
1
1
)(------+--=。
(2)选取距点x 最近的三个结点
x
i 1
-,
x
i
,
x
i 1
+进行二次插值,即取
f(x)≈)]([)(1
1
1
,12
∑∏+-=+≠-=--=i i k i k
j i j j
k
j
k
x
x x x y L x 。 (3)n=5,
)
)...()()...()
)...()()...(()()(11
1100
(x x x x x
x x x x x x x x x x x y
l
y L n k k k k k
k
n k k n
k k
k
n
k k
n
x x --------==+-+-==∑∑
三,计算结果 (1) x 0.15 0.31 0.47 f(x)
0.394039 0.380067 0.356927 (2)
x 0.15 0.31 0.47 f(x)
0.394482
0.380225
0.361399
(3)
x 0.15 0.31 0.47
f(x) 0.394473 0.380219 0.357222 四,结果分析
编程基本按照课本套公式,方法从(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;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++)
{
y=0;
printf("Enter x:");
scanf("%lf",&x);
for(i=0;i<6;i++){
p=1;
for(k=0;k<6;k++){