ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:115.86KB ,
资源ID:4393656      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4393656.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(拉格朗日插值实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

拉格朗日插值实验报告.docx

1、拉格朗日插值实验报告实验名称: 实验一 拉格朗日插值1 引言我们在生产生活中常常会遇到这样的问题:某个实际问题中,函数f(x)在区间a,b上存在且连续,但却很难找到其表达式,只能通过实验和观测得到有限点上的函数表。显然,根据这些点的函数值来求其它点的函数值是非常困难的。有些情况虽然可以写出表达式,但结构复杂,使用不方便。所以我们总是希望根据已有的数据点(或函数表)来构造某个简单函数P(x)作为f(x)的近似值。插值法是解决此类问题的一种比较古老的、但却很常用的方法。它不仅直接广泛地应用于生产实际和科学研究中,而且也是进一步学习数值计算方法的基础。2 实验目的和要求运用Matlab编写三个.m文

2、件,定义三种插值函数,要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的节点。分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f,f,f的近似值。已知函数表如下:xf(x)3 算法原理与流程图(1)原理设函数y=在插值区间a,b上连续,且在n+1个不同的插值节点ax0,x1,xnb上分别取值y0,y1,yn。目的是要在一个性质优良、便于计算的插值函数类中,求一简单函数P(x),满足插值条件P(xi)=yi(i=0,1,n),而在其他点xxi上,作为f(x)近似值。求插值函数P(x)的方法称为插值法。在本实验中,采用拉格朗日插值法。分段低次插值当给定了n+1个点x0x1xn

3、上的函数值y0,y1,yn后,若要计算xxi处函数值f(x)的近似值,可先选取两个节点xi-1与xi使xxi-1,xi,然后在小区间xi-1,xi上作线性插值,即得这种分段低次插值叫分段线性插值,又称折线插值。类似地,我们可以选取距离x最近的三个节点xi-1,xi与xi+1,然后进行二次插值,即得这种分段低次插值叫分段二次插值,又称分段抛物线插值。全区间上拉格朗日插值对节点xi(i=0,1,n)中任一点xk(0kn),作一n次多项式lk(x),使它在该点上的取值为1,在其余点xi(i=0,1,k-1,k+1,n)上取值为零。对应于每一节点xk(k=0,1,n),都能写出一个满足此条件的多项式,

4、这样写出了n+1个多项式l0(x),l1(x),ln(x),其中;由条件可得于是我们可以得出如下的拉格朗日n次插值多项式(对于全区间上的插值,n取函数表的长度)(2)流程图 分段线性插值 分段二次插值 全区间拉格朗日插值4 程序代码及注释1、分段线性插值%分段线性插值function y=piece_linear(x0,y0,x)% x0,y0为已知点,x为待求点n=length(x0);p=length(y0);m=length(x);% n,p,m分别为x0,y0,x长度if n=p fprintf(Error! Please input again!n);% x0和y0长度不等时,报错e

5、lsefor i=1:m z=x(i); sum=; l=0;%给l赋初值,根据x的值确定l if zx0(n) fprintf(Error!x(%d) is out of range!n,i); break; end%当插值点超出范围时,报错 for j=2:n if zx0(j) l=j; end if l=0 break; end end%一旦l有非零值,则终止循环,选出合适的l for k=l-1:l a=; for s=l-1:l if s=k a=a*(z-x0(s)/(x0(k)-x0(s); end end sum=sum+y0(k)*a; end y(i)=sum; fpri

6、ntf(y(%d)=%fnx1=%.3f y1=%.5f,x2=%.3f y2=%.5fnn,i,y(i),x0(l-1),y0(l-1),x0(l),y0(l);%输出插值结果和所需节点endendend2、分段二次插值%分段二次插值function y=piece_square(x0,y0,x)% x0,y0为已知点,x为待求点n=length(x0);p=length(y0);m=length(x);% n,p,m分别为x0,y0,x长度if n=p fprintf(Error! Please input again!n);% x0和y0长度不等时,报错elsefor i=1:m z=x

7、(i); sum=; l=0;%给l赋初值,根据x的值确定lif zx0(n) fprintf(Error!x(%d) is out of range!n,i); break; end%当插值点超出范围时,报错 for j=1:n-2 p=*(x0(j)+x0(j+1); if zp l=j; end if l=0 break; end%一旦l有非零值,则终止循环,选出合适的l end if l=0 l=n-1; end%输入正确时,若l还等于零,l=n-1 for k=l-1:l+1 a=; for s=l-1:l+1 if s=k a=a*(z-x0(s)/(x0(k)-x0(s); en

8、d end sum=sum+y0(k)*a; end y(i)=sum;fprintf(y(%d)=%fnx1=%.3f y1=%.5fnx2=%.3f y2=%.5fnx3=%.3f y3=%.5fnn,i,y(i),x0(l-1),y0(l-1),x0(l),y0(l),x0(l+1),y0(l+1);%输出插值结果与所需节点endendend3、拉格朗日全区间插值%拉格朗日全区间插值function y=lagrange(x0,y0,x)% x0,y0为已知点,x为待求点n=length(x0);p=length(y0);m=length(x);%n,p,m分别为x0,y0,x长度if

9、n=p fprintf(Error! Please input again!n);%x0和y0长度不等时,报错elsefor i=1:m z=x(i); s=; if zx0(n) fprintf(Error!x(%d) is out of range!n,i); break; end%当插值点超出范围时,报错 for k=1:n p=; for j=1:n if j=k p=p*(z-x0(j)/(x0(k)-x0(j); end end s=p*y0(k)+s; end y(i)=s;fprintf(y(%d)=%.5fn,i,y(i);%输出插值结果endendend5 算例分析1、 测

10、试示例 x=1 2 3 4; y=2 3 4; y2=lagrange(x,y,x0)Error! Please input again! x=1 2 3 4; y=2 3 4 5; x0= ; y2=lagrange(x,y,x0)Error!x(1) is out of range! x=1 2 3 4; y=2 3 4 5; x0= ; y2=lagrange(x,y,x0)y(1)=Error!x(2) is out of range!y2 = 2、首先输入函数变及待求点 x= ; y= ; x0= ;注:保证在matlab工作目录中有三个.m文件3、分段线性插值y0=piece_li

11、near(x,y,x0)y(1)=x1= y1=,x2= y2=y(2)=x1= y1=,x2= y2=y(3)=x1= y1=,x2= y2=y0 = 4、分段二次插值 y1=piece_square(x,y,x0)y(1)=x1= y1=x2= y2=x3= y3=y(2)=x1= y1=x2= y2=x3= y3=y(3)=x1= y1=x2= y2=x3= y3=y1 = 5、全区间拉格朗日插值 y2=lagrange(x,y,x0)y(1)=y(2)=y(3)=y2 = 6 讨论与结论1、使用tic,toc函数计算下列四种方法计算上述问题所运行的时间Functionlagrange(

12、x0,y0,x)piece_linear(x0,y0,x)piece_square(x0,y0,x)运行时间(s)从三次实验结果可知,三个程序的运行时间都很短。2、程序优化由分段线性插值和分段二次插值的原理,x取值在函数表范围内时,插值结果有意义,而当x取值在函数表范围以外,利用分段线性插值公式仍可以进行运算并得到一个值,但其结果不准确;分段二次插值则无法找到三个合适的点以求插值,不予以输出结果;若输入的函数表x与y的长度不相等,则无法插值。所以加入以下判断以提高插值的准确性n=length(x0);p=length(y0);m=length(x);if n=p fprintf(Error! Please input again!n);if zx0(n) fprintf(Error!x(%d) is out of range!n,i); break; end3、作图比较上图为三种方法的插值曲线,其中x取0到,步长为,由图可得,三种曲线非常接近,这说明我们用拉格朗日插值计算所给点函数值的近似值时,引起的误差还是比较小的。参考文献1 易大义,沈云宝,李有法. 计算方法(第2版),浙江大学出版社. .2 张琨 高思超 毕靖 编着 MATLAB2010从入门到精通 电子工业出版社

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1