版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【总结】Lyapunov指数的计算方法非线性理论近期为了把计算LE的一些问题弄清楚,看了有79本书!下面以吕金虎混沌时间序列分析及其应用、马军海复杂非线性系统的重构技术为主线,把目前已有的LE计算方法做一个汇总!1.关于连续系统Lyapunov指数的计算方法连续系统LE的计算方法主要有定义方法、Jacobian方法、QR分解方法、奇异值分解方法,或者通过求解系统的微分方程,得到微分方程解的时间序列,然后利用时间序列(即离散系统)的LE求解方法来计算得到。关于连续系统LE的计算,主要以定义方法、Jacobian方法做主要介绍内容。(1)定义法对用维连块动力系统,二网力在时刻以孙为卬心,区为半径脓
2、一个«维的球面.随着时间的演化,在t时刻读球面即变形为M缝的椭球面.设该椭球面的第i个坐标轴方向的半轴长为氏(与,则该系统第i个L河皿3指数为*% = hm-inI。t网(wM|阿有|此即连续系统LyaMnw指孩的定义.实际计向眇取忸武飞,0)|为d5为常敷),以中为球心,欧儿里痣范敬为d的正交矢量集(.,叫£为初始球,由非线性微分方程让尸可以分别计菖出点Q町+如孙理小、足+%经过时间才后演化的轨迹,设具终了专分别为了如、际八、杭,则令则国=6一.加fJ"=W3历L则可得新的矢量集A4NJ由于各个矢量在演化过程中吉哙向着最大的UapurOT指数方向31拨,因此需要
3、通过Sthmidt正交化不断地对新矢量进行置换,即Wulf的文章中提出的GSR方法.表述如下:必就,齿严一<曲铲及耀>蜡,壮;时刃料叫vcn5Kmk4入出支口)>以<>>以尸一附出叫排着以砒为球心,范毅为(I的正交矢境惠心?叫叱了;为新球继续进行演化,设演化至N步时,得到矢量罪化必乜匕巧,且N足够大,这可以得到Lyapunov才徽拊近做计皙公式.卜亨以各n4.4*一竽+$£贴.叫痛计亶时,可以将d取为1定义法求解Lyapunov指数.JPG关于定义法求解的程序,和matlab板块的连续系统LE求解程序”差不多。以Rossler系统为例Rossler
4、系统微分方程定义程序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的三个列向量为相互正交的单位向量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
5、)=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=who
6、letimes/steps;%演化的次数mod=zeros(3,1);lp=zeros(3,1);%初始化三个Lyapunov指数Lyapunov1=zeros(iteratetimes,1);Lyapunov2=zeros(iteratetimes,1);Lyapunov3=zeros(iteratetimes,1);fori=1:iteratetimestspan=tstart:tstep:(tstart+tstep*steps);T,Y=ode45('Rossler_ly',tspan,y);%取积分得到的最后一个时刻的值y=Y(size(Y,1),:);%重新定义起始时
7、刻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指数L
8、yapunovl(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
9、=v1;a2=v2-(a1'*v2)/(a1'*a1)*a1;a3=v3-(aT*v3)/(aT*a1)*a1-(a2'*v3)/(a2'*a2)*a2;A=a1,a2,a3;计算得到的Rossler系统的LE为0.0632310.092635-9.8924Wolf文章中计算得到的Rossler系统的LE为0.090-9.77需要注意的是一一定义法求解的精度有限,对有些系统的计算往往出现计果和理论值有偏差的现象。正交化程序可以根据上面的扩展到N*N向量,这里就不加以说明了,对matlab用户来说应该还是比较简单的!Jacobian方法通过资料检索,发现论坛中用的
10、较多的LET工具箱的算法原理就是Jacobian方法。基本原理就是首先求解出连续系统微分方程的近似解,然后对系统的Jacobian矩阵进行QR分解,计算Jacobian矩阵特征值的乘积,最后计算出LE和分数维。经过计算也证明了这种方法精度较高,对目前常见的混沌系统,如Lorenz、Henon、Duffing等的Lyapunov指数的计算精度都很高,而且程序编写有一定的规范,个人很推荐使用。(虽然我自己要做的系统并不适用于孑)LET工具箱可以在网络上找到,这里就不列出了!关于LET工具箱如果有问题,欢迎加入本帖讨论!Jacobian法求解Lyapunov指数.JPG对离散动力系统,或者说是非线性
11、时间序列,往往不需要计算出所有的Lyapunov指数,通常只需计算出其最大的Lyapunov指数即可。“1983,格里波基证明了只要最大Lyapunov指数大于零,就可以肯定混沌的存在”。目前常用的计算混沌序列最大Lyapunov指数的方法主要有一下几种:(1)由定义法延伸的Nicolis方法(2) Jacobian方法(3) 3)Wolf方法(4) P范数方法(5)小数据量方法其中以Wolf方法和小数据量方法应用最为广泛,也最为普遍。下面对Nicolis方法、Wolf方法以及小数据量方法作一一介绍。1) 1)Nicolis方法这种方法和连续系统的定义方法类似,而且目前应用很有限制,因此只对其
12、理论进行介绍,编程应用方面就省略了Nicolis方法求最大LE.JPG2) Wolf方法Wolf方法求最大LE.JPGWolf方法的Matlab程序如下:functionlambda_1=lyapunov_wolf(data,N,m,tau,P)%该函数用来计算时间序列的最大Lyapunov指数-Wolf方法%m:嵌入维数!一般选大于等于10%tau:时间延迟!一般选与周期相当,如我选2000%data:时间序列!可以选1000;%N:时间序列长度满足公式:M=N-(m-1)*tau=24000-(10-1)*1000=5000%P:时间序列的平均周期,选择演化相点距当前点的位置差,即若当前相
13、点为I,则演化相点只能在|IJ卜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
14、=1:(M-1)forj=i+1:Md=0;fork=1:md=d+(Y(k,i)-Y(k,j)*(Y(k,i)-Y(k,j);endd=sqrt(d);ifmax_d<dmax_d=d;endifmin_d>dmin_d=d;endavg_dd=avg_dd+d;endend%Sf在 min_epsmax_eps中找不至U演化相%演化相点与当前相点距离的最小限%&&演化相点与当前相点距离的最大限avg_d=2*avg_dd/(M*(M-1);%平均相点距离dlt_eps=(avg_d-min_d)*0.02;点时,对max_eps的放宽幅度min_eps=min_
15、d+dlt_eps/2;max_eps=min_d+2*dlt_eps;%从p+iM-1个相点中找与第一个相点最近的相点位置(Loc_DK)及其最短距离DKDK=1.0e+100;%第i个相点到其最近距离点的距离Loc_DK=2;%第i个相点对应的最近距离点的下标fori=(P+1):(M-1)%限制短暂分离,从点P+1开始搜索d=0;fork=1:md=d+(Y(k,i)-Y(k,1)*(Y(k,i)-Y(k,1);endd=sqrt(d);if(d<DK)&(d>min_eps)DK=d;Loc_DK=i;endend%以下计算各相点对应的李氏数保存到lmd()数组中%
16、i为相点序号,从1至iJ(M-1),也是i-1点的演化点;Loc_DK为相点i-1对应最短距离的相点位置,DK为其对应的最短距离%Loc_DK+1为Loc_DK的演化点,DK1为i点到Loc_DK+1点的距离,称为演化距离%前i个log2(DK1/DK)的累计和用于求i点的lambda值sum_lmd=0;%存放前i个log2(DK1/DK)的累计和fori=2:(M-1)%计算演化距离DK1=0;fork=1:mDK1=DK1+(Y(k,i)-Y(k,Loc_DK+1)*(Y(k,i)-Y(k,Loc_DK+1);endDK1=sqrt(DK1);old_Loc_DK=Loc_DK;%保存原
17、最近位置相点old_DK=DK;%计算前i个log2(DK1/DK)的累计和以及保存i点的李氏指数if(DK1=0)&(DK=0)sum_lmd=sum_lmd+log(DK1/DK)/log(2);endlmd(i-1)=sum_lmd/(i-1);此处可以保存不同相点i对应的李氏指数,见完整程序。%以下寻找i点的最短距离:要求距离在指定距离范围内尽量短,与DK1的角度最小point_num=0;%&&在指定距离范围内找到的候选相点的个数cos_sita=0;%&&夹角余弦的比较初值要求一定是锐角zjfwcs=0;%&&增加范围次数wh
18、ile(point_num=0)%*搜索相点forj=1:(M-1)ifabs(j-i)<=(P-1)%&&候选点距当前点太近,跳过!continue;end%*计算候选点与当前点的距离dnew=0;fork=1:mdnew=dnew+(Y(k,i)-Y(k,j)*(Y(k,i)-Y(k,j);enddnew=sqrt(dnew);if(dnew<min_eps)|(dnew>max_eps)%&&不在距离范围,跳过!continue;end%*计算夹角余弦及比较DOT=0;fork=1:mDOT=DOT+(Y(k,i)-Y(k,j)*(Y(k
19、,i)-Y(k,old_Loc_DK+1);endCTH=DOT/(dnew*DK1);ifacos(CTH)>(3.14151926/4)%&&不是小于45度的角,跳过!continue;endifCTH>cos_sita%&&新夹角小于过去已找到的相点的夹角,保留cos_sita=CTH;Loc_DK=j;DK=dnew;endpoint_num=point_num+1;endifpoint_num<=min_pointmax_eps=max_eps+dlt_eps;zjfwcs=zjfwcs+1;ifzjfwcs>MAX_CISHU
20、%&&超过最大放宽次数,改找最近的点DK=1.0e+100;forii=1:(M-1)ifabs(i-ii)<=(P-1)%&&候选点距当前点太近,跳过!continue;endd=0;fork=1:md=d+(Y(k,i)-Y(k,ii)*(Y(k,i)-Y(k,ii);endd=sqrt(d);if(d<DK)&(d>min_eps)DK=d;Loc_DK=ii;endendbreak;endpoint_num=0;%&&扩大距离范围后重新搜索cos_sita=0;endendend%取平均得到最大李雅普诺夫指数(此
21、处只有一个值,若为正说明体系是混沌的,若为负则说明体系是周期性的确定性运动)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:mX(i,j)=data(i-1)*tau+j);
22、endend这里声明一下,这些程序并非我自己编写的,均是转载,其使用我已经验证过,绝对可以运行!(3)小数据量方法说小数据量方法是目前最实用、应用最广泛的方法应该不为过吧,呵呵!小数据量方法求最大Lyapunov指数.JPG上面两种方法,即Wolf方法和小数据量方法,在计算LE之前,都要求对时间序列进行重构相空间,重构相空间的优良对于最大LE的计算精度影响非常大!因此重构相空间的几个参数的确定就非常重要。(1)时间延迟主要推荐两种方法自相关函数法、CC方法自相关函数法对一个混沌时间序列,可以先写出其自相关函数,然后作出自相关函数关于时间t的函数图像。根据数值试验结果,当自相关函数下降到初始值的
23、11/e时,所得的时间t即为重构相空间的时间延迟。CC方法可以同时计算出时间延迟和时间窗口,个人推荐使用这种方法!(2)平均周期平均周期的计算可以采用FFT方法。在matlab帮助中有一个太阳黑子的例子,现摘录如下:loadsunspot.dat%装载数据文件year=sunspot(:,1);%读取年份信息%读取黑子活动数据%绘制原始数据图% 快速 FFT 变换wolfer=sunspot(:,2);plot(year,wolfer)title('SunspotData')Y=fft(wolfer);N=length(Y);%FFT变换后数据长度Y(1)=;%去掉Y的第一个数
24、据,它是所有数据的和power=abs(Y(1:N/2).A2;%求功率谱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),gridon绘制年份功率谱曲线ylabel('Power')xlabel('Period(Years/Cycle)')mp,
25、index=max(power);%求最高谱线所对应的年份下标period(index)%由下标求出平均周期(3)嵌入维数目前嵌入维数的主要计算方法是采用Grassberge和Procaccia提出的GP算法计算出序列的关联维数d,然后利用嵌入维数m>=2d+1,选取合适的嵌入维数。GP算法程序如下:functionln_r,ln_C=G_P(data,N,tau,min_m,max_m,ss)%thefunctionisusedtocalculatecorrelationdimentionwithG-Palgorithm%计算关联维数的GP算法%data:thetimeseries时间
26、序列时间序列长度 时间延迟 最小的嵌入维数%N:thelengthofthetimeseries%tau:thetimedelay%min_m:theleastembeddeddimentionm%max_m:thelargestembeddeddimentionm最大的嵌入维数%ss:thestepsizeofr的步长%skyhawkform=min_m:max_mY=reconstitution(data,N,m,tau);%reconstitutestatespaceM=N-(m-1)*tau;%thenumberofpointsinstatespacefori=1:M-1forj=i+
27、1:Md(i,j)=max(abs(Y(:,i)-Y(:,j);%calculatethedistanceofeachtwoend%pointsinstatespacd算状态空间中每两点之间的距离endmax_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:ssr=min_d+k*delt;C(k)=corre
28、lation_integral(Y,M,r);%calculatethecorrelationintegralln_C(m,k)=log(C(k);%lnC(r)ln_r(m,k)=log(r);%lnrfprintf('%d/%d/%d/%dn',k,ss,m,max_m);endplot(ln_r(m,:),ln_C(m,:);holdon;endfid=fopen('lnr.txt','w');fprintf(fid,'%6.2f%6.2fn',ln_r);fclose(fid);fid=fopen('lnC.txt
29、','w');fprintf(fid,'%6.2f%6.2fn',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<r<2sigma%calculatethesumofallthevaluesofHeaviside%skyhawksum_H=0;fori=1:M%fprintf('%d/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论