资源描述:
《MATLAB在计算方法中的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MATLAB在计算方法中的应用MATLAB入门到精通插值与拟合插值与拟合来源于实际,又广泛应用于实际。随着计算机的不断发展及计算水平的不断提高,他们在国民生产和科学研究等方面扮演着越来越重要的角色。插值法主要有Lagrange插值、分段线性插值、Hermite插值及三次样条插值等拟合法主要有最小二乘法拟合和快速Fourier变换等Lagrange插值对给定的n个插值节点及相应的函数值,利用n次Lagrange插值多项式对插值区间内任意x的函数值y可通过下式求得:MATLAB实现functiony=l
2、agrange(x0,y0,x)%lagrangeinsertn=length(x0);m=length(x);fori=1:mz=x(i);s=0.0;fork=1:np=1.0;forj=1:nifj~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end例:f(x)=lnxx0.40.50.60.70.8ln(x)-0.916291-0.693147-0.510826-0.357765-0.223144>>x=[0.4:0.1
3、:0.8];>>y=[-0.916291-0.693147-0.510826-0.356675-0.223144];>>lagrange(x,y,0.54)ans=-0.61614>>log(0.54)ans=-0.61619Runge现象19世纪Runge给出了一个等距节点插值多项式不收敛的例子:在区间[-5,5]上各阶导数存在,但在此区间上取n个节点构造的Lagrange插值多项式在全区间上不收敛。Runge现象在区间[-5,5]上,取n=10,用lagrange插值法进行插值计算:>>x=[-
4、5:1:5];>>y=1./(1+x.^2);>>x0=[-5:0.1:5];>>y0=lagrange(x,y,x0);>>y1=1./(1+x0.^2);>>plot(x0,y0,'--r')>>holdon>>plot(x0,y1,'-b')分段线性插值分段线性插值就是通过插值点用折线段连接起来逼近原曲线。MATLAB实现interp1一维插值yi=interp1(x,y,xi)%对一组节点(x,y)进行插值,计算插值点xi的函数值。yi=interp1(y,xi)%默认x=1:nyi=int
5、erp1(x,y,xi,’method’)%method为指定插值算法nearest线性最近项插值linear线性插值spline三次样条插值cubic三次插值同类的函数还有inter1q,interpft,spline,interp2,interp3,interpn等例:正弦曲线插值>>x=0:0.1:10;>>y=sin(x);>>xi=0:.25:10;>>yi=interp1(x,y,xi);>>plot(x,y,'o',xi,yi)例:Rouge现象的解决>>x=[-5:1:5];>>y=
6、1./(1+x.^2);>>x0=[-5:0.1:5];>>y1=1./(1+x0.^2);>>y2=interp1(x,y,x0);>>plot(x0,y0,'--r')>>holdon>>plot(x0,y1,'-b')>>plot(x0,y2,'*m')Hermite插值不少问题不但要求在节点上函数值相等,而且要求导数值也相等,甚至要求高阶导数也相等,可用Hermite插值多项式。已知n个插值节点及其对应的函数值和一阶导数值,则计算插值区域内任意x的函数值y的Hermite插值公式为:MATL
7、AB实现functiony=hermite(x0,y0,y1,x)%hermiteinsertn=length(x0);m=length(x);fork=1:myy=0.0;fori=1:nh=1.0;a=0.0;forj=1:nifj~=ih=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;a=1/(x0(i)-x0(j))+a;endendyy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));endy(k)=yy;end例:根据如下给定数
8、据,给出0.34处的值X0.300.320.35Sinx0.295520.314570.34290Cosx0.955340.949240.93937>>x0=[0.30.320.35];>>y0=[0.295520.314570.34290];>>y1=[0.955340.949240.93937];>>x=[0.3:0.005:0.35];>>y=hermite(x0,y0,y1,0.34)y=0.33349>>sin(0.34)ans=0.33349>>y=her