xhx2010 发表于 2011-12-10 10:54:35

四阶Runge-Kutta方法求解常微分方程(含二阶导数)

以下针对著名VanderPol方程:
function s=f(t,y)
s=zeros(size(y));
s(1)=y(2);
s(2)=-y(2)*(y(1)^2-1)-y(1);

function RK_vanderpol
t0=0;tN=20;%区间
y0=;%初始值
h=0.001;
t=t0:h:tN;
N=length(t);
j=1;
for i=1:N
    t1=t0+h;
    k1=RK_order4(t0,y0);
    k2=RK_order4(t0+h/2,y0+h*k1/2);
    k3=RK_order4(t0+h/2,y0+h*k2/2);
    k4=RK_order4(t0+h,y0+h*k3);
    y1=y0+(h/6)*(k1+2*k2+2*k3+k4);
    yy1(j)=y1(1);
    yy2(j)=y1(2);
    t0=t1;
    y0=y1;
    j=j+1;
end

请问各位高手上面的程序怎样才能顺利的在MATLAB中运行,麻烦各位给指点下!

gentlefu 发表于 2011-12-11 23:33:20

你得有RK_order4这个函数才能算。。。

xhx2010 发表于 2011-12-18 10:14:15

感谢gentlefu兄弟,但是我试过了
function s=RK_order4(t,y)
s=zeros(size(y));
s(1)=y(2);
s(2)=-y(2)*(y(1)^2-1)-y(1);
弄成RK_order4.m文件,但是还是不能算,请指教

zhouyanqing1981 发表于 2011-12-25 22:09:48

% function RK_vanderpol
RK_order4=@s    ;
t0=0;tN=20;%区间
y0=;%初始值
h=0.001;
t=t0:h:tN;
N=length(t);
j=1;
for i=1:N
    t1=t0+h;
    k1=RK_order4(t0,y0);
    k2=RK_order4(t0+h/2,y0+h*k1/2);
    k3=RK_order4(t0+h/2,y0+h*k2/2);
    k4=RK_order4(t0+h,y0+h*k3);
    y1=y0+(h/6)*(k1+2*k2+2*k3+k4);
    yy1(j)=y1(1);
    yy2(j)=y1(2);
    t0=t1;
    y0=y1;
    j=j+1;
end
%好像可以了
页: [1]
查看完整版本: 四阶Runge-Kutta方法求解常微分方程(含二阶导数)