-Lyapunov指数的计算方法_第1页
-Lyapunov指数的计算方法_第2页
-Lyapunov指数的计算方法_第3页
-Lyapunov指数的计算方法_第4页
-Lyapunov指数的计算方法_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、【总结】Lyapunov指数的计算方法 非线性理论近期为了把计算LE的一些问题弄清楚,看了有79本书!下面以吕金虎?混沌 时间序列分析及其应用?、马军海?复杂非线性系统的重构技术?为主线,把目前 已有的LE计算方法做一个汇总!1.关于连续系统Lyapunov指数的计算方法 连续系统LE的计算方法主要有定义 方法、Jacobian方法、QR分解方法、奇异值分解方法,或者通过求解系统的微分 方程,得到微分方程解的时间序列,然后利用时间序列即离散系统的LE求解方法来计算得到.关于连续系统 LE的计算,主要以定义方法、Jacobian方法做主 要介绍容.1定义法对用维连嫔动力系统才二在时刻以孙为卬心,

2、忸M0.0|为半径脓一个 «维的球面.随着时间的演化,在t时刻读球面即变形为M缝的椭球面.说谈椭球面的第i 个坐标轴方向的半轴长为巨|,那么该系统第i个L刈皿3指数为*% = lirn-lnIe t四/q|阿冷.61此即连续系统LyaMnw指裁的定义.实际计算时,取口,0|为43为常裁,以为球心,欧几里悠沌敢为d的正交矢量集.刍为初始球,由非线性微分方程£ =尸外可以分别计菖出点工s花+电、 孙收#、m4%经过时间才后演化的轨迹,设具终了专分别为了如、际八、杭,那么令 那么国工6一 .公产-那么可得新的矢量集"的叱心吗.由于各个矢量在演化过程中都会向希最大的 由口

3、SWV指敬方向翼捷,因此需要通过 Schmidt正交化不断地对新矢量进行置搔,即Wulf的文章中提出的GSR方法.表述如下:同铲一%叽峭小叫v;1J -枭户品尸产 以厂严 5工墨1产 口产口3小邺接着以硒为球心,范数为d的正交矢塞蓦心出尸.叫用为新球继续进行演 化,设演化至N步时,得到矢量制耳招叼匕?*且N足够大这可以得到Lyapunov 才徽拊近似计篁公式,4 一竽+4£书坪1 Jvi A-L实际计亶时,可以将d取为1定义法求解Lyapunov指数.JPG关于定义法求解的程序,和 matlab板块的连续系统LE求解程序差不多.以Rossler系统为例Rossler系统微分方程定义程

4、序function dX = 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);% RosslerR引子dX(1)

5、= -y-z;dX(2) = x+a*y;dX(3) = b+z*(x-c);% Rosslei®引子的Jacobi矩阵Jaco = 0 -1 -1;1 a 0;z 0 x-c;dX(4:12) = Jaco*Y;求解LE代码:%计算Rossler吸引子的Lyapunov指数clear;yinit = 1,1,1;orthmatrix = 1 0 0;0 1 0;0 0 1;a = 0.15;b = 0.20;c = 10.0;y = zeros(12,1);%初始化输入y(1:3) = yinit;y(4:12) = orthmatrix;tstart = 0; %时间初始值tst

6、ep = 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);for i=1:iteratetimestspan = tstart:tstep:(tstar

7、t + 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) =

8、sqrt(y0(:,3)'*y0(:,3);y0(:,1) = y0(:,1)/mod;y0(:,2) = y0(:,2)/mod(2);y0(:,3) = y0(:,3)/mod(3);lp = lp+log(abs(mod);%E个 Lyapunov 指数Lyapunovl(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,Lyap

9、unov2,i,Lyapunov3)程序中用到的ThreeGS程序如下:%G-S正交化function A = ThreeGS(V) % V为 3*3 向量v1 = V(:,1);v2 = V(:,2);v3 = V(:,3);al = zeros(3,1);a2 = zeros(3,1);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系

