不等距节点下的牛顿插值公式以及拉格朗日插值公式实验课报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }