网站大量收购独家精品文档,联系QQ:2885784924

第二章插值法课堂演示实验.doc

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章插值法课堂演示实验

第二章 插值法_课堂演示实验 问题: 分别以函数和为例,在区间上,取 为节点,用本章所学的Lagrange、Newton、Hermite插值法以及分段线性、分段三次Hermite插值法、Spline插值法作插值计算.具体要求如下: 1.取,通过在同一坐标系中作出被插函数与插值函数的图形的方法,来观察插值函数的图象与被插函数的位置关系,并给出观察到的的结论. 2.通过计算时的插值误差,结合前面得到的直观结论,试对各种插值方法的应用作出述评. 解答: 一、各种插值方法的算法公式及MATLAB通用程序 设已知函数表为且当时. 1.Lagrange插值法 算法公式?: , 其中 余项为 , 有关. 通用程序1(此程序用得较多)?: function yy=lagr1(x,y,xx) %用途:拉格朗日插值法求插值点xx(可以是多个)处的插值yy %格式:yy=lagr(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(j))/(x(i)-x(j)); end end s=s+t*y(i); end yy=s; 通用程序2?: function [L ,C, l ,L1]= lagr2(X,Y) %输入的量:n+1个节点(xi,yi)的横坐标向量X,纵坐标向量Y; %输出的量:n次拉格朗日插值多项式L及其系数向量C,基函数l及其系数矩阵L1 m=length(X); L=ones(m,m); for k=1: m V=1; for i=1:m if k~=i V=conv(V,poly(X(i)))/(X(k)-X(i)); end end L1(k,:)=V; l(k,:)=poly2sym (V); end C=Y*L1; L=Y*l; l=vpa(l,4); L=vpa(L,4); 通用程序3?: function [y,R]=lagr3(X,Y,x,M) %输入的量:X 是n+1个节点的横坐标向量,Y是纵坐标向量, x是以向量形式输入的m个插值点,M是被插函数在[a,b]区间上的n+1阶导数的最大值. %输出的量:y为m个插值构成的向量,R是误差限. n=length(X); m=length(x); for i=1:m z=x(i);s=0.0; for k=1:n p=1.0; q1=1.0; c1=1.0; for j=1:n if j~=k p=p*(z-X(j))/(X(k)-X(j)); end q1=abs(q1*(z-X(j)));c1=c1*j; end s=p*Y(k)+s; end y(i)=s; end R=M*q1/c1; 2.Newton插值法 算法公式?: 余项为 其中 有关.??: function s=newton1(x,y,x0,nn) %Newton插值,x与y为已知的插值点及其函数值 %x0为需要求的插值点向是,s返回插对应插值 %nn为newton插值多项式的次数,即nn次newton插值多项式 nx=length(x); ny=length(y); if nx~=ny warning(向量x与y的长度应该相同) return; end m=length(x0); %按照公式,对需要求的插值点x0的每个元素进行计算 for i=1:m t=0.0; %j=1; yy=y; kk=1; %求各级均差 while(kk=nn) kk=kk+1; for k=kk:nx yy(k)=(yy(k)-yy(kk-1))/(x(k)-x(kk-1)); end end %求插值结果 t=yy(1); for k=2:nx u=1.0; jj=1; while(jjk) u=u*(x0(i)-x(jj)); jj=jj+1; end t=t+yy(

文档评论(0)

zhanghc + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档