10、统的 LE为0.063231 0.092635 -9.8924Wolf文章中计算得到的 Rossler系统的LE为0.09 0 -9.77需要注意的是一一定义法求解的精度有限,对有些系统的计算往往出现计果和理论 值有偏差的现象.正交化程序可以根据上面的扩展到 N*N向量,这里就不加以说明了,对 matlab用 户来说应该还是比拟简单的!Jacobian方法通过资料检索,发现论坛中用的较多的LET工具箱的算法原理就是Jacobian方法.根本原理就是首先求解出连续系统微分方程的近似解,然后对系统的 Jacobian 矩阵进行QR分解,计算Jacobian矩阵特征值的乘积,最后计算出 LE和分数维

11、. 经过计算也证实了这种方法精度较高,对目前常见的混沌系统,如 Lorenz、 Henon、Duffing等的Lyapunov指数的计算精度都很高,而且程序编写有一定的 规,个人很推荐使用.(虽然我自己要做的系统并不适用于孑)LET工具箱可以在网络上找到,这里就不列出了!关于LET工具箱如果有问题,欢迎参加本帖讨论!Jacobian 法求解 Lyapunov 指数.JPG对离散动力系统,或者说是非线性时间序列,往往不需要计算出所有的Lyapunov指数,通常只需计算出其最大的 Lyapunov指数即可.1983年,格里波 基证实了只要最大Lyapunov指数大于零,就可以肯定混沌的存在 目前常

12、用的计算混沌序列最大 Lyapunov指数的方法主要有一下几种:(1)由定义法延伸的Nicolis方法(2) Jacobian 方法(3) Wolf 方法(4) P数方法(5) 小数据量方法其中以Wolf方法和小数据量方法应用最为广泛,也最为普遍.下面对Nicolis方法、Wolf方法以及小数据量方法作介绍.(1) Nicolis 方法这种方法和连续系统的定义方法类似,而且目前应用很有限制,因此只对其理论 进行介绍,编程应用方面就省略了Nicolis方法求最大LE.JPG(2) Wolf方法 Wolf方法求最大LE.JPGWolf方法的Matlab程序如下:function lambda_1=

13、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:时间序列的平均周期,选择演化相点距当前点的位置差,即假设当前相点为I,那么演化相点只能在|I-J|>P的相点中搜寻! P=周期=600% lambda_1:返回最大lyapunov指数值min_point=1 ;%&&a

