lihaitao123 发表于 2011-5-5 16:48

有没有可参考的两个自由度的分岔图程序?

单自由度分岔和两个自由度分岔图的程序的区别?有没有可参考的两个自由度的分岔图程序

hsfy919 发表于 2011-5-5 22:36

回复 1 # lihaitao123 的帖子

论坛上已有很多相关的程序,请自行搜索

lihaitao123 发表于 2011-5-6 11:16

回复 2 # hsfy919 的帖子

我找了一个duffing改了一下,不知道咋回事
function du=CQ(t,u,flag,f)
global   delta1 delta2 alpha1 xi1 alpha2 xi2beta2omega
omega = 0.6283;
beta2 =151.4993;
delta1 =7.2858e+006;
alpha1 = 3.7452e+010;
xi1 = 37.8748;
alpha2 =23.4969;
delta2 =19.5807;
xi2 =3.7875e+003;
      du=[u(2);
      -delta1*u(1)-alpha1*u(1)^3-xi1*u(2)+alpha2*u(3)+alpha2/2*u(1)*cos(2*omega*t)-beta2*u(4)+1/2*beta2*u(2)-1/2*beta2*u(2)*cos(2*omega*t)+f*sin(omega*t);
      u(4);
      -delta2*u(3)-xi2*u(4)+delta2*u(1)*sin(omega*t)+xi2*u(2)*sin(omega*t)];


clear all;
clc
global omega delta1 delta2 alpha1 xi1 alpha2 xi2beta2 f;
omega = 0.6283;
beta2 =151.4993;
delta1 =7.2858e+006;
alpha1 = 3.7452e+010;
xi1 = 37.8748;
alpha2 =23.4969;
delta2 =19.5807;
xi2 =3.7875e+003;
range=;
period=2*pi/omega; %
k=0;
YY1=[];
step=2*pi/10;%步长。
for f=range
    disp(f)
    y0=;
    k=k+1;
    % discard the first 60 periodic data;
    %除去前面60个周期的数据,并将最后的结果作为下一次积分的初值
    tspan=;
    =ode45('CQ',tspan,y0);
    y0=Y(end,:);
    j=1;
    for i=60:200
      tspan=;
      =ode45(@CQ,tspan,u0);
      YY1(k,j)=Y(end,1);   % get the omega data from every period end
      j=j+1;               %取出每一个周期内的第一个解的最后一个值。
      y0=Y(end,:);
    end
end
bifdata=YY1(:,end-51:end);
plot(range,bifdata,'k.','markersize',1);
报错
??? Input argument "u" is undefined.

lihaitao123 发表于 2011-5-6 14:21

请问:当omega beta2 delta1 alpha1 xi1 alpha2 delta2
xi2都取1,能运行,别的就基本算不了,有啥好办法没

hsfy919 发表于 2011-5-7 01:07

回复 4 # lihaitao123 的帖子

我运行了你的程序,发现错误不是你所说的
??? Input argument "f" is undefined.
Error in ==> CQ at 11
      du=[u(2);
错误是说你的“f”没有定义,其实你的f值没有传递到函数文件
对你的主程序进行了修改
clear all;
clc
global omega delta1 delta2 alpha1 xi1 alpha2 xi2beta2 f;
omega = 0.6283;
beta2 =151.4993;
delta1 =7.2858e+006;
alpha1 = 3.7452e+010;
xi1 = 37.8748;
alpha2 =23.4969;
delta2 =19.5807;
xi2 =3.7875e+003;
range=;
period=2*pi/omega; %
k=0;
YY1=[];
step=2*pi/10;%步长。

for f=range
    disp(f)
    y0=;
    k=k+1;
    % discard the first 60 periodic data;
    %除去前面60个周期的数据,并将最后的结果作为下一次积分的初值
    tspan=;
    =ode45('CQ',tspan,y0,[],f);
    y0=Y(end,:);
    j=1;
    for i=60:200
      tspan=;
      =ode45('CQ',tspan,u0,[],f);
      YY1(k,j)=Y(end,1);   % get the omega data from every period end
      j=j+1;               %取出每一个周期内的第一个解的最后一个值。
      y0=Y(end,:);
    end
end
bifdata=YY1(:,end-51:end);
plot(range,bifdata,'k.','markersize',1);
程序是通了,至于有警告,是因为你取的参数有问题,一般是方程本身造成的

lihaitao123 发表于 2011-5-7 09:28

回复 5 # hsfy919 的帖子

谢谢主任,现在程序能运行了,我把CQ函数,变了就行了。再问一个问题,一般分岔图的的周期都是period=2*pi/omega?omega是激励频率。

liliangbiao 发表于 2011-5-7 09:30

本帖最后由 liliangbiao 于 2011-5-7 09:40 编辑

先弄懂你要做的是什么,弄懂你引用的程序是基于怎样的思想编写的,程序实现的是什么,能实现什么,不要一味的不假思索的移植过来,拿过来就用。程序调试通了,又能如何?程序通了,就能说明程序能实现你要的结果!?版主懂不懂?别跟着瞎起哄,我建议版主多给出思想,别老是瞎指挥!说的有点不客气了,还是见谅!现在这个版块越来越不好了,简直都是在索取,为何不交流思想??版主我觉得很有责任来改进这些!
我还是觉得我们应该交流思想,程序现在满天飞,不懂又有何用?java不懂不要紧,C++不懂不要紧,。。。只要懂得思想,移植到自己会编写的程序上,都是没问题的,思想比程序重要!

lihaitao123 发表于 2011-5-7 20:59

回复 7 # liliangbiao 的帖子

学长批评的是。

lihaitao123 发表于 2011-5-7 21:01

理论的提高比收获一个程序意义更重大。

lihaitao123 发表于 2011-5-8 09:12

回复 5 # hsfy919 的帖子

我做车桥耦合时,激励频率和速度是相关的,这样也能做关于出分插图么!

hsfy919 发表于 2011-5-9 18:05

回复 7 # liliangbiao 的帖子

感谢liliangbiao提出的宝贵意见
页: [1]
查看完整版本: 有没有可参考的两个自由度的分岔图程序?