资源描述
MATLAB语言及应用大作业姓名:学号:学院:班级:题目编号:2013年10月134阶Runge-Kutta法求解一阶常微分方程。一、Runge-Kutta法的数学理论龙格-库塔(Runge-Kutta方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。龙格库塔方法的理论基础来源于泰勒公式和使用斜率近似表达微分,它在积分区间多预计算出几个点的斜率,然后进行加权平均,用做下一点的依据,从而构造出了精度更高的数值积分计算方法。如果预先求两个点的斜率就是二阶龙格库塔法,如果预先取四个点就是四阶龙格库塔法。一阶常微分方程可以写作:y=f(x,y),使用差分概念。(Yn+1-Yn)/h=f(Xn,Yn1出(近似等于,极限为Yn)Yn+1=Yn+h*f(Xn,Yn)另外根据微分中值定理,存在0t1,使得Yn+1=Yn+h*f(Xn+th,Y(Xn+th)这里K=f(Xn+th,Y(Xn+th)弁为平均斜率,龙格库塔方法就是求得K的一种算法。利用这样的原理,经过复杂的数学推导(过于繁琐省略),可以得出截断误差为O(hA5)的四阶龙格库塔公式:K1=f(Xn,Yn);K2=f(Xn+h2,Yn+(h/2)*K1);K3=f(Xn+h2,Yn+(h/2)*K2);K4=f(Xn+h,Yn+h*K3);Yn+1=Yn+h*(K1+2K2+2K3+K4)*6)二、Runge-Kutta的算法和流程图在龙格-库塔法中,四阶龙格-库塔法的局部截断误差约为0(h5),被广泛应用于解微分方程的初值问题。其算法公式为:yniynh/6ki2k22k3kkifxn,ynk2fXnh/2,ynh/2*ki,k3fXnh/2,ynh/2*k2,k4fXnh,ynhk3流程图:(1)、四阶龙格-库塔方法流程图:(2)、实例求解流程图:开始输入求解的自变显范围求出待求简不微分方程的真值解用MATLAB自带函数o加求解待求微分方程用自编函数四阶龙格一比塔(R-K)方法求解计求微分方程结束二、Runge-Kutta的Matlab实现functionx,y=runge_kutta1(ufunc,y0,h,a,b)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点(参数形式参考了ode45函数)n=floor(b-a)/h);%求步数x(1)=a;%寸间起点y(:,1)=y0;%武初值,可以是向量,但是要注意维数forii=1:nx(ii+1)=x(ii)+h;k1=ufunc(x(ii),y(:,ii);k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);k3=ufunc(x(ii)+h/2,y(:,ii)+h*k22);k4=ufunc(x(ii)+h,y(:,ii)+h*k3);y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;%按照龙格库塔方法进行数值求解end四、Runge-Kutta的算例实现例:求解常微分方程d(y)/d(x)=-2*y+2*x*x+2*x,0Untitled3
展开阅读全文