声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7701|回复: 32

[非线性振动] 做分段非线性振动系统的仿真遇到一个奇怪的问题?

[复制链接]
发表于 2006-10-24 14:22 | 显示全部楼层 |阅读模式

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

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

x
做一个分段非线性振动系统的仿真,用ode4求解,发现计算时间长度不一样,结果也不一样。
如附件中的两个图,参数都没有变化,计算8000个周期得到的还是混沌状态,计算9000个周期发现
在3000个周期左右就转入了周期运动。
不知道有没有人遇到过???

[ 本帖最后由 mjhzhjg 于 2007-4-8 23:04 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2006-10-24 14:33 | 显示全部楼层
0~8000.JPG
0~9000.JPG
发表于 2006-10-24 15:30 | 显示全部楼层
没碰到过。
不太可能吧?换个ode函数试试?
 楼主| 发表于 2006-10-24 16:03 | 显示全部楼层
用ode5也发现了这个问题,而且和ode4得到的结果不一样。
0~2000(ode5).JPG
0~2500(ode5).JPG
 楼主| 发表于 2006-10-24 16:11 | 显示全部楼层
不同的ode函数出来的结果有不用,这个还可以理解,为什么同一个函数计算时间长一点就不一样呢?
发表于 2006-10-24 18:45 | 显示全部楼层
最好把程序发上来
我们可以看一下
我也是做分段的
但是还没有遇到这样的情况
 楼主| 发表于 2006-10-26 09:44 | 显示全部楼层
%主程序:
clear all
global m1 m2 K1 K2 C1 C2 w Me F0 T M N Tn ms

m1=1640;
m2=3100;
ms=0.1*m2;
K1=2.08e6;
K2=5.6e7;
w1=(((m2*K1+(m1+ms)*K2+(m1+ms)*K1)-((m2*K1+(m1+ms)*K2+(m1+ms)*K1)^2-4*(m1+ms)*m2*K1*K2)^0.5)/(2*(m1+ms)*m2))^0.5;
f1=w1/(2*pi)
w2=(((m2*K1+(m1+ms)*K2+(m1+ms)*K1)+((m2*K1+(m1+ms)*K2+(m1+ms)*K1)^2-4*(m1+ms)*m2*K1*K2)^0.5)/(2*(m1+ms)*m2))^0.5;
f2=w2/(2*pi)
%静平衡位移
x2balance=(m1+m2)*9.8/K2;
x1balance=m1*9.8/K1+x2balance;

C1=1625;
C2=3.66e4;

w=2000*2*pi/60;
f=w/(2*pi);
T=1/f;
Me=2.1;
F0=Me*w^2;

N=2000;%积分时间上限
M=20;%T/M步长
Tn=1;%稳态的起始周期数
t0=[0:T/M:N*T];
y0=[0,0,0,0];

y=ode4('odex',[0:T/M:N*T],y0);

%[px,py]=poincare([Tn*T:T/M:N*T],y(Tn*M:N*M,:));
figure(1)
plot([Tn*T:T/M:N*T],y(Tn*M:N*M,3),'k')
xlabel('t/s')
ylabel('振动轮位移/m')
set(gca,'box','off')


%odex函数
function ydot= odex(t,y)
global m1 m2 K1 K2 C1 C2 w Me F0 T M N Tn ms

Qc=-(m1+m2)*9.8;
Xc=Qc/K2;

ydot=zeros(4,1);

ydot(1)=y(2);
ydot(2)=(C1*y(4)+K1*y(3)-C1*y(2)-K1*y(1))/m1;
ydot(3)=y(4);

if y(3)<=Xc
    ydot(4)=(F0*sin(w*t)+K1*(y(1)-y(3))+C1*(y(2)-y(4))+m2*9.8)/m2;
else
    ydot(4)=(F0*sin(w*t)+K1*(y(1)-y(3))+C1*(y(2)-y(4))-(C2*y(4)+K2*y(3)))/(m2+ms);
end

评分

1

查看全部评分

发表于 2006-10-26 10:44 | 显示全部楼层
我没有用过ODE4和5,但是好像以前matlab里面是没有这个函数的,现在有没有我不知道,但是mathworks网站上好像有。

我用matlab7.0   -   ode45运行了你的程序,没有发现你说的现象。
如图,是计算不同周期得到的时域数据:

1

1

2

2

3

3

4

4

评分

1

查看全部评分

发表于 2006-10-26 10:48 | 显示全部楼层
估计是你调用的ode函数的原因,ode4 和 ode5 应该是定步长的,ode45是变步长算法,适应能力可能要强一些,仅仅是猜测。

评分

1

查看全部评分

 楼主| 发表于 2006-10-27 11:28 | 显示全部楼层
谢谢兄弟这么费心,ode45我以前就用过,出来的结果我开始以为是一种阵发性的混沌,后来改成ode4和ode5就得到了不同的结果,ode4、ode5是在赏析版里下载的,现在我也弄不明白到底这是怎么回事情。
不过我考虑由于ode45是变步长的算法,混沌状态具有对初值的敏感性,一些微小的波动可能结果都会变化,还是用定步长算法保险一点,不知道对不对。
发表于 2006-10-28 13:47 | 显示全部楼层
不过我考虑由于ode45是变步长的算法,混沌状态具有对初值的敏感性,一些微小的波动可能结果都会变化,还是用定步长算法保险一点,不知道对不对。  

???

为什么保险一点?呵呵。
应该变步长会保险一点吧。
发表于 2006-11-17 21:17 | 显示全部楼层
原帖由 jumpwolf 于 2006-10-24 14:22 发表
做一个分段非线性振动系统的仿真,用ode4求解,发现计算时间长度不一样,结果也不一样。
如附件中的两个图,参数都没有变化,计算8000个周期得到的还是混沌状态,计算9000个周期发现
在3000个周期左右就转入了周 ...

请问楼主,该问题请问解决没有,我也遇到过这个问题,可以解释为该系统的振动周期过长,但同时说明一个真实的物理系统没有那么多参数会导致混沌.
对否,大家扔石头.
发表于 2006-11-18 18:45 | 显示全部楼层
ode45是用于显示计算的,计算结果的稳定性不好,尤其是大多数情况下不是A(a)稳定的,有时候是条件稳定的,所以最好换一个算法

评分

1

查看全部评分

发表于 2006-11-18 23:06 | 显示全部楼层

个人看法

原帖由 jumpwolf 于 2006-10-24 14:22 发表
做一个分段非线性振动系统的仿真,用ode4求解,发现计算时间长度不一样,结果也不一样。
如附件中的两个图,参数都没有变化,计算8000个周期得到的还是混沌状态,计算9000个周期发现
在3000个周期左右就转入了周 ...


因为你在计算的过程中,随着时间的增大,后一步迭代过程中用的是前一步的结果,取的周期不同,如n个周期结果是X(n),在你计算n+1个周期时要用到X(n)为初值,如此类推,n+2时用到的是X(n+1)为初值,如你所说前面是混沌的,自然X(n)和X(n+1)是有所不同的,对于非线性系统,由于对初值的敏感性,这种情况也是合理的

[ 本帖最后由 xjtu211 于 2006-11-18 23:08 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2006-11-22 15:50 | 显示全部楼层
14楼你可能没有看清楚我的问题,随着计算的周期不一样,以前的结果也变化了,这好象没有办法解释.
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-15 22:38 , Processed in 0.078312 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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