14、mp;要求最少搜索到的点数MAX_CISHU=5 ; %&&最大增加搜索围次数%FLYINGHAWK%求最大、最小和平均相点距离max_d = 0;%1大相点距离min_d = 1.0e+100;%R 小相点距离avg_dd = 0;Y=reconstitution(data,N,m,tau);%1空间重构可将此段程序加到整个程序中,在时间循环,可以保存时间序列的地方.见完整程序.M=N-(m-1)*tau;%重构相空间中相点的个数for i = 1 : (M-1)for j = i+1 : Md = 0;for k = 1 : md = d + (Y(k,i)-Y(k,j)*

15、(Y(k,i)-Y(k,j); end d = sqrt(d);if max_d < d max_d = d;endif min_d > d min_d = d;endavg_dd = avg_dd + d;endend孙均相点距离%f在 min_epsmax_eps中找不到演化相项化相点与当前相点距离的最小限%&&演化相点与当前相点距离的最大限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_

16、eps = min_d + 2 * dlt_eps ;% 从P+1M-1个相点中找与第一个相点最近的相点位置(Loc_DK及其最短距离 DKDK = 1.0e+100;%W i个相点到其最近距离点的距离Loc_DK = 2;%g i个相点对应的最近距离点的下标for i = (P+1):(M-1)%艮制短暂别离,从点P+1开始搜索d = 0;for k = 1 : md = d + (Y(k,i)-Y(k,1)*(Y(k,i)-Y(k,1); end d = sqrt(d);if (d < DK) & (d > min_eps)DK = d;Loc_DK = i; end

17、end%以下计算各相点对应的氏数保存到lmd()数组中% i为相点序号,从1至MM-1),也是i-1点的演化点;Loc_DK为相点i-1对应最短 距离的相点位置,DK为其对应的最短距离% Loc_DK+1为Loc_DK的演化点,DK1为i点到Loc_DK+1点的距离,称为演化距离%前1个10g2 (DK1/DK)的累计和用于求i点的lambda值sum_lmd = 0 ;%存放前i个log2 (DK1/DK)的累计和for i = 2 : (M-1)%计算演化距离DK1 = 0;for k = 1 : mDK1 = DK1 + (Y(k,i)-Y(k,Loc_DK+1)*(Y(k,i)-Y(k

18、,Loc_DK+1); endDK1 = sqrt(DK1);old_Loc_DK = Loc_DK ;%保存原最近位置相点old_DK=DK;% 计算前i个10g2 (DK1/DK)的累计和以及保存i点的氏指数if (DK1 = 0)&( DK = 0) sum_1md = sum_1md + 1og(DK1/DK) /1og(2);end1md(i-1) = sum_1md/(i-1);此处可以保存不同相点i对应的氏指数,见完整程序.%以下寻找i点的最短距离:要求距离在指定距离围尽量短,与DK1的角度最小point_num = 0; % &&在指定距离围找到的候选相

19、点的个数cos_sita = 0 ;%&&夹角余弦的比拟初值要求一定是锐角zjfwcs=0 ;%&&增加围次数whi1e (point_num = 0)% *搜索相点for j = 1 : (M-1)if abs(j-i) <=(P-1)%&&炭选点距当前点太近,跳过!continue;end%计算候选点与当前点的距离dnew = 0;for k = 1 : m dnew = dnew + (Y(k,i)-Y(k,j)*(Y(k,i)-Y(k,j);end dnew = sqrt(dnew);if (dnew < min_eps)|(

20、 dnew > max_eps )%&&不在距离围,跳过!continue;end%计算夹角余弦及比拟DOT = 0; for k = 1 : mDOT = DOT+(Y(k,i)-Y(k,j)*(Y(k,i)-Y(k,o1d_Loc_DK+1); endCTH = DOT/(dnew*DK1);if acos(CTH) > (3.14151926/4)%&财是小于 45 度的角,跳过!continue;endif CTH > cos_sita%&&新夹角小于过去已找到的相点的夹角,保存cos_sita = CTH;Loc_DK = j

21、;DK = dnew;endpoint_num = point_num +1;endif point_num <= min_pointmax_eps = max_eps + dlt_eps;zjfwcs =zjfwcs +1;if zjfwcs > MAX_CISHU%&&超过最大放宽次数,改找最近的点DK = 1.0e+100;for ii = 1 : (M-1)if abs(i-ii) <= (P-1)%&&候选点距当前点太近,跳过!continue;endd = 0;for k = 1 : md = d + (Y(k,i)-Y(k,ii)

22、*(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%取平均得到最大雅普诺夫指数(此处只有一个值,假设为正说明体系是混沌的,假设 为负那么说明体系是周期性确实定性运动)lambda_1=sum(lmd)/length(lmd);程序中用到的reconstitution 函数如下:此段程序可直接放在时间循环部,即可 以保存时间序列

23、的地方.见完整程序例.function X=reconstitution(data,N,m,tau)%该函数用来重构相空间% m为嵌入空间维数% tau为时间延迟% data为输入时间序列% N为时间序列长度% X为输出,是m*n维矩阵M=N-(m-1)*tau;% 相空间中点的个数for j=1:M咐目空间重构for i=1:mX(i,j)=data(i-1)*tau+j);end end这里声明一下,这些程序并非我自己编写的,均是,其使用我已经验证过,绝对可 以运行!(3)小数据量方法说小数据量方法是目前最实用、应用最广泛的方法应该不为过吧,呵呵!小数据量方法求最大Lyapunov指数.J

24、PG上面两种方法,即 Wolf方法和小数据量方法,在计算 LE之前,都要求对时间 序列进行重构相空间,重构相空间的优良对于最大 LE的计算精度影响非常大!因 此重构相空间的几个参数确实定就非常重要.(1)时间延迟主要推荐两种方法 自相关函数法、C C方法自相关函数法一一对一个混沌时间序列,可以先写出其自相关函数,然后作出自相 关函数关于时间t的函数图像.根据数值试验结果,当自相关函数下降到初始值的 1 1/e时,所得的时间t即为重构相空间的时间延迟.CC方法一一可以同时计算出时间延迟和时间窗口,个人推荐使用这种方法!(2)平均周期平均周期的计算可以采用FFT方法.在matlab帮助中有一个太阳

25、黑子的例子,现 摘录如下:load sunspot.dat 曝载数据文件year = sunspot(:,1); wolfer = sunspot(:,2); plot(year,wolfer) title('Sunspot Data')%眩取年份信息%卖取黑子活动数据%绘制原始数据图Y = fft(wolfer);啾速FFT变换N = length(Y);Y(1)=;%FF校换后数据长度power = abs(Y(1:N/2).A2;nyquist = 1/2;freq = (1:N/2)/(N/2)*nyquist; plot(freq,power), grid on xl

26、abel('cycles/year') title('Periodogram')%去掉Y的第一个数据,它是所有数据的和 %求功率谱%求频率%会制功率谱图period = 1./freq;% 年份(周期)plot(period,power), axis(0 40 0 2e7), grid on%绘制年份功率谱曲线ylabel('Power')xlabel('Period(Years/Cycle)')%求最高谱线所对应的年份下标 %4下标求出平均周期mp,index = max(power); period(index)(3)嵌入维数

27、目前嵌入维数的主要计算方法是采用Grassberger和Procaccia提出的G P算法计算出序列的关联维数d,然后利用嵌入维数 m>=2d+1 ,选取适宜的嵌入维数.GP算法程序如下:function ln_r,ln_C=G_P(data,N,tau,min_m,max_m,ss)% the function is used to calculate correlation dimention with G-P algorithm时间序列时间序列长度时间延迟最小的嵌入维数最大的嵌入维数 r的步长%计算关联维数的GP算法 % data:the time series% N: the l

28、ength of the time series% tau: the time delay% min_m:the least embedded dimention m% max_m:the largest embedded dimention m% ss:the stepsize of r%skyhawkfor m=minm:maxmY=reconstitution(data,N,m,tau);%reconstitute state spaceM=N-(m-1)*tau;%the number of points in state spacefor i=1:M-1for j=i+1:Md(i,

29、j)=max(abs(Y(:,i)-Y(:,j);%calculate the distance of each twoend%points in state space计算状态空间中每两点之间的距离endmax_d=max(max(d);%the max distance of all points 得到所有点之间的最大距离 d(1,1)=max_d;min_d=min(min(d);%the min distance of all points彳马至 U所有点间的最短距离delt=(max_d-min_d)/ss;%the stepsize of r彳马至U r 的步长for k=1:ss

30、r=min_d+k*delt;C(k)=correlation_integral(Y,M,r);%calculate the correlation integral ln_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,:);hold on;endfid=fopen('lnr.txt','w');fprintf(fid,'%6.2f %6.2fn',ln_r);fc

31、lose(fid);fid = fopen('lnC.txt','w');fprintf(fid,'%6.2f %6.2fn',ln_C);fclose(fid);程序中的correlation_integral 函数如下:function C_I=correlation_integral(X,M,r)%the function is used to calculate correlation integral%C_I:the value of the correlation integral%X:the reconstituted state space,M is a m*M matrix%m:the embedding demention%M:M is the number of embedded points in m-dimensional sapce%r:the radius of the Heaviside function,sigma/2<r<2sigma%calculate the sum of all the values of Heaviside%s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论