声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4979|回复: 19

[稳定性与分岔] 那位大侠帮我用matlab画一下这个模型的极限环啊?

[复制链接]
发表于 2007-7-20 09:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
方程是
dy(1)=1-y(1)-2*y(1)*y(2)/((1+50*y(1)^3)*(0.7+y(1)))-m*y(1)*y(3)/(120*(6.5+y(1)));
dy(2)=y(2)*(2*y(1)/(0.7+y(1))-1);
dy(3)=y(3)*(m*y(1)/(6.5+y(1))-1);

这里面m=9.85+0.05*k,k=1,2,3,4,5.
初值是y10=0.4; y20=2.0; y30=0;
如何在一个图上画出k=1,2,3,4,5时的5个极限环啊
谢谢啦
回复
分享到:

使用道具 举报

发表于 2007-7-20 09:48 | 显示全部楼层
你学一下matlab求解微分方程,然后看一下相图,是不是你要的极限环
 楼主| 发表于 2007-7-20 09:57 | 显示全部楼层

把我画一个极限环的程序贴上去

高手帮忙看一下,求极限环的算法好不好,还有没有更好的
还有如何在一个图中画出不同k值时的极限环啊
程序如下:
function SIA
clc;
clear
y10=0.4;
y20=2.0;
y30=0;
%k=1;
options=odeset('outputfcn','odephas3');
[t,y]=ode45(@SIAFUN,[0:0.1:5000],[y10;y20;y30],[options]);
t(1:length(t)-251)=[];
y(1:length(y)-251,:)=[];
plot3(y(:,1),y(:,2),y(:,3))
xlabel('S')
ylabel('x')
zlabel('y')
axis([0.2,1.0,0,8,0,0.25])
grid on
title('相轨迹')
function dy=SIAFUN(t,y)
dy(1)=1-y(1)-2*y(1)*y(2)/((1+50*y(1)^3)*(0.7+y(1)))-10.15*y(1)*y(3)/(120*(6.5+y(1)));
dy(2)=y(2)*(2*y(1)/(0.7+y(1))-1);
dy(3)=y(3)*(10.15*y(1)/(6.5+y(1))-1);
dy=[dy(1);dy(2);dy(3)];
发表于 2007-7-20 10:06 | 显示全部楼层
function dy=SIAFUN(t,y,flag,k)
m=9.85+0.05*k;
dy(1)=1-y(1)-2*y(1)*y(2)/((1+50*y(1)^3)*(0.7+y(1)))-m*y(1)*y(3)/(120*(6.5+y(1)));
dy(2)=y(2)*(2*y(1)/(0.7+y(1))-1);
dy(3)=y(3)*(10.15*y(1)/(6.5+y(1))-1);
dy=[dy(1);dy(2);dy(3)];


clc;
clear
y10=0.4;
y20=2.0;
y30=0;
for k=1:5
options=odeset('outputfcn','odephas3');
[t,y]=ode45(@SIAFUN,[0:0.1:5000],[y10;y20;y30],options,k);
t(1:length(t)-251)=[];
y(1:length(y)-251,:)=[];
plot3(y(:,1),y(:,2),y(:,3));hold on
end
xlabel('S')
ylabel('x')
zlabel('y')

评分

1

查看全部评分

 楼主| 发表于 2007-7-20 12:01 | 显示全部楼层

非常感谢啊

:@)
 楼主| 发表于 2007-7-20 12:06 | 显示全部楼层

程序报错,怎么修改啊

??? Input argument "k" is undefined.

Error in ==> SIAFUN at 2
m=9.85+0.05*k;

Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, ...

Error in ==> SIAFUN1 at 8
[t,y]=ode45(@SIAFUN,[0:0.1:5000],[y10;y20;y30],options,k);
发表于 2007-7-20 12:53 | 显示全部楼层
function dy=SIAFUN(t,y,flag,k)
m=9.85+0.05*k;
dy(1)=1-y(1)-2*y(1)*y(2)/((1+50*y(1)^3)*(0.7+y(1)))-m*y(1)*y(3)/(120*(6.5+y(1)));
dy(2)=y(2)*(2*y(1)/(0.7+y(1))-1);
dy(3)=y(3)*(10.15*y(1)/(6.5+y(1))-1);
dy=[dy(1);dy(2);dy(3)];


clc;
clear
y10=0.4;
y20=2.0;
y30=0;
for k=1:5
[t,y]=ode45(@SIAFUN,[0:0.1:5000],[y10;y20;y30],[],k);
t(1:length(t)-251)=[];
y(1:length(y)-251,:)=[];
plot3(y(:,1),y(:,2),y(:,3));hold on
end
xlabel('S')
ylabel('x')
zlabel('y')
 楼主| 发表于 2007-7-20 13:02 | 显示全部楼层

还是报错

??? Input argument "k" is undefined.

Error in ==> SIAFUN at 2
m=9.85+0.05*k;

Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, ...

Error in ==> SIAFUN1 at 7
[t,y]=ode45(@SIAFUN,[0:0.1:5000],[y10;y20;y30],[],k);:'(
发表于 2007-7-20 13:30 | 显示全部楼层
我这里可以运行出来哈
发表于 2007-10-11 15:08 | 显示全部楼层
请问搂主最后的程序运行出来了吗?我在做程序时遇到同样的错误,我不知道该怎么改?
发表于 2007-10-11 17:27 | 显示全部楼层

回复 #10 yuxinting 的帖子

这个问题比较奇怪啊。
以前我记得是可以运行的。
现在要运行必须修改一下:
[t,y]=ode45(@SIAFUN,[0:0.1:5000],[y10;y20;y30],[],k);

----〉[t,y]=ode45(‘SIAFUN’,[0:0.1:5000],[y10;y20;y30],[],k);
发表于 2007-10-11 19:27 | 显示全部楼层
我也迷惑了,应该这个是一样的,怎么在这里不行了呢,是不是我的matlab版本太低了。
发表于 2007-10-11 22:13 | 显示全部楼层
将k设置为全局变量
global k
即可
发表于 2007-10-11 22:20 | 显示全部楼层

回复 #13 non 的帖子

这里k不需要设置就可以了
发表于 2007-10-15 11:32 | 显示全部楼层

回复 #11 无水1324 的帖子

谢谢,无水前辈,这个程序是可以运行了,但是我的程序又出现了新的问题。
请问前辈有没有遇到过matlab中显示“Too many input arguments”,这样的错误,我试着改过几次都不行。
刚刚接触matlab,有很多东西需要学习,请前辈赐教。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-18 03:59 , Processed in 0.069456 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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