不等距节点下的牛顿插值公式以及拉格朗日插值公式实验课报告

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

数值分析实验报告三

插值法(2学时)

一实验目的

1.掌握不等距节点下的牛顿插值公式以及拉格朗日插值公式。二实验内容

1.已知函数表:

用牛顿插值公式求)

(y的近似值。

102

2. 已知函数表:

用拉格朗日插值公式计算01

x以及所对应的近似值。

=y

.5

4.1=

三实验步骤(算法)与结果

1.不等距节点下的牛顿插值公式

Ⅰ.按差商表计算n阶差商

12111[,,,][,,,]

[,,,]i i i n i i i n i i i n i n i

f x x x f x x x f x x x x x +++++-+++-=

- 其中

Ⅱ.按以下公式,带入x 值

00010120101101()()

()[,]

()()[,,]()()()[,,]

n n f x f x x x f x x x x x x x f x x x x x x x x x f x x -=+-+--++---

Ⅲ.得出结果()f x

程序代码:

#include"stdio.h"

#include"math.h" int main() {

int a,i,j;

printf("输入x 系数的个数:"); scanf("%d",&a); float d,e=0,c; float x[a];

float y[a-1][a];

printf("输入x 的系数:"); for(i=0;i

scanf("%f",&x[i]); }

printf("输入y 的系数:"); for(i=0;i

scanf("%f",&y[0][i]); }

for(i=0;i

printf("%1.6f ",x[i]); }

printf("\n");

for(i=0;i

{

printf("%1.6f ",y[0][i]);

}

for(j=1;j

{

for(i=0;i

{

y[j][i]=(y[j-1][i+1]-y[j-1][i])/(x[j+i]-x[i]);

}

}

printf("\n");

for(j=1;j

{

for(i=0;i

{

printf("%1.6f ",y[j][i]);

}

printf("\n");

}

printf("输入x的值:");

scanf("%f",&c);

for(j=1;j

{

d=1;

for(i=0;i

{

d=d*(c-x[i]);

}

e=e+d*y[j][0];

}

e=e+y[0][0];

printf("%1.6f",e);

return 0;

}

运算结果:

15.793629

2.拉格朗日插值公式

120010200110110111201()()()

()()

()()()

()()()()()()()()()()()()

()

()()()

()

n n i i n i i i i i i i n n n n n n n x x x x x x f x f x x x x x x x x x x x x x x x f x x x x x x x x x x x x x x x f x x x x x x x R x -+-+-----=

---+----+-------+

---+

0101()()()()[,,,,]n n n R x x x x x x x f x x x x =--- 其中余式

程序代码:

#include"stdio.h" #include"math.h" int main() {

int a,i,j;

printf("输入x系数(y的系数)的个数:");

scanf("%d",&a);

float e,k=1,p=0;

float x[a];

float y[a];

printf("输入x的系数(y的系数):");

for(i=0;i

{

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

}

printf("输入y的系数(x的系数):");

for(i=0;i

{

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

}

printf("输入你要求的值:");

scanf("%f",&e);

for(j=0;j

{

k=1;

for(i=0;i

{

if(i==j)

{

k=k;

}

else

{

k=k*((e-x[i])/(x[j]-x[i]));

}

}

k=k*y[j];

p=p+k;

}

printf("%f",p);

return 0;

}

相关文档
最新文档