计算方法上机题

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

第八题:

一,题目

(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)

(2)

四,结果分析

编程基本按照课本套公式,方法从(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;

相关文档
最新文档