声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2122|回复: 7

[稳定性与分岔] 我的分岔程序无法运行(别人的可以),请大家看一下

[复制链接]
发表于 2009-12-21 19:42 | 显示全部楼层 |阅读模式

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

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

x
别人的


function xdot=dddd(t,x,flag,omega)
eta=0.1 ;
a= -48.704;
b= 24.35e4;
gamma= 1;
xdot=[x(2);a*x(1)-b*x(1)^3-eta*x(2)+gamma*cos(omega*t)];

%%%%%%%%%%%%%%%%%%%%%%%%

clear;
clc;
close all;
omega=0.01:0.01:1;
for h=1:length(omega)
%     omega(h)
    T=2*pi/omega(h);
    [t,x]=ode45('dddd',[0:T/100:220*T],[0 0],[],omega(h));
    plot(omega(h),x(10000:100:end,2),'k.');hold on
end

可以运行,有结果

我的

function uu=fangcheng_x1(t,u,flag,omega);

m1=170;
m2=90;
e=0.0001;
r=0.0006;
k2=1154744;
omega0=15;
phi0=0.6/180*pi;         
theta0=0.4/180*pi;
xi=0.14;

phi=omega*2*pi*t+phi0;         
theta=omega*2*pi*t+theta0;

M=m1+m2;
A1=m1*e*omega^2*cos(phi);
A2=m2*r*omega.^2*cos(theta);
A3=k2*r*cos(theta);
B1=m1*e*omega.^2*sin(phi);
B2=m2*r*omega.^2*sin(theta);
B3=k2*r*sin(theta);

uu=zeros(4,1);
uu(1)=u(2);
uu(2)=(A1+A2-A3)./M-2*xi*omega0*u(2)-omega0.^2*u(1);
uu(3)=u(4);
uu(4)=(B1+B2-B3)./M-2*xi*omega0*u(4)-omega0.^2*u(3);

%%%%%%%%%%%%%%%%%%%

omega=5:40;
y0=[0.1 0 0.1 0];
for i=1:length(omega)
    period=1./omega(i);
    tspan=[0:period/100:100*period];
    [t,u]=ode45(@fangcheng_x1,tspan,y0,[],omega(i));
    y0=u(end,:);
    plot(omega(i),u(4000:100:end,1),'b.','markersize',2);
    hold on;
end

运行之后

Input argument "omega" is undefined.
Error in ==> fangcheng_x1 at 20
phi=omega*2*pi*t+phi0;         
Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

真不知道是什么原因,觉得方程没有问题。因为单独赋予omega数值时,可以求得结果。但在这里不行。请大家给解释一下为什么,困扰我好久了!
回复
分享到:

使用道具 举报

发表于 2009-12-24 09:35 | 显示全部楼层
我也不知道为什么,改为:
omega=5:40;
y0=[0.1 0 0.1 0];
for i=1:length(omega)
    period=1./omega(i);
    tspan=[0:period/100:100*period];
    [t,u]=ode45('fangcheng_x1',tspan,y0,[],omega(i));
    y0=u(end,:);
    plot(omega(i),u(4000:100:end,1),'b.','markersize',2);
    hold on;
end
这样子就可以运行了
 楼主| 发表于 2009-12-24 10:32 | 显示全部楼层
谢谢无水的回答。但是还是搞不懂,@和'   '  有什么区别吗?
不过能运行就是好的。
 楼主| 发表于 2009-12-24 11:14 | 显示全部楼层
另外,还有一个问题请教。在针对非自治系统的Poincare图上,如果周期为T,步长分为T/120(没有用100或者10之类的),那么在选取映射点时是否首先要过滤掉瞬态响应,也就是前面的N个周期不要,从第N+1个开始;并且映射点的选取要以整周期为间隔划分。

比如:
%%%% 庞加莱图
m=[];
n=[];
for i=100:500
     m(i,1)=u(120*i,1);
     n(i,1)=u(120*i,2);
end
plot(m,n,'b.','markersize',2)

而不是随意的100*i或者80*i,我说的对吗?
发表于 2009-12-24 15:40 | 显示全部楼层
并且映射点的选取要以整周期为间隔划分。???
你的意思是去掉瞬态之后,要从一个整周期开始画图吗?
这个市没有必要的
 楼主| 发表于 2009-12-24 19:33 | 显示全部楼层
哦,我的意思是去掉瞬态后随意选取一个点,而之后的点以整周期的形式出现。
比如画图的首点选取为第4000个点,而后的点选取第4120,第4240,第4360,第4480......到终止(如果周期T被分为120个步长的话)。
这样理解应该没有问题吧。
发表于 2011-12-23 19:19 | 显示全部楼层
向高手致敬
发表于 2011-12-25 12:12 | 显示全部楼层
非自治系统的Poincare图,是一个周期取一个点的,你的理解是正确的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-17 15:45 , Processed in 0.061934 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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