- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
拉格朗日插值算法在工程中的应用
杜江涛
090402 090402104
【摘要】 本文简介拉格朗日插值,它的算法及程序和拉格朗日在实际生活中的运用。运用了拉格朗日插值的公式,以及它在MATLAB中的算法程序,并用具体例子说明。拉格朗日插值在很多方面都可以运用,具有很高的应用价值。
【关键词】算法;作业;拉格朗日;插值;公式;算法程序;应用;科学。
1前言
约瑟夫·拉格朗日(Joseph Louis Lagrange),法国数学家、物理学家。他在数学、力学和天文学三个学科领域中都有历史性的贡献,其中尤以数学方面的成就最为突出。拉格朗日对流体运动的理论也有重要贡献,提出了描述流体运动的拉格朗日方法。数据建模有两大方法:一类是插值方法,另一类是拟合函数一般的说,插值法比较适合数据准确或数据量小的情形。然而Lagrange插值有很多种,1阶,2阶,…n阶。我们可以利用拉格朗日插值求方程,根据它的程序求原方程的图像。下面我具体介绍分析一下拉格朗日插值的算法设计及应用。
2算法y=f(x)在若干点的函数值=(i=0,1,,n)一个差值问题就是求一“简单”的函数p(x):p()=,i=0,1,,n, (1)
则p(x)为f(x)的插值函数,而f(x)为被插值函数会插值原函数,,,,...,为插值节点,式(1)为插值条件,如果对固定点求f()数值解,我们称为一个插值节点,f()p()称为点的插值,当[min(,,,...,),max(,,,...,)]时,称为内插,否则称为外插式外推,特别地,当p(x)为不超过n次多项式时称为n阶Lagrange插值。
2.2Lagrange插值公式
(1)线性插值
设已知 , 及=f() ,=f(),为不超过一次多项式且满足=,=,几何上,为过(,),(,)的直线,从而得到
=+(x-). (2)
为了推广到高阶问题,我们将式(2)变成对称式
=(x)+(x).
其中,
(x)=,(x)=。均为1次多项式且满足
(x)=1且(x)=0。或(x)=0且(x)=1。
两关系式可统一写成= 。 (3)
(2)n阶Lagrange插值
设已知,,,...,及=f()(i=0,1,.....,n),为不超过n次多项式且满足(i=0,1,...n).
易知=(x)+....+.
其中,均为n次多项式且满足式(3)(i,j=0,1,...,n),再由(ji)为n次多项式的n个根知=c.最后,由
c=,i=0,1,...,n.
总之,=,=式为n阶Lagrange插值公式,其中,(i=0,1,...n)称为n阶Lagrange插值的基函数。
2.3,Lagrange插值余项
设,,,...,[a,b],f(x)在[a,b]上有连续的n+1阶导数,为f(x)关于节点,,,...,的n阶Lagrange插值多项式,则对任意x[a,b],
其中,位于,,,...,及x之间(依赖于x),(x)=
Eg1:已知函数表sin=0.5000,sin=0.7071,sin=0.8660,分别由线性插值与抛物插值求sin的数值解,并由余项公式估计计算结果的精度。
解:(1)这里有三个节点,线性插值需要两个节点,根据余项公式,我们选取前两个节点,易知:
sin()=0.5000+(-)
=0.5000+0.2071=0.6381
截断误差,
=,
得知结果至少有1位有效数字。
易知sin
0.7071+=0.8660=0.6434
截断误差为:
得知结果至少有两位数字。
比较本题精确解sin=0.642787609...,实际误差限分别为0.0047和0.00062。
3算法仿真
3.1 Lagrange插值算法和程序
function yy=nalagr(x,y,xx)
%用途:Lagrange插值法数值求解;格式:yy=nalagr(x,y,xx)
%x是节点向量,y是节点上的函数值,xx是插值点(可以多个),yy返回插值
m=length(x);n=length(y);
if m~=n,error(向量x与y的长度必须一致);end
s=0;
for i=1:n
t=ones(1,length(xx));
for j=1:n
if j~=i
t=t.*(xx-x(i))/(x(i)-x(j));
end
end
s=s+t*y(i);
end
yy=s;
用以上程序的Eg1的结果为
x=pi*[1/6 1/4];y=[0.5 0.7071];xx=2*pi/9;
yy1=nalagr(x,y,xx)
yy1 =
文档评论(0)