声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2292|回复: 6

[分形与混沌] 求教:离散系统的最大李亚普诺夫指数谱

[复制链接]
发表于 2011-2-23 17:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
想对一个离散迭代映射的稳定性进行分析。
通过LET工具箱可以得到单一参数条件下的李亚普诺夫指数值
但是想画出随某一分岔参数变化,系统李亚普诺夫指数的变化图就不知道如何下手啦。
不知道论坛上有没有那位高手有LET工具箱的纯程序版本,或者有一些别的方法^_^
先谢谢啦,求教。

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2011-2-23 18:07 | 显示全部楼层
回复 1 # 雷博 的帖子

论坛上有计算LE的程序,建议先搜索一下。至于画出最大LE随某一分岔参数变化曲线,只需编一个循环就可以实现
 楼主| 发表于 2011-2-24 10:17 | 显示全部楼层
回复 2 # hsfy919 的帖子

初衷也是这样弄的,但是在LET工作包中找了许久,没有找到图形界面部分之外的程序部分,也就无从加循环。
论坛上的一些关于LE的程序,但其中的一些参数不知道如何去确定或者给值,如维度等等。不知道这些如何确定。看到LET工作包中好像只需要设定迭代方程,初始值等就好了,所以才动了改LET工作包的鬼念头...
手头上也有一个计算连续系统的LE随某一分岔参数变化曲线程序,有些像傻瓜使用式的,只要改变函数定义,其他部分就不用改了。不知道可不可以根据这个程序改成离散系统的。
新手提问,有很多不明白的地方哈,见谅^_^
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2011-2-24 10:19 | 显示全部楼层
回复 2 # hsfy919 的帖子

该程序如下

function [Texp,Lexp]=lyapunov2(n,rhs_ext_fcn,fcn_integrator,tstart,stept,tend,ystart,ioutp);
n1=n; n2=n1*(n1+1);
nit = round((tend-tstart)/stept);
y=zeros(n2,1); cum=zeros(n1,1); y0=y;
gsc=cum; znorm=cum;
y(1:n)=ystart(:);
for i=1:n1 y((n1+1)*i)=1.0;
end;
t=tstart;
for ITERLYAP=1:nit
  [T,Y] = feval(fcn_integrator,rhs_ext_fcn,[t t+stept],y);   
  t=t+stept;
  y=Y(size(Y,1),:);
  for i=1:n1
      for j=1:n1 y0(n1*i+j)=y(n1*j+i); end;
  end;
  znorm(1)=0.0;
  for j=1:n1 znorm(1)=znorm(1)+y0(n1*j+1)^2; end;
  znorm(1)=sqrt(znorm(1));
  for j=1:n1 y0(n1*j+1)=y0(n1*j+1)/znorm(1); end;
  for j=2:n1
      for k=1:(j-1)
          gsc(k)=0.0;
          for l=1:n1
              gsc(k)=gsc(k)+y0(n1*l+j)*y0(n1*l+k);
          end;
      end;
       for k=1:n1
          for l=1:(j-1)
              y0(n1*k+j)=y0(n1*k+j)-gsc(l)*y0(n1*k+l);
          end;
      end;
      znorm(j)=0.0;
      for k=1:n1
          znorm(j)=znorm(j)+y0(n1*k+j)^2;
      end;
      znorm(j)=sqrt(znorm(j));

      for k=1:n1
          y0(n1*k+j)=y0(n1*k+j)/znorm(j);
      end;
end;
  for k=1:n1
      cum(k)=cum(k)+log(znorm(k));
  end;
  for k=1:n1
      lp(k)=cum(k)/(t-tstart);
  end;
if ITERLYAP==1
     Lexp=lp;
     Texp=t;
  else
     Lexp=[Lexp; lp];
     Texp=[Texp; t];
  end;
  for i=1:n1
      for j=1:n1
          y(n1*j+i)=y0(n1*i+j);
      end;
  end;
end;

使用的时候,只要定义好函数,再调用以上文件就行了,不知道能不能改成离散系统使用的。
先谢谢大家啦^_^
发表于 2011-2-24 11:56 | 显示全部楼层
回复 3 # 雷博 的帖子

论坛上计算LE指数的程序主要分两种,一种是Jacbain方法,应该就是你说的LET工具包采用的方法,只不过有些工具包为了保护版权并不公开代码。而论坛上有这部分代码,大致好像就是你贴的那个程序(我没有仔细检查,只看了前几句)。另一种是wolf方法,需要先计算嵌入维数等参数,是对时间序列求LE的方法。你先弄清楚你的问题适用那种方法,你指的离散系统是什么,1维的?
 楼主| 发表于 2011-2-25 14:59 | 显示全部楼层
就是迭代方程,可能是一维的,也可能是n维的。
当时利用lET工具箱通过设置给定迭代方程,可以求二维或者三维的,从使用方便的角度上,开始倾向于对LET工具箱进行改进,也就是加循环的方法进行计算。可是看了半天,里面ms有很多关于图形按钮的编程,有些无从下手。就想看看有没有类似我贴的那个程序的那种适用于离散迭代映射(一维二维或者n维)的求LE指数的程序。
发表于 2011-3-5 17:22 | 显示全部楼层
本帖最后由 liliangbiao 于 2011-3-5 17:29 编辑

回复 1 # 雷博 的帖子

第一,LET工具箱给出了一个很好的算法,其实在这个工具箱内分别给出了两种不同的计算LES的方法,其一是离散系统的LEs,另一个是计算低微连续系统的LEs,好好看看,并不难从中发现规律以及计算指数的模块在哪里。
第二,在LET工具箱中,关于离散系统的指数的计算,除了One-Dimensional 的,还是利用的是Jacobian矩阵法(当然你可以吧1-D也看成是Jacobian矩阵的方法),但是和1-D所不同的是,计算Lyapunov公式在二维及其以上并不适用,这一点有人已经给出了证明。
第三, 基于第二点的做法,那么就需要你在LET中发现规律了。如果你能找到这个规律,那么证明你就会编写了,也可以改写成其他语言版,因为对于Matlab来说,尽管你要用向量化去提高速度,但是还是没有C/C++快!
第四,这里我给你一个计算Henon系统的最大指数的指数谱程序,但是这个程序所用到的思想和你用的LET工具箱思想完全不同。详细请看我的个人主页:http://forum.vibunion.com/?69372
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-18 12:37 , Processed in 0.083964 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表