sdlmx 发表于 2007-7-20 09:41

那位大侠帮我用matlab画一下这个模型的极限环啊?

方程是
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个极限环啊
谢谢啦

无水1324 发表于 2007-7-20 09:48

你学一下matlab求解微分方程,然后看一下相图,是不是你要的极限环

sdlmx 发表于 2007-7-20 09:57

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

高手帮忙看一下,求极限环的算法好不好,还有没有更好的
还有如何在一个图中画出不同k值时的极限环啊
程序如下:
function SIA
clc;
clear
y10=0.4;
y20=2.0;
y30=0;
%k=1;
options=odeset('outputfcn','odephas3');
=ode45(@SIAFUN,,,);
t(1:length(t)-251)=[];
y(1:length(y)-251,:)=[];
plot3(y(:,1),y(:,2),y(:,3))
xlabel('S')
ylabel('x')
zlabel('y')
axis()
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=;

无水1324 发表于 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=;


clc;
clear
y10=0.4;
y20=2.0;
y30=0;
for k=1:5
options=odeset('outputfcn','odephas3');
=ode45(@SIAFUN,,,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')

sdlmx 发表于 2007-7-20 12:01

非常感谢啊

:@)

sdlmx 发表于 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
=ode45(@SIAFUN,,,options,k);

无水1324 发表于 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=;


clc;
clear
y10=0.4;
y20=2.0;
y30=0;
for k=1:5
=ode45(@SIAFUN,,,[],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')

sdlmx 发表于 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
=ode45(@SIAFUN,,,[],k);:'(

无水1324 发表于 2007-7-20 13:30

我这里可以运行出来哈

yuxinting 发表于 2007-10-11 15:08

请问搂主最后的程序运行出来了吗?我在做程序时遇到同样的错误,我不知道该怎么改?

无水1324 发表于 2007-10-11 17:27

回复 #10 yuxinting 的帖子

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

----〉=ode45(‘SIAFUN’,,,[],k);

无水1324 发表于 2007-10-11 19:27

我也迷惑了,应该这个是一样的,怎么在这里不行了呢,是不是我的matlab版本太低了。

non 发表于 2007-10-11 22:13

将k设置为全局变量
global k
即可

无水1324 发表于 2007-10-11 22:20

回复 #13 non 的帖子

这里k不需要设置就可以了

yuxinting 发表于 2007-10-15 11:32

回复 #11 无水1324 的帖子

谢谢,无水前辈,这个程序是可以运行了,但是我的程序又出现了新的问题。
请问前辈有没有遇到过matlab中显示“Too many input arguments”,这样的错误,我试着改过几次都不行。
刚刚接触matlab,有很多东西需要学习,请前辈赐教。
页: [1] 2
查看完整版本: 那位大侠帮我用matlab画一下这个模型的极限环啊?