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

下载本文档

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

文档简介

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一 .加= W3历L 那么可得新的矢量集? A4NJ由于各个矢量在演化过程中吉哙向着最大的UapurO

3、T指数方向31拨,因此需要通过Sthmidt正交化不断地对新矢量进行置换,即Wulf的文章中提出的GSR方法.表述如下:必就,齿严一 <曲铲及耀 >蜡,壮;时刃料叫vcn 5Km k4入出支 口>以 <>>以尸一附出叫排着以砒为球心,范毅为I的正交矢境惠心叫叱了;为新球继续进行演 化,设演化至N步时,得到矢量罪化必乜匕巧,且N足够大,这可以得到Lyapunov 才徽拊近做计皙公式.卜亨以各n4.4*一竽+$£贴.叫痛计亶时,可以将d取为1定义法求解 Lyapunov 指数.JPG关于定义法求解的程序,和 matlab板块的 连续系统LE求解程序差不

4、多.以Rossler系统为例Rossler系统微分方程定义程序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 = zero

5、s(12,1);% Rossler版引子dX(1) = -y-z;dX(2) = x+a*y;dX(3) = b+z*(x-c);% Rossler吸引子的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

6、;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);for i=1:iteratetimestspan

7、= 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=sqrt(y0(:,1)'*y0(:,1);mod(2) = sqrt(y0(:,2)'*y0(:,2

8、);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指数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,Lya

9、punov1,i,Lyapunov2,i,Lyapunov3)程序中用到的ThreeGS程序如下:%G-S正交化function A = ThreeGS(V) % V 为 3*3 向量v1 = V(:,1);v2 = V(:,2);v3 = V(:,3);a1 = zeros(3,1);a2 = zeros(3,1);a3 = zeros(3,1);a1 = v1;a2 = v2-(a1'*v2)/(a1'*a1)*a1;a3 = v3-(a1'*v3)/(a1'*a1)*a1-(a2'*v3)/(a2'*a2)*a2;A = a1,a2,a3;

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

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

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

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

15、+ (Y(k,i)-Y(k,j)*(Y(k,i)-Y(k,j);endd = sqrt(d);if max_d < d max_d = d;endif min_d > d min_d = d;endavg_dd = avg_dd + d;endendavg_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 ;%)?f在min_epsmax_eps中找不

16、至U演化相项化相点与当前相点距离的最小限%&&演化相点与当前相点距离的最大限% 从P+1M-1个相点中找与第一个相点最近的相点位置(Loc_DK)及其最短距 离DKDK = 1.0e+100;%第i个相点到其最近距离点的距离Loc_DK = 2;%第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 =

17、d;一Loc_DK = i; end end%以下计算各相点对应的李氏数保存到lmd()数组中% 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 )的累计和for i = 2 : (M-1)%计算演化距离DK1 = 0;for k = 1 : mDK1 = DK1 + (Y(k,i)

18、-Y(k,Loc_DK+1)*(Y(k,i)-Y(k,Loc_DK+1);endDK1 = sqrt(DK1);old_Loc_DK = Loc_DK ;%保存原最近位置相点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_

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

20、sqrt(dnew);if (dnew < min_eps)|( dnew > max_eps ) %&环在距离范围,跳过! continue;end%*计算夹角余弦及比拟DOT = 0;for k = 1 : mDOT = DOT+(Y(k,i)-Y(k,j)*(Y(k,i)-Y(k,old_Loc_DK+1); endCTH = DOT/(dnew*DK1);if acos(CTH) > (3.14151926/4)%&&不是小于 45 度的角,跳过!continue;endif CTH > cos_sita%&&新夹角小于过

21、去已找到的相点的夹角,保存cos_sita = CTH;Loc_DK = j;DK = dnew;endpoint_num = point_num +1;endif point_num <= min_point max_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

22、 = 0;for k = 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%取平均得到最大李雅普诺夫指数(此处只有一个值,假设为正说明体系是混沌的, 假设为负那么说明体系是周期性确实定性运动) lambda_1=sum(lmd)/length(lmd);程序中用到的

23、reconstitution函数如下:此段程序可直接放在时间循环内部,即 可以保存时间序列的地方.见完整程序范例.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);endend这里声明一下,这些程序并非我自己编写的,均是转载,其使用我已经验证过,绝对可以运行!(3)小数据量方法说小数据量方

24、法是目前最实用、应用最广泛的方法应该不为过吧,呵呵!小数据量方法求最大Lyapunov指数.JPG上面两种方法,即 Wolf方法和小数据量方法,在计算 LE之前,都要求对时间 序列进行重构相空间,重构相空间的优良对于最大 LE的计算精度影响非常大!因 此重构相空间的几个参数确实定就非常重要.(1)时间延迟主要推荐两种方法 自相关函数法、CC方法自相关函数法一一对一个混沌时间序列,可以先写出其自相关函数,然后作出自 相关函数关于时间t的函数图像.根据数值试验结果,当自相关函数下降到初始值 的1 1/e时,所得的时间t即为重构相空间的时间延迟.CC方法一一可以同时计算出时间延迟和时间窗口,个人推荐

25、使用这种方法!(2)平均周期平均周期的计算可以采用FFT方法.在matlab帮助中有一个太阳黑子的例子,现 摘录如下:load sunspot.dat濮载数据文件year = sunspot(:,1);% 取年份信息wolfer = sunspot(:,2); plot(year,wolfer) title('Sunspot Data')Y = fft(wolfer);%读取黑子活动数据%绘制原始数据图%快速FFT变换N = length(Y);%FFT变换后数据长度Y(1) = ;%去掉Y的第一个数据,它是所有数据的和power = abs(Y(1:N/2).A2;%求功率谱

26、nyquist = 1/2;freq = (1:N/2)/(N/2)*nyquist;% 求频率plot(freq,power), grid on% 绘制功率谱图xlabel('cycles/year')title('Periodogram')period = 1./freq;%?份(周期)plot(period,power), axis(0 40 0 2e7), grid on%绘制年份功率谱曲线ylabel('Power')xlabel('Period(Years/Cycle)')mp,index = max(power);%

27、求最高谱线所对应的年份下标period(index)%i下标求出平均周期(3)嵌入维数目前嵌入维数的主要计算方法是采用Grassberge和Procaccia提出的GP算法计算出序列的关联维数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% 计算关联维数的GP算法时间序列长度时间延迟最小的嵌入维数% data:

28、the time series时间序歹 U % N: the length 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=min_m:max_mY=reconstitution(data,N,m,tau);%reconstitute state spaceM=N-(m-1)*tau;%the number of p

29、oints in state spacefor i=1:M-1for j=i+1:Md(i,j)=max(abs(Y(:,i)-Y(:,j);%calculate the distance of each twoend%points in state spacd算状态空间中每两点之间的距离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-m

30、in_d)/ss;%the stepsize of r得至U r 的步长for k=1:ssr=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

31、,'%6.2f %6.2fn',ln_r);fclose(fid);fid = fopenClnC.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 He

温馨提示

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

评论

0/150

提交评论