数值分析第二次程序题教程.docx

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

数值分析第二次程序作业 PAGE \* MERGEFORMAT8 数值分析第二次程序题——插值法 1.对Runge函数 QUOTE Rx=1/(1+25x2) 在区间[-1,1]作下列插值逼近,并和R(x)的图像进行比较,并对结果进行分析。 (1) 以为节点,Newton插值 图1 [-0.7,0.7]上的Newton插值 图2 [-1,1]上的Newton插值 由上图可以看出,在区间[-0.7,0.7]上,插值多项式可以比较好地逼近被插值函数。而当区间改为[-1,1]时,边界附近插值多项式与被插值函数的差别很大。即出现了Runge现象。由于边界接近60的误差,图像中间部分的变化几乎不可见。 主要原因是被插值函数的任意阶导数不能达到一致有界。其插值余项不趋近零。插值多项式不能收敛到被插值函数。 牛顿差值函数 function f=niudun(z,N,n) f=N(1,1); x=-1:0.1:1; for k=2:n a=1; for r=1:(k-1) a=a*(z-x(r)); end f=f+N(k,k)*a; end 主程序 x=-1:0.1:1; n=length(x); for i=1:n y(i)=1/(1+25*x(i)*x(i)); end N=zeros(n,n); N(:,1)=y; for j=2:n for k=j:n N(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1)); end end for t=1:n c(t)=N(t,t); end z=-1:0.001:1; m=size(z,2); for i=1:m Runge(i)=1/(1+25*z(i)*z(i)); f(i)=niudun(z(i),N,n); end plot(z,Runge,k,z,f,r) (2)以 为节点,Lagrange插值 图3 以Chebyshev多项式零点为插值点 图4 以等距节点为插值点 如图所示,使用Chebyshev多项式零点构造的Lagrange插值多项式比较接近原函数,没有出现Runge现象,图4为第一小问中的等距节点插值,可以明显的看出以Chebyshev多项式零点为插值点的优势。主要原因是其多项式误差为,在区间内一致收敛。 Lagrange函数 function lag=lagrange(z,x,y) for i=1:21 l(i)=1; for j=1:21 if j~=i l(i)=l(i)*(z-x(j))/(x(i)-x(j)); end end end l=l; lag=y*l; 主程序 for i=1:21 x(22-i)=cos((2*i-1)*pi/42); end for i=1:21 y(i)=1/(1+25*x(i)*x(i)); end z=-1:0.001:1; m=length(z); for i=1:m f(i)=1/(1+25*z(i)*z(i)); lag(i)=lagrange(z(i),x,y); end plot(z,f,k,z,lag,r) (3)以为节点,分段线性插值 如下图所示,分段线性插值多项式比较接近原函数,没有出现Runge现象。但是可以明显地看到在区间[-0.1,0.1]中,线性插值的拟合度较低,因为这一部分的函数的曲率较大,也就是二阶导数较大。由误差估计公式可知这一部分的误差较大。 图5 线性插值 (4)以为节点,三次自然样条插值 图6 三次自然样条插值函数图像 由上图可以看出,三次样条插值函数的曲线及其光滑,图中并没有将插值函数连起来,否则基本无法分辨出原函数和插值函数的图像,说明得到的函数十分接近被插值函数。另外,题目要求自然样条插值,也就是再两端的二阶导数为0,需在变成过程中加以注意。 x=-1:0.1:1; n=length(x); for i=1:n y(i)=1/(1+25*x(i)*x(i)); end for i=1:n-1 h(i)=x(i+1)-x(i); end for i=1:n-2 u(i)=h(i)/(h(i+1)+h(i)); r(i)=1-u(i); end G=zeros(n-2,n-2); for i=1:n-2 G(i,i)=2; e

文档评论(0)

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

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

1亿VIP精品文档

相关文档