gusucode.com > 高等数学问题求解源码程序 > CH14/Classical_RK4.m

    function [x,y]=Classical_RK4(odefun,xspan,y0,h,varargin)
%CLASSICAL_RK4   经典四阶Runge-Kutta法求解初值问题的数值解
% [X,Y]=CLASSICAL_RK4(ODEFUN,XSPAN,Y0,H)  经典四阶Runge-Kutta法求解微分方程ODEFUN
% [X,Y]=CLASSICAL_RK4(ODEFUN,XSPAN,Y0,H,P1,P2,...)  经典四阶Runge-Kutta法求解
%                                  微分方程ODEFUN,ODEFUN包含附加参数P1,P2,...
%
% 输入参数:
%     ---ODEFUN:微分方程的函数描述
%     ---XSPAN:求解区间[x0,xn]
%     ---Y0:初始条件
%     ---H:迭代步长
%     ---P1,P2,...:ODEFUN函数的附加参数
% 输出参数:
%     ---X:返回的节点,即X=XSPAN(1):H:XSPAN(2)
%     ---Y:微分方程的数值解
%
% See also Explicit_Euler

x=xspan(1):h:xspan(2);
N=length(x);
y=zeros(1,N);
y(1)=y0;
for k=1:length(x)-1
    K1=feval(odefun,x(k),y(k),varargin{:});
    K2=feval(odefun,x(k)+h/2,y(k)+h/2*K1,varargin{:});
    K3=feval(odefun,x(k)+h/2,y(k)+h/2*K2,varargin{:});
    K4=feval(odefun,x(k)+h,y(k)+h*K3,varargin{:});
    y(k+1)=y(k)+h/6*(K1+2*K2+2*K3+K4);
end
x=x';y=y';
web -broswer http://www.ilovematlab.cn/forum-221-1.html