Lyapunov指数的计算方法.docx
- 文档编号:16317751
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:18
- 大小:97.18KB
Lyapunov指数的计算方法.docx
《Lyapunov指数的计算方法.docx》由会员分享,可在线阅读,更多相关《Lyapunov指数的计算方法.docx(18页珍藏版)》请在冰点文库上搜索。
Lyapunov指数的计算方法
【总结】Lyapunov指数的计算方法非线性理论
近期为了把计算LE的一些问题弄清楚,看了有7〜9本书!
下面以吕金虎《混沌时间序列分析及其应用》、马军海《复杂非线性系统的重构技术》为主线,把目前已有的LE计算方法做一个汇总!
1.关于连续系统Lyapunov指数的计算方法连续系统LE的计算方法主要有定义方法、Jacobian方法、QR分解方法、奇异值分解方法,或者通过求解系统的微分方程,得到微分方程解的时间序列,然后利用时间序列(即离散系统)的LE求解方法来计算得到。
关于连续系统LE的计算,主要以定义方法、Jacobian方法做主要介绍内容。
(1)定义法
—对h堆连续动力系統z=在—OBJ孙味“为中心.|拆(心0)||为丰笹啟存
«堆的球面*施著时间的演化,在t时討该球而0P变形为m继的椭球厨・设滾椭域面的第/个坐标轴方向的半轴长対卩兀|,则诙系统第i个指数対*
此即连续系统Lyapunov揩较飽定冥・
弼计尊时・取|处(心0)[为岀W为常数),以孔为球心・欧几里篇范敢为山的正衮矢量集仙测,…叮为初始球.由非线性徴分方崔“尸㈤可以分别计算出点細血创、引他、r引址经过时间t后淺化的轨迹・役其终了点分别为珊、砒、f仙则令石f陶一心■处严=甩-和,r亦耳国=略一報#则可得新的矢重棄叶禺巴…后畀}・
由于各牛妥臺在演化过程中舌焙向着是大的UapurOTIS数方何靠掘,因此需要通过
SchimdtIE交化不断地讨新矢量逬行置换.SPWolfto文章中提出的GSR^法.表述如下:
播着以他为球心,疤数対(I的正奁矢臺料创巴叫叫…伽严;为祈球继续进行演出设演化至N步时,得到矢董慕冈㈤出巴…耳僅牛且N足够大,这可以得到Lyapunov扌鐵的近似计算公式三
实际计算时,取为1・
定义法求解Lyapunov指数JPG
关于定义法求解的程序,和matlab板块的连续系统LE求解程序”差不多。
以
Rossie啄统为例
Rossler系统微分方程定义程序
functiondX=Rossler_ly(t,X)
%Rossler吸引子,用来计算Lyapunov指数
%a=0.15,b=0.20,c=10.0
%dx/dt=-y-z,
%dy/dt=x+ay,
%dz/dt=b+z(x-c),
a=0.15;
b=0.20;
c=10.0;
x=X
(1);y=X
(2);z=X(3);
%Y的三个列向量为相互正交的单位向量
丫=[X(4),X(7),X(10);
X(5),X(8),X(11);
X(6),X(9),X(12)];
%输出向量的初始化,必不可少
dX=zeros(12,1);
%Rossler吸引子
dX
(1)=-y-z;
dX
(2)=x+a*y;
dX(3)=b+z*(x-c);
%Rossler吸引子的Jacobi矩阵
Jaco=[0-1-1;
1a0;z0x-c];
dX(4:
12)=Jaco*Y;
求解LE代码:
%计算Rossler吸引子的Lyapunov指数clear;
yinit=[1,1,1];orthmatrix=[100;
010;
001];
a=0.15;
b=0.20;
c=10.0;
y=zeros(12,1);
%初始化输入
y(1:
3)=yinit;y(4:
12)=orthmatrix;
tstart=0;%时间初始值tstep=1e-3;%时间步长wholetimes=1e5;%总的循环次数steps=10;%每次演化的步数iteratetimes=wholetimes/steps;%演化的次数mod=zeros(3,1);
lp=zeros(3,1);
%初始化三个Lyapunov指数
Lyapunov1=zeros(iteratetimes,1);
Lyapunov2=zeros(iteratetimes,1);
Lyapunov3=zeros(iteratetimes,1);
fori=1:
iteratetimes
tspan=tstart:
tstep:
(tstart+tstep*steps);[T,Y]=ode45('Rossler_ly',tspan,y);
%取积分得到的最后一个时刻的值
y=Y(size(Y,1),:
);
%重新定义起始时刻
tstart=tstart+tstep*steps;
y0=[y(4)y(7)y(10);
y(5)y(8)y(11);
y(6)y(9)y(12)];
%正交化
y0=ThreeGS(y0);
%取三个向量的模
mod
(1)=sqrt(y0(:
1)'*y0(:
1));
mod
(2)=sqrt(y0(:
2)'*y0(:
2));
mod(3)=sqrt(y0(:
3)'*y0(:
3));y0(:
1)=y0(:
1)/mod
(1);
y0(:
2)=y0(:
2)/mod
(2);
y0(:
3)=y0(:
3)/mod(3);
Ip=lp+log(abs(mod));
%三个Lyapunov指数
Lyapunov1(i)=lp
(1)/(tstart);
Lyapunov2(i)=lp
(2)/(tstart);
Lyapunov3(i)=lp(3)/(tstart);y(4:
12)=y0';
end
%作Lyapunov指数谱图
i=1:
iteratetimes;
plot(i,Lyapunov1,i,Lyapunov2,i,Lyapunov3)
程序中用到的ThreeGS程序如下:
%G-S正交化
functionA=ThreeGS(V)%V为3*3向量
v1=V(:
1);
v2=V(:
2);
v3=V(:
3);
al=zeros(3,1);
a2=zeros(3,l);
a3=zeros(3,1);
al=v1;
a2=v2-((a1'*v2)/(a1'*a1))*a1;
a3=v3-((a1'*v3)/(a1'*a1))*a1-((a2'*v3)/(a2'*a2))*a2;A=[a1,a2,a3];
计算得到的Rossler系统的LE为0.0632310.092635-9.8924
Wolf文章中计算得到的Rossler系统的LE为0.090-9.77
需要注意的是一一定义法求解的精度有限,对有些系统的计算往往出现计果和理论值有偏差的现象。
正交化程序可以根据上面的扩展到N*N向量,这里就不加以说明了,对matlab用户来说应该还是比较简单的!
(2)Jacobian方法
通过资料检索,发现论坛中用的较多的LET工具箱的算法原理就是Jacobian方
法。
基本原理就是首先求解出连续系统微分方程的近似解,然后对系统的Jacobian
矩阵进行QR分解,计算Jacobian矩阵特征值的乘积,最后计算出LE和分数维。
经过计算也证明了这种方法精度较高,对目前常见的混沌系统,如Lorenz、
Henon、Duffing等的Lyapunov指数的计算精度都很高,而且程序编写有一定的规范,个人很推荐使用。
(虽然我自己要做的系统并不适用罢@)
LET工具箱可以在网络上找到,这里就不列出了!
关于LET工具箱如果有问题,欢迎加入本帖讨论!
Jacobian法求解Lyapunov指数JPG对离散动力系统,或者说是非线性时间序列,往往不需要计算出所有的
Lyapunov指数,通常只需计算出其最大的Lyapunov指数即可。
“198年,格里波
基证明了只要最大Lyapunov指数大于零,就可以肯定混沌的存在”。
目前常用的计算混沌序列最大Lyapunov指数的方法主要有一下几种:
(1)由定义法延伸的Nicolis方法
(2)Jacobian方法
(3)Wolf方法
(4)P—范数方法
(5)小数据量方法
其中以Wolf方法和小数据量方法应用最为广泛,也最为普遍。
下面对Nicolis方法、Wolf方法以及小数据量方法作介绍。
(1)Nicolis方法
这种方法和连续系统的定义方法类似,而且目前应用很有限制,因此只对其理论进行介绍,编程应用方面就省略了Nicolis方法求最大LE.JPG
2)Wolf方法Wolf方法求最大LE.JPG
Wolf方法的Matlab程序如下:
functionlambda_1=lyapunov_wolf(data,N,m,tau,P)%该函数用来计算时间序列的最大Lyapunov指数--Wolf方法
%m:
嵌入维数
%tau时间延迟
%data时间序列
!
一般选大于等于10
!
一般选与周期相当,如我选2000!
可以选1000;
%N:
时间序列长度满足公式:
M=N-(m-1)*tau=24000-(10-1)*1000=5000
%P:
时间序列的平均周期,选择演化相点距当前点的位置差,即若当前相点为I,则
演化相点只能在|I—J|>P的相点中搜寻!
P=周期=600
%lambda_1:
返回最大lyapunov指数值
min_point=1;%&&要求最少搜索到的点数
MAX_CISHU=5;%&&最大增加搜索范围次数
%FLYINGHAWK
%最大相点距离
%最小相点距离
%求最大、最小和平均相点距离
max_d=0;min_d=1.0e+100;
avg_dd=0;
Y=reconstitution(data,N,m,tau);%相空间重构可将此段程序加到
整个程序中,在时间循环内,可以保存时间序列的地方。
见完整程序
M=N-(m-1)*tau;%重构相空间中相点的个数
fori=1:
(M-1)
forj=i+1:
M
d=0;
fork=1:
m
d=d+(Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,j));
end
d=sqrt(d);
ifmax_d max_d=d; end ifmin_d>dmin_d=d; end avg_dd=avg_dd+d; end %平均相点距离 %若在min_eps〜max_eps中找不到演化相 end avg_d=2*avg_dd/(M*(M-1)); dlt_eps=(avg_d-min_d)*0.02; 点时,对max_eps的放宽幅度 %演化相点与当前相点距离的最小限 %&&演化相点与当前相点距离的最大限 min_eps=min_d+dlt_eps/2; max_eps=min_d+2*dlt_eps; d=d+(Y(k,i)-Y(k,1))*(Y(k,i)-Y(k,1));end d=sqrt(d); if(d DK=d; Loc_DK=i; end end %以下计算各相点对应的李氏数保存到lmd()数组中 %i为相点序号,从1到(M-1),也是i-1点的演化点;Loc_DK为相点i-1对应最短 距离的相点位置,DK为其对应的最短距离 %Loc_DK+1为Loc_DK的演化点,DK1为i点到Loc_DK+1点的距离,称为演化距离 %前i个Iog2(DK1/DK)的累计和用于求i点的lambda值 sum」md=0;%存放前i个Iog2(DK1/DK)的累计和 fori=2: (M-1)%计算演化距离 DK1=0; fork=1: m DK1=DK1+(Y(k,i)-Y(k,Loc_DK+1))*(Y(k,i)-Y(k,Loc_DK+1)); end DK1=sqrt(DK1);oId_Loc_DK=Loc_DK;%保存原最近位置相点 oId_DK=DK; %计算前i个Iog2(DK1/DK)的累计和以及保存i点的李氏指数 if(DK1~=0)&(DK~=0) sum_Imd=sum_Imd+Iog(DK1/DK)/Iog (2); end Imd(i-1)=sum_Imd/(i-1);此处可以保存不同相点i对应的李氏指数,见完整程序。 。 %以下寻找i点的最短距离: 要求距离在指定距离范围内尽量短,与DK1的角度最小point_num=0;%&&在指定距离范围内找到的候选相点的个数 cos_sita=0;%&&夹角余弦的比较初值——要求一定是锐角 zjfwcs=0;%&&增加范围次数 whiIe(point_num==0) %*搜索相点 forj=1: (M-1) ifabs(j-i)<=(P-1)%&&候选点距当前点太近,跳过! continue; end%*计算候选点与当前点的距离 dnew=0; fork=1: m dnew=dnew+(Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,j));end dnew=sqrt(dnew); if(dnew continue; end%*计算夹角余弦及比较 DOT=0; fork=1: m DOT=DOT+(Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,old_Loc_DK+1));end CTH=DOT/(dnew*DK1); ifacos(CTH)>(3.14151926/4)%&&不是小于45度的角,跳过! continue; end ifCTH>cos_sita%&&新夹角小于过去已找到的相点的夹角,保留 cos_sita=CTH; Loc_DK=j; DK=dnew; end point_num=point_num+1; end ifpoint_num<=min_pointmax_eps=max_eps+dlt_eps;zjfwcs=zjfwcs+1;ifzjfwcs>MAX_CISHU%&&超过最大放宽次数,改找最近的点DK=1.0e+100;forii=1: (M-1) ifabs(i-ii)<=(P-1)%&&候选点距当前点太近,跳过! continue; end d=0; fork=1: m d=d+(Y(k,i)-Y(k,ii))*(Y(k,i)-Y(k,ii)); end d=sqrt(d); if(d DK=d; Loc_DK=ii; end end break; end point_num=0;%&&扩大距离范围后重新搜索 cos_sita=0; end end end%取平均得到最大李雅普诺夫指数(此处只有一个值,若为正说明体系是混沌的,若为负则说明体系是周期性的确定性运动) lambda_1=sum(lmd)/length(lmd); 程序中用到的reconstitution函数如下: 此段程序可直接放在时间循环内部,即可以保存时间序列的地方。 见完整程序范例。 functionX=reconstitution(data,N,m,tau) %该函数用来重构相空间 %m为嵌入空间维数 %tau为时间延迟 %data为输入时间序列 %N %X 为时间序列长度 为输出,是m*n维矩阵 M=N-(m-1)*tau;%相空间中点的个数forj=1: M%相空间重构 fori=1: m X(i,j)=data((i-1)*tau+j); end end 这里声明一下,这些程序并非我自己编写的,均是转载,其使用我已经验证过,绝对可以运行! (3)小数据量方法说小数据量方法是目前最实用、应用最广泛的方法应该不为过吧,呵呵! 小数据量方法求最大Lyapunov指数.JPG上面两种方法,即Wolf方法和小数据量方法,在计算LE之前,都要求对时间序列进行重构相空间,重构相空间的优良对于最大LE的计算精度影响非常大! 因此重构相空间的几个参数的确定就非常重要。 (1)时间延迟 主要推荐两种方法——自相关函数法、C-C方法 自相关函数法——对一个混沌时间序列,可以先写出其自相关函数,然后作出自相关函数关于时间t的函数图像。 根据数值试验结果,当自相关函数下降到初始值的1-1/e时,所得的时间t即为重构相空间的时间延迟。 C-C方法——可以同时计算出时间延迟和时间窗口,个人推荐使用这种方法! (2)平均周期 平均周期的计算可以采用FFT方法。 在matlab帮助中有一个太阳黑子的例子,现摘录如下: loadsunspot.dat%装载数据文件 year=sunspot(: 1);%读取年份信息 Y=fft(wolfer);%快速FFT变换 N=length(Y);%FFT变换后数据长度 丫⑴=[];%去掉丫的第一个数据,它是所有数据的和 power=abs(Y(1: N/2))42;%求功率谱 nyquist=1/2; freq=(1: N/2)/(N/2)*nyquist;%求频率 plot(freq,power),gridon%绘制功率谱图 xlabel('cycles/year') %年份(周期) %绘制年份-功率谱曲线 title('Periodogram')period=1./freq; plot(period,power),axis([04002e7]),gridonylabel('Power')xlabel('Period(Years/Cycle)') [mp,index]=max(power);%求最高谱线所对应的年份下标 period(index)%由下标求出平均周期 (3)嵌入维数 目前嵌入维数的主要计算方法是采用Grassberge和Procaccia提出的G—P算法计 算出序列的关联维数d,然后利用嵌入维数m>=2d+1,选取合适的嵌入维数。 G—P算法程序如下: function[ln_r,ln_C]=G_P(data,N,tau,min_m,max_m,ss) %thefunctionisusedtocalculatecorrelationdimentionwithG-Palgorithm %计算关联维数的G—P算法 时间序列长度时间延迟最小的嵌入维数 %data: thetimeseries时间序列 %N: thelengthofthetimeseries %tau: thetimedelay %min_m: theleastembeddeddimentionm %max_m: thelargestembeddeddimentionm最大的嵌入维数%ss: thestepsizeofr的步长 %skyhawk form=min_m: max_m Y=reconstitution(data,N,m,tau);%reconstitutestatespaceM=N-(m-1)*tau;%thenumberofpointsinstatespacefori=1: M-1 forj=i+1: M d(i,j)=max(abs(Y(: i)-Y(: j)));%calculatethedistanceofeachtwo end%pointsinstatespac计算状态空间中每两点之间的距离 end max_d=max(max(d));%themaxdistanceofallpoints得到所有点之间的最大距离d(1,1)=max_d; min_d=min(min(d));%themindistanceofallpoints得到所有点间的最短距离delt=(max_d-min_d)/ss;%thestepsizeofr得到r的步长 fork=1: ss r=min_d+k*delt; C(k)=correlation_integral(Y,M,r);%calculatethecorrelationintegralln_C(m,k)=log(C(k));%lnC(r) ln_r(m,k)=log(r);%lnrfprintf('%d/%d/%d/%d\n',k,ss,m,max_m); end plot(ln_r(m,: ),ln_C(m,: )); holdon; end fid=fopen('lnr.txt','w'); fprintf(fid,'%6.2f%6.2f\n',ln_r); fclose(fid); fid=fopen('lnC.txt','w'); fprintf(fid,'%6.2f%6.2f\n',ln_C); fclose(fid); 程序中的correlation_integral函数如下: functionC_I=correlation_integral(X,M,r) %thefunctionisusedtocalculatecorrelationintegral %C_I: thevalueofthecorrelationintegral %X: thereconstitutedstatespace,Misam*Mmatrix %m: theembeddingdemention %M: Misthenumberofembeddedpointsinm-dimensionalsapce %r: theradiusoftheHeavisidefunction,sigma/2 %calculatethesumofallthevaluesofHeaviside %skyhawk sum_H=0; fori=1: M %fprintf('%d/%d\n',i,M); forj=i+1: M d=norm((X(: i)-X(: j)),inf);%calculatthedistancesofeachtwop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Lyapunov 指数 计算方法