liliangbiao
发表于 2011-4-24 02:27
本帖最后由 liliangbiao 于 2011-4-24 02:58 编辑
对于确定性动力系统,请参看Mathworks网站上的关于计算Lorenz系统的指数计算程序,尽管那只是一个在确定的参数条件下,计算Lyapunov指数谱的程序,(LET工具箱计算指数的部分也是用的那个程序哦)!要得到随一个参数变化的指数谱,只需要对这个参数做循环,记录下原来的程序中每个值对应的最后时间的三个数值即可,这是因为我们按照这个程序的思路,最后一刻的时间的三个指数才是准确的哦(这是这个程序的核心思想,时间序列的不断迭代,为了达到平衡状态,也就是某个attractor的指数谱平稳或者收敛状态,必须延长积分时间和缩小积分步长,达到这点你首先要明白积分时间和步长选择多少合适,比如看折这个attrator下的指数谱在设定的时间和步长的收敛情况,也就是指数谱的平滑情况),并且如果要想得到更为精确的最后的指数,需要对积分步长 tstep=0.5让它足够的小,例如取tstep=0.01,最后的时间tend=200足够的长,例如取tend=10000或者tend=10^8,但是这样会time-consuming!再有,一般的积分的时候,例如本程序利用的是ode45,那么就会产生transient response,也就是说从积分轨线从初始值出发到attracting on the orbits 需要一段时间,that is, transient response! (你要明白我们计算Lyapunov指数指的是某个attractor的指数,而不是某个轨线的指数,只有attracting on the orbits 才能用于计算哦),所以我们必须去掉这一块transient response,而只计算去掉transient response之后的部分,这样计算出来的平均数(Lyapunov指数就是\sigma(log(dx_n/dx_0))/n n\rightarrow inf, 这个计算公式对于任何的动力系统来说都是永远不变的哦) 才会更准确,但是很可惜,这个程序没有做到这一点(这就是为什么你看到在tend比较小的时候, 三条指数谱出现震荡的缘故,但是tend比较大的时候,就会出现平衡的,收敛的轨线的缘故。并且对于某些系统而言,如果取非常小的tend,往往会导致错误的结果,比如有些指数谱可能大于零的,但是一旦取tend非常大或者除掉transient response 之后,发现这条大于零的指数谱却趋向于0<limit cycles>或者穿越0变为负的<periodic>了,这样就会导致你的错误判断!!如果你的编程能力不错,你可以在源程序上改进这一点,甚至我认为你必须改正这一点!)。
注意:这里保存数组时需要做四列数值,假设例子如下:
参数 指数1 指数2 指数3
1 0.01 0 -14.00
1.1 0.0110 -14.10
......
如何对这个程序修改看各位的编程能力,呵呵,说白了,其实是修改程序的能力!
网址是http://www.mathworks.com/matlabc ... v-exponents-for-ode
或者是google搜索:Lyapunov exponents matlab 第一项就是!
顺便说一下,很多优秀的程序都可以在mathworks这个网站的File Exchage 板块中找到!为何不试试呢?劝各位初学者不要一味的依赖于别人的程序,自己动手搜索,自己消化吸收别人的编程思想,这样入手更快一些!自己的永远是自己的!
欢迎各位评论我的个人的观点!
liliangbiao
发表于 2011-4-24 02:46
回复 12 # yufeiyfyf 的帖子
这个程序的道理我实在是没有读懂,从我读研究生开始都有这个程序,我不知道这个程序是否正确!?
ruxiaoguo
发表于 2012-2-29 09:37
我现在也遇到这个问题,不知你的问题解决没?可否提供一下随系统参数变化的指数谱?
tear
发表于 2012-3-13 14:45
在做duffing方程的LE,怎么也弄不出来,谁的程序好使了发一个出来呀
wasabi2008
发表于 2012-3-29 18:49
回复 26 # yufeiyfyf 的帖子
LZ 能把您完整的程序发我一份吗 我邮箱444802641@qq.com 多谢了
a139
发表于 2012-5-9 10:39
楼主辛苦了,顶起来
微风breeze
发表于 2012-5-19 11:53
做LE随参数变化的曲线,如果最终时间稍微取长一点,会算的非常慢(PS:我的是11维的),现在我都不敢算了
微风breeze
发表于 2012-5-20 10:32
本帖最后由 微风breeze 于 2012-5-20 10:32 编辑
我觉着这程序有一点问题,
d=3; %维数
Sum=zeros(1,d);
n=0; %总的迭代计数
k=0; %对结果有作用的迭代计数
xData=[];
yData=[];
T1=InitialTime;
T2=T1+Iteration;
TSpan=;
options=odeset('RelTol',1e-5,'AbsTol',1e-6);
for B=linspace(0,40,100);
lp=0;
这一句应该放在Sum=zeros(1,d);前面,这样每一个参数值对应的Lyapunov指数取出后,将循环中的数据重置为初始值。
程兴超
发表于 2012-9-1 21:46
有没有关于这个的fortran语言编写的,我是个菜鸟,其它的看不懂,谢谢
一生有你
发表于 2014-5-17 10:48
yufeiyfyf 发表于 2011-3-27 20:34
经过不懈努力,今天晚上终于弄出来了,效果非常不错。看lorenz吸引子随参数R变化的指数谱图。
能给我发一份您的程序吗,看了很久没做出来,谢谢了2542015960@qq.com
mumianhua
发表于 2014-6-9 16:37
yufeiyfyf 发表于 2011-3-26 10:31
回复 7 # octopussheng 的帖子
你给我的这个链接程序,仍然只是求最大指数的,是随时间变化的指数图形,看 ...
您好 麻烦您能分享一下你的Lyapunov程序吗??谢谢 邮箱 59061329@qq.com
shoshanafen
发表于 2014-6-10 00:30
yufeiyfyf 发表于 2011-3-26 15:41
% 计算duffing吸引子的Lyapunov指数谱,随参数B变化
clear all;
clc;
12楼的duffing程序最后做出来没有??
mumianhua
发表于 2014-6-10 21:47
版主 能把你这个程序发给为我一份吗? 学习学习谢谢 327105073@qq.com
shoshanafen
发表于 2014-6-10 23:32
yufeiyfyf 发表于 2011-3-26 15:41
% 计算duffing吸引子的Lyapunov指数谱,随参数B变化
clear all;
clc;
请问你这个函数后来调试出来没有??能不能发我一份1600220306@qq.com,菜鸟,刚起步,很多不懂,望指教!!谢谢