找回密码
 注册
Simdroid-非首页
查看: 126|回复: 3

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

[复制链接]
发表于 2011-12-10 10:54:35 | 显示全部楼层 |阅读模式 来自 湖北武汉
以下针对著名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=[0.25;0];%初始值
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中运行,麻烦各位给指点下!

发表于 2011-12-11 23:33:20 | 显示全部楼层 来自 河北秦皇岛
Simdroid开发平台
你得有RK_order4这个函数才能算。。。
回复 不支持

使用道具 举报

 楼主| 发表于 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文件,但是还是不能算,请指教
回复 不支持

使用道具 举报

发表于 2011-12-25 22:09:48 | 显示全部楼层 来自 陕西西安
% function RK_vanderpol
RK_order4=@s    ;
t0=0;tN=20;%区间
y0=[0.25;0];%初始值
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
%好像可以了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-8 06:25 , Processed in 0.029069 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表