|
楼主 |
发表于 2009-5-20 14:12
|
显示全部楼层
回复 沙发 meicyeve 的帖子
你说的那个混沌带可能是我的瞬态部分没有去除干净吧,反正计算LLE是小于0的,我的程序是根据定义自己编的一个程序,其正确性还不知道呢,呵呵,不妨拿出来大家帮忙分析分析:(程序基本思想是,给出一个初始扰动,那么这个扰动不是增大就是减小,给一个上下限,则不同点出由于稳定性不一样,有的地方出我给定的界限时间长,有的地方就短,但是log(dt/d0)确实不变的)。
canshu;
range=[7900:0.5:8050];
%储存lyapunov指数的变量初始化
e0x(length(range))=0;
e0y(length(range))=0;
n=100; %扔掉的周期数
kk=1;
for wh=range
W=wh*2*pi/60/wn;
%for W=1:-0.005:0.005
period=2*pi/W;
step=period/2000;
m=length([0:step:period]);
tspan=0:step:n*period;
x1=[0,0,0,0,0,0,0,0]';
x1=shuzhidy(tspan,x1); %扔掉n个周期后的末值
x2=x1+1e-4; %扰动
d0=sqrt((x1-x2)'*(x1-x2)); %初始距离
k=0;
d=d0;
dd=0;
while(d>1e-10&d<1e-1) %规定一个扰动量变化的上下限
k=k+1;
tspan=n*period+(k-1)*period:step:(n+1)*period+(k-1)*period;
x11=shuzhidy(tspan,x1);
x22=shuzhidy(tspan,x2);
d=sqrt((x11-x22)'*(x11-x22));
x1=x11;
x2=x22;
dd(k)=d;
if(k>3000)
dd(1:k)=1;
break;
end
end
dtime=(length(dd)-1)*period;
e0=log(dd(end)/dd(1))/dtime;
e0y(kk)=e0;
e0x(kk)=wh;
kk=kk+1;
display([wh,e0]);
end
axis([range(1) range(end) min(e0y)-0.05 max(e0y)+0.05]);
hold on;
plot(e0x,e0y,'k-');
hold on;
z=0.*range;
plot(range,z,'r-');
其中shuzhidy涉及到项目模型,由于涉密,这里不能给出,还请原谅。其实如果你觉得有用的话,可以用ode代替,然后取积分末值就行了。 |
|