当前位置:首页 > 拉格朗日插值法课程设计
Rn(x)?Mn?1?n?1(x). (n?1)! 当n?1时,线性插值余项为
11R1(x)?f''(?)?2(x)?f''(?)(x?x0)(x?x1),??[x0,x1];
22 当n?2时,抛物线插值的余项为
1R2(x)?f'''(?)(x?x0)(x?x1)(x?x2),??[x0,x2].
6 利用余项表达式(1.6),当f(x)?xk(k?n)时,由于f(n?1)(x?0),于是有
Rn(x)?x??xikli(x)?0,
ki?0n由此得
?xl(x)?xkiii?0nk,k?0,1,...,n. (1.7)
特别当k?0时,有
?li(x)?1. (1.8)
i?0n(1.7)式和(1.8)式也是插值基函数的性质,利用它们还可求一些和式的值.
??? 例1 已知函数表sin=0.5000,sin=0.7071,sin=0.8660,分别由线性插值与
6432?抛物插值求sin的数值解,并由余项公式估计计算结果的精度.
9 解(1)这里有三个节点,线性插值需要两个节点,根据余项公式,我们选取前两个节点,易知:
2?2?0.7071?0.50002??sin)=0.5000+(-) ?L1(
??9996?462 =0.5000+0.2071?=0.6381
3 截断误差,
R1(2?1??(sinx)??2??2??)=(?)(?)????7.615?10?3, 92183629694 得??7.615?10?3?0.5?10?1.知结果至少有1位有效数字. (2)易知
6
2??2?3?2??2??-)(-)(?)(?)2?2?93?0.7071+ sin?L2()?9493?0.5000?96????????99(-)(-)(?)(?)646346432??2??(?)(?)12894?0.866= 960??0.7071??0.8660=0.6434 .
????99?0.50009(?)(?)3634截断误差为:
(R2(1???2?(sinx)???2??2??2??)?(?)(?)(?)?????0..861?10?2 96969494x??618369得??8.861?10?4?0.5?10?2.知结果至少有两位数字. 比较本题精确解sin
2??0.642787609...,实际误差限分别为0.0047和0.00062. 9
7
第二章 拉格朗日插值法的程序设计及应用
§2.1 拉格朗日插值法的Matlab实现
实现Lagrange插值的步骤如下:
Step1 定义函数f = 1./(25*x^2+1)将其保存在f.m 文件中,具体程序如下: function y = f1(x) y = 1./(25x.^2+1);
Step2 定义拉格朗日插值函数,将其保存在lagrange.m 文件中,具体实现程序
编程见附录A.
在Matlab中,利用Lagrange插值方法进行多项式插值,并将图形显式出来.
Step3 建立测试程序,保存在text.M文件中,实现画图: x=-1:0.001:1; y=(1+25.*x.^2).^-1; p=polyfit(x,y,n); py=vpa(poly2sym(p),10); plot_x=-1:0.001:1; f1=polyval(p,plot_x); figure
plot(x,y,'r',plot_x,f1) 输入n=6时,出现如下面的图2.1所示.
图2.1 Largange插值图像
8
通过图2.1可以看出当n=6时,被插图像与插值图像没有很好的模拟,于是重新运行text.M,并选择n=15,运行,显示如图2.2所示.
图2.2 Largange插值图像
综合图2.1和图2.2的Lagrange插值图像可以看出,n=15时的被插图像与插值图像实现了很好的模拟. 结果分析:
由图2.1和图2.2可以看出n的次数越高,越能实现较好的模拟,从而模拟的效果越好,从图2.2就可以看出两条曲线接近重合,而图一两条直线却分开很多,误差较大,精度也不高.因此在实际的应用中应该尽量在给定的条件下增加n的次数,才能实现与原函数较好的重合,才能使计算的结果更加的准确,从而减小了误差.
§2.2 拉格朗日插值法的C语言实现
在Visual C++中,用C语言实现拉格朗日插值.
§2.2.1 流程图
要用C语言实现拉格朗日插值,先画出流程图. 程序流程图:
9
共分享92篇相关文档