拉格朗日插值实验报告总结计划.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验名称 : 实验一 拉格朗日插值 引言 我 在生 生活中常常会遇到 的 : 某个 中, 函数 f(x) 在区 [a,b] 上存在且 ,但却很 找到其表达式,只能通 和 得到有限点上的函数表。 然,根据 些点的函数 来求其它点的函数 是非常困 的。有些情况 然可以写出表达式,但 构复 ,使用不方便。所以我 是希望根据已有的数据点(或函数表)来构造某个 函数 P(x) 作 f(x)的近似 。插 法是解决此 的一种比 古老的、 但却很常用的方法。 它不 直接广泛地 用于生 和科学研究中,而且也是 一步学 数 算方法的基 。 实验目的和要求 运用 Matlab 写三个 .m 文件,定 三种插 函数,要求一次性 入整 函数表,并利用 算机 在插 算中所需的 点。分 通 分段 性插 、分段二次插 和全区 上拉格朗日插 算 f(0.15),f(0.31),f(0.47)的近似 。已知函数表如下: x 0.0 0.1 0.195 0.3 0.401 0.5 f(x) 0.39894 0.39695 0.39142 0.38138 0.36812 0.35206 算法原理与流程图 1)原理 函数 y=在插 区 [a,b] 上 ,且在 n+1 个不同的插 点 a≤x0,x1, ? ,xn ≤b上分 取 y0,y1, ? ,yn 。目的是要在一个性 良、便于 算的插 函数 Φ中,求一 函数 P(x), 足插 条件 P(xi )=yi (i=0,1, ? ,,n)而在其他点 x≠xi上,作 f(x)近似 。求插 函数 P(x) 的方法称 插 法。在本 中,采用拉格朗日插 法。 ①分段低次插 当 定了 n+1 个点 x0x1? xn 上的函数 y0,y1, ? ,yn 后,若要 算 x≠xi 函数 f(x) 的近似 ,可先 取两个 点 x i-1 与 xi 使 x∈ [x i-1,xi],然后在小区 [x i-1 ,xi ]上作 性插 ,即得 种分段低次插 叫分段 性插 ,又称折 插 。 似地,我 可以 取距离 x 最近的三个 点 xi-1 ,xi 与 xi+1 ,然后 行二次插 ,即得 种分段低次插 叫分段二次插 ,又称分段抛物 插 。 ②全区 上拉格朗日插 点 xi (i=0,1, ? 中任一点 k (0 ≤ ≤,作一 n 次多 式 k (x),使它在 点上的取 ,n) x k n) l 1,在其余点 xi (i=0,1, ?-1,k+1, ? ,n)上取 零。 于每一 点 xk(k=0,1, ? ,n),都能写出 一个 足此条件的多 式, 写出了 n+1 个多 式 l0 1 ?n,其中 (x),l (x), ,l(x) l ( x ) A ( x x )( x x ) L ( x x k 1 )( x x k 1 ) L ? ( x x ) ; k k 0 1 n 由条件 l k( x k ) 1可得 于是我 可以得出如下的拉格朗日 n 次插 多 式( 于全区 上的插 , n 取函数表 的长度) ( 2)流程图 分段线性插值 分段二次插值 全区间拉格朗日插值 程序代码及注释 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 长度不等时,报错 else for  i=1:m z=x(i); sum=0.0; l=0; %给l  赋初值 , 根据 x 的值确定 l if zx0(1)|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=1.0; 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; fprintf( y(%d)=%f\nx1=%.3f y1=%.5f,x2=%.3f y2=%.5f\n\n ,i,y(i),x0(l-1),y0(l-1),x0(l),y0(l));

文档评论(0)

137****7230 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档