matlab计算Rossler 吸引子的李雅普诺夫指数

合集下载

Lyapunov指数的计算方法

Lyapunov指数的计算方法

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

关于连续系统LE的计算,主要以定义方法、Jacobian方法做主要介绍内容。

(1)定义法—对H堆连续动力系統z = 在—OBJ孙味“为中心.|拆(心0)||为丰笹啟存«堆的球面*施著时间的演化,在t时討该球而0P变形为M继的椭球厨・设滾椭域面的第/ 个坐标轴方向的半轴长対卩兀|,则诙系统第i个指数対*此即连续系统Lyapunov揩较飽定冥・弼计尊时・取|处(心0)[为岀W为常数),以孔为球心・欧几里篇范敢为山的正衮矢量集仙测,…叮为初始球.由非线性徴分方崔“尸㈤可以分别计算出点細血创、引他、r引址经过时间t后淺化的轨迹・役其终了点分别为珊、砒、f 仙则令石f 陶一心■处严=甩-和,r 亦耳国=略一報#则可得新的矢重棄叶禺巴…后畀}・由于各牛妥臺在演化过程中舌焙向着是大的UapurOT IS数方何靠掘,因此需要通过Schimdt IE交化不断地讨新矢量逬行置换.SP Wolf to文章中提出的GSR^法.表述如下:播着以他为球心,疤数対(I的正奁矢臺料创巴叫叫…伽严;为祈球继续进行演出设演化至N步时,得到矢董慕冈㈤出巴…耳僅牛且N足够大,这可以得到Lyapunov 扌鐵的近似计算公式三实际计算时,取为1・定义法求解Lyapunov 指数JPG关于定义法求解的程序,和matlab板块的连续系统LE求解程序”差不多。

以Rossie啄统为例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的三个列向量为相互正交的单位向量丫 = [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) = 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;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 = 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(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指数Lyapu nov1(i) = lp(1)/(tstart);Lyapu nov2(i) = lp(2)/(tstart);Lyapu nov3(i) = lp(3)/(tstart); y(4:12) = y0';end%作Lyapunov指数谱图i = 1:iteratetimes;plot(i,Lyap uno v1,i,Lyap uno v2,i,Lyap unov3)程序中用到的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,l);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系统的LE 为------- 0.063231 0.092635 -9.8924Wolf文章中计算得到的Rossler系统的LE为-------- 0.09 0 -9.77需要注意的是一一定义法求解的精度有限,对有些系统的计算往往出现计果和理论值有偏差的现象。

chen系统李雅普诺夫指数的matlab源代码

chen系统李雅普诺夫指数的matlab源代码

chen系统李雅普诺夫指数的matlab源代码以下是计算 Chen 系统的李雅普诺夫指数的 Matlab 源代码。

假设我们要计算的是 Chen 系统:```f = @(t, y) [-y(2); y(1)-y(2)^2/2];y0 = [1; 0];tspan = [0 10];y0 = f(tspan, y0);[t, y] = ode45(f, tspan, y0);Ly = ode2cs(f, [0 10], [0 1], "的稳定性分析");```其中,`f`是 Chen 系统的函数,`y0`是系统的初值,`tspan`是时间范围,`y`是系统的状态变量。

`Ly`是李雅普诺夫指数,它表示系统的稳定性。

Matlab 代码的具体步骤如下:1. 定义 Chen 系统的函数`f`,并设置初值`y0`。

2. 使用`ode45`函数求解 Chen 系统的 ODE。

3. 使用`ode2cs`函数计算李雅普诺夫指数`Ly`。

下面是完整的 Matlab 源代码:```% Chen 系统李雅普诺夫指数的 Matlab 源代码% 定义 Chen 系统的函数f = @(t, y) [-y(2); y(1)-y(2)^2/2];% 设置初值y0 = [1; 0];% 设置时间范围tspan = [0 10];% 使用 ode45 求解 Chen 系统的 ODE[t, y] = ode45(f, tspan, y0);% 计算李雅普诺夫指数Ly = ode2cs(f, [0 10], [0 1], "的稳定性分析");% 输出结果disp(["李雅普诺夫指数为:", num2str(Ly)]);```以上代码可以得到李雅普诺夫指数`Ly`的值,如果`Ly`的值大于0,表示系统是混沌的,否则表示系统是稳定的。

-Lyapunov指数的计算方法

-Lyapunov指数的计算方法

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

关于连续系统LE的计算,主要以定义方法、Jacobian方法做主要介绍内容。

(1)定义法定义法求解Lyapunov指数.JPG关于定义法求解的程序,和matlab板块的“连续系统LE求解程序”差不多。

以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 = zeros(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;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 = 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(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);lp = lp+log(abs(mod));%三个Lyapunov指数Lyapunov1(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正交化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];计算得到的Rossler系统的LE为———— 0.063231 0.092635 -9.8924Wolf文章中计算得到的Rossler系统的LE为————0.09 0 -9.77需要注意的是——定义法求解的精度有限,对有些系统的计算往往出现计果和理论值有偏差的现象。

rossler微分方程组matlab

rossler微分方程组matlab

一、引言Rossler微分方程组是混沌动力系统的一个经典模型,由德国数学家Rossler在1976年提出。

这个方程组描述了一个三维空间中的混沌运动,对于非线性动力学和混沌理论的研究具有重要意义。

在数学建模和工程应用中,对Rossler微分方程组的数值求解和仿真分析也具有重要意义。

而在数值求解中,Matlab作为一个功能强大的数学分析软件,能够很好地发挥作用,本文将结合Rossler微分方程组的相关理论和Matlab的数值求解技巧,介绍如何使用Matlab对Rossler微分方程组进行仿真分析。

二、Rossler微分方程组的数学模型1. Rossler方程的形式Rossler微分方程组由下列三个微分方程组成:dx/dt = - y - zdy/dt = x + aydz/dt = b + z(x - c)其中,x、y、z是三个未知函数,t是自变量,a、b、c是模型中的参数,通常取a=0.2,b=0.2,c=5.7。

Rossler方程组具有混沌特性,其解在相空间中呈现出复杂的、不可预测的运动轨迹。

2. Rossler系统的特性Rossler系统具有混沌、奇点和吸引子等重要特性,其中混沌现象是其最为显著的特征之一。

混沌运动是指一种复杂、无序、无规律的非周期性运动行为,通常表现为对初始条件敏感和长时间运动的随机性。

三、Matlab数值求解Rossler微分方程组1. Matlab对微分方程组的求解在Matlab中,可以使用ode45等数值求解器对微分方程组进行求解。

以Rossler微分方程组为例,使用Matlab进行数值求解的一般步骤如下:(1)定义微分方程组:将微分方程组写成一个m文件;(2)选择数值求解器:在m文件中调用Matlab中的数值求解器,如ode45;(3)设定初值和积分区间:设置初值和积分区间,并定义求解选项;(4)调用数值求解器:调用ode45等数值求解器,得到微分方程组的数值解。

2. Matlab对Rossler微分方程组的仿真分析使用Matlab对Rossler微分方程组进行仿真分析,可以得到系统的相图、时间序列图、Lyapunov指数等重要结果。

matlab编写的Lyapunov指数计算程序

matlab编写的Lyapunov指数计算程序
% J = | r-z -1 -x |
% | y x -b |
%
% Then, the variational equation has a form:
%
% F = J*Y
% where Y is a square matrix with the same dimension as J.
% Corresponding m-file:
for l=1:n1 gsc(k)=gsc(k)+y(n1*j+l)*y(n1*k+l); end;
end;
for k=1:n1
for l=1:(j-1)
y(n1*j+k)=y(n1*j+k)-gsc(l)*y(n1*l+k);
end;
end;
znorm(j)=0.0;
for k=1:n1 znorm(j)=znorm(j)+y(n1*j+k)^2; end;
% stept - step on t-variable for Gram-Schmidt renormalization procedure.
% tend - finish value of time
% ystart - start point of trajectory of ODE system.
while calculation_progress == 1
[T,Y] = integrator(DS(1).method_int,@ode_lin,[t tt],y,options,P,n,neq,n_exp);
first_call = 0;
if calculation_progress == 99, break; end;

基于MATLAB的李雅普诺夫第二法稳定性分析

基于MATLAB的李雅普诺夫第二法稳定性分析

基于MATLAB的李雅普诺夫第二法稳定性分析引言:对于一个给定的控制系统,稳定性是系统的一个重要特性。

稳定性是系统正常工作的前提,是系统的一个动态属性。

在控制理论工程中,无论是调节器理论、观测器理论还是滤波预测、自适应理,都不可避免地要遇到系统稳定性问题,而且稳定性分析的复杂程度也在急剧增长。

当已知一个系统的传递函数或状态空间表达式时, 可以对其系统的稳定性进行分析;当系统的阶次较高时,分析、计算的工作量很大, 给系统的分析带来很大困难。

运用MATLAB 软件,其强大的科学计算能力和可视化编程功能, 为控制系统稳定性分析提供了强有力的工具。

一.MATLAB 语言简介MATLAB 是MATrix LABoratory 的缩写, 它是MA TLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。

它具有强大的矩阵计算能力和良好的图形可视化功能, 为用户提供了非常直观和简洁的程序开发环境, 因此被称为第四代计算机语言。

MA TLAB 发展至今, 现已集成了许多工具箱, 一般来说, 它们都是由特定领域的专家开发的, 用户可以直接是用工具箱学习、应用和评估不同的方法而不需要自己编写代码,大大提高了分析运算的效率,为此MA TLAB 语言在控制工程领域已获得了广泛地应用。

二.控制系统稳定性的基本概念稳定性是控制系统的重要特性, 也是系统能够正常运行的首要条件。

如何分析系统的稳定性并提出保证系统稳定的措施, 是自动控制理论的基本任务之一。

1892年,俄国数学家李雅普诺夫(Lyaponov)提出了分析稳定性的两种方法。

第一种方法,通过对线性化系统特征方程的根的分析情况来判断稳定性,称为间接法。

此时,非线性系统必须先线性近似,而且只能使用于平衡状态附近。

第二种方法,从能量的观点对系统的稳定性进行研究,称为直接法,对线性、非线性系统都适用。

Lyapunov指数的计算方法

Lyapunov指数的计算方法

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

关于连续系统LE的计算,主要以定义方法、Jacobian方法做主要介绍内容。

(1)定义法定义法求解Lyapunov指数.JPG关于定义法求解的程序,和matlab板块的“连续系统LE求解程序”差不多。

以Rossler系统为例Rossler系统微分方程定义程序function dX = Rossler_ly(t,X)% Rossler吸引子,用来计算Lyapunov指数% a=,b=,c=% dx/dt = -y-z,% dy/dt = x+ay,% dz/dt = b+z(x-c),a = ;b = ;c = ;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) = 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 = ;b = ;c = ;y = zeros(12,1);% 初始化输入y(1:3) = yinit;y(4:12) = orthmatrix;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 = 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(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);lp = lp+log(abs(mod));%三个Lyapunov指数Lyapunov1(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正交化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];计算得到的Rossler系统的LE为————Wolf文章中计算得到的Rossler系统的LE为————0需要注意的是——定义法求解的精度有限,对有些系统的计算往往出现计果和理论值有偏差的现象。

Matlab画Lorenz系统的最大李雅普诺夫指数图学习资料

Matlab画Lorenz系统的最大李雅普诺夫指数图学习资料
grid on;
4、“体验化”消费
除了“漂亮女生”形成的价格,优惠等条件的威胁外,还有“碧芝”的物品的新颖性,创意的独特性等,我们必须充分预见到。结果图
与此同时,上海市工商行政管理局也对大学生创业采取了政策倾斜:凡高校毕业生从事个体经营的,自批准经营日起,1年内免交登记注册费、个体户管理费、集贸市场管理费、经济合同鉴证费、经济合同示范文本工本费等,但此项优惠不适用于建筑、娱乐和广告等行业。
(2)文化优势plot(b,Z,'-');
此次调查以女生为主,男生只占很少比例,调查发现58%的学生月生活费基本在400元左右,其具体分布如(图1-1)title('JD_{1}系统最大lyapunov指数')
加拿大beadworks公司就是根据年轻女性要充分展现自己个性的需求,将世界各地的珠类饰品汇集于“碧芝自制饰品店”内,由消费者自选、自组、自制,这样就能在每个消费者亲手制作、充分发挥她们的艺术想像力的基础上,创作出作品,达到展现个性的效果。xlabel('parameter b'),ylabel('The largest Lyapunov exponents');
x1=x+(d0/d1)*(x1-x);
y1=y+(d0/d1)*(y1-y);
z1=z+(d0/d1)*(z1-z);
if i>50
lsum=lsum+log(d1/d0);
当然,在竞争日益激烈的现代社会中,创业是件相当困难的事。我们认为,在实行我们的创业计划之前,我们首先要了解竞争对手,吸取别人的经验教训,制订相应竞争的策略。我相信只要我们的小店有自己独到的风格,价格优惠,服务热情周到,就一定能取得大多女孩的信任和喜爱。end

求最大李雅普诺夫指数的matlab程序

求最大李雅普诺夫指数的matlab程序

程序一function dx=Lorenz(t,x);dx(1,1)=10*(x(2)-x(1));dx(2,1)=x(1)*(30-x(3))-x(2);dx(3,1)=x(1)*x(2)-8/3*x(3);dx(4,1)=0;dx(5,1)=0;dx(6,1)=0;function lambda_1=lyapunov_wolf1(data,N,m,tau,P)% 该函数用来计算时间序列的最大Lyapunov 指数--Wolf 方法% m: 嵌入维数% tau:时间延迟% data:时间序列% N:时间序列长度% P:时间序列的平均周期,选择演化相点距当前点的位置差,即若当前相点为I,则演化相点只能在|I-J|>P的相点中搜寻% lambda_1:返回最大lyapunov指数值%**************************************************************************% ode计算整数阶系统的时间序列%******************************************************************delt_t1 = 0.001;t1 = 0:delt_t1:60;[tt1,y1]=ode45(@lorenz,t1,[-1,0,1]);xx1 = y1(:,1)';x1 = spline(tt1, xx1, t1);data= x1(20000:10:60000);%采样N=length(data);m=3;tau=11;%*****************************************************% FFT计算平均周期%**********************************************************x=data;xPower=abs(fft(x)).^2;NN=length(xPower);xPower(1)=[];%去除直流分量NN=floor(NN/2);xPower=xPower(1:NN);freq=(1:NN)/NN*0.5;[mP,index]=max(xPower);P=index;%*************************************************************min_point=1 ; %&&要求最少搜索到的点数MAX_CISHU=5 ; %&&最大增加搜索范围次数%FL YINGHAWK% 求最大、最小和平均相点距离max_d = 0; %最大相点距离min_d = 1.0e+100; %最小相点距离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 + (Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,j));endd = sqrt(d);if max_d < dmax_d = d;endif min_d > dmin_d = d;endavg_dd = avg_dd + d;endendavg_d = 2*avg_dd/(M*(M-1)); %平均相点距离dlt_eps = (avg_d - min_d) * 0.02 ; %若在min_eps~max_eps中找不到演化相点时,对max_eps的放宽幅度min_eps = min_d + dlt_eps / 2 ; %演化相点与当前相点距离的最小限max_eps = min_d + 2 * dlt_eps ; %&&演化相点与当前相点距离的最大限% 从P+1~M-1个相点中找与第一个相点最近的相点位置(Loc_DK)及其最短距离DK DK = 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));endd = sqrt(d);if (d < DK) & (d > min_eps)DK = d;Loc_DK = i;endend% 以下计算各相点对应的李氏数保存到lmd()数组中% i 为相点序号,从1到(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)-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点的最短距离:要求距离在指定距离范围内尽量短,与DK1的角度最小 point_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 = 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 %&&新夹角小于过去已找到的相点的夹角,保留 cos_sita = CTH;Loc_DK = j;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))*(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)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以上是计算最大李氏指数的程序,可以运行。

求最大李雅普诺夫指数的matlab程序

求最大李雅普诺夫指数的matlab程序

程序一function dx=Lorenz(t,x);dx(1,1)=10*(x(2)-x(1));dx(2,1)=x(1)*(30-x(3))-x(2);dx(3,1)=x(1)*x(2)-8/3*x(3);dx(4,1)=0;dx(5,1)=0;dx(6,1)=0;function lambda_1=lyapunov_wolf1(data,N,m,tau,P)% 该函数用来计算时间序列的最大Lyapunov 指数--Wolf 方法% m: 嵌入维数% tau:时间延迟% data:时间序列% N:时间序列长度% P:时间序列的平均周期,选择演化相点距当前点的位置差,即若当前相点为I,则演化相点只能在|I-J|>P的相点中搜寻% lambda_1:返回最大lyapunov指数值%**************************************************************************% ode计算整数阶系统的时间序列%******************************************************************delt_t1 = 0.001;t1 = 0:delt_t1:60;[tt1,y1]=ode45(@lorenz,t1,[-1,0,1]);xx1 = y1(:,1)';x1 = spline(tt1, xx1, t1);data= x1(20000:10:60000);%采样N=length(data);m=3;tau=11;%*****************************************************% FFT计算平均周期%**********************************************************x=data;xPower=abs(fft(x)).^2;NN=length(xPower);xPower(1)=[];%去除直流分量NN=floor(NN/2);xPower=xPower(1:NN);freq=(1:NN)/NN*0.5;[mP,index]=max(xPower);P=index;%*************************************************************min_point=1 ; %&&要求最少搜索到的点数MAX_CISHU=5 ; %&&最大增加搜索范围次数%FL YINGHAWK% 求最大、最小和平均相点距离max_d = 0; %最大相点距离min_d = 1.0e+100; %最小相点距离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 + (Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,j));endd = sqrt(d);if max_d < dmax_d = d;endif min_d > dmin_d = d;endavg_dd = avg_dd + d;endendavg_d = 2*avg_dd/(M*(M-1)); %平均相点距离dlt_eps = (avg_d - min_d) * 0.02 ; %若在min_eps~max_eps中找不到演化相点时,对max_eps的放宽幅度min_eps = min_d + dlt_eps / 2 ; %演化相点与当前相点距离的最小限max_eps = min_d + 2 * dlt_eps ; %&&演化相点与当前相点距离的最大限% 从P+1~M-1个相点中找与第一个相点最近的相点位置(Loc_DK)及其最短距离DK DK = 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));endd = sqrt(d);if (d < DK) & (d > min_eps)DK = d;Loc_DK = i;endend% 以下计算各相点对应的李氏数保存到lmd()数组中% i 为相点序号,从1到(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)-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点的最短距离:要求距离在指定距离范围内尽量短,与DK1的角度最小 point_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 = 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 %&&新夹角小于过去已找到的相点的夹角,保留 cos_sita = CTH;Loc_DK = j;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))*(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)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以上是计算最大李氏指数的程序,可以运行。

matlab求解李雅普诺夫方程

matlab求解李雅普诺夫方程

matlab求解李雅普诺夫方程
MATLAB求解李雅普诺夫方程
李雅普诺夫方程是一种描述动力系统稳定性的方程,MATLAB可以用于求解该方程。

在MATLAB中,可以使用ode45函数求解李雅普诺夫方程。

使用ode45函数求解李雅普诺夫方程的步骤如下:
1. 定义方程:需要将李雅普诺夫方程表示为一组一阶微分方程的形式。

例如,对于一个二阶李雅普诺夫方程,可以将其表示为两个一阶微分方程的形式。

2. 编写MATLAB代码:在MATLAB中,可以编写代码来求解定义好的李雅普诺夫方程。

3. 运行代码:运行MATLAB代码,可以得到李雅普诺夫方程的解。

需要注意的是,在使用ode45函数求解李雅普诺夫方程时,需要定义好初值条件。

初值条件是指在某个时间点,系统的状态(例如位置、速度等)的值。

使用MATLAB求解李雅普诺夫方程可以帮助研究动力系统的稳定性,对于工程应用具有重要意义。

matlab吸引域估计

matlab吸引域估计

Matlab吸引域估计介绍吸引域估计是一种用于评估动力系统稳定性的方法。

在控制系统设计和动力系统实验中,吸引域估计可以提供重要的信息,用于判断系统的稳定性和预测系统的行为。

Matlab是一个强大的数值计算和仿真环境,提供了丰富的工具和函数来进行吸引域估计的研究和实现。

吸引域估计的概念吸引域是指一个动力系统在经过一段时间之后,所有初始条件最终会收敛到的稳定区域。

吸引域估计的目标是确定这个稳定区域的范围和形状。

吸引域估计可以通过数学方法、仿真实验和实际观测来进行。

Matlab中的吸引域估计函数Matlab提供了多个函数和工具箱来进行吸引域估计。

常用的吸引域估计函数包括:1. lyapunov函数:用于计算连续时间系统的李雅普诺夫(lyapunov)方程的解,并从中估计系统的吸引域。

2. dlyap函数:用于计算离散时间系统的李雅普诺夫方程的解,并从中估计系统的吸引域。

3. ode45函数:用于求解常微分方程,可以通过指定初始条件来估计系统的吸引域。

4. simulink工具箱:提供了一种建模和仿真动力系统的方法,可以通过仿真实验来估计系统的吸引域。

吸引域估计的方法和技术吸引域估计可以使用多种方法和技术。

以下是常用的吸引域估计方法和技术:1. 基于数学模型的吸引域估计在已知系统的数学模型的情况下,可以使用数学分析的方法来估计系统的吸引域。

这些方法包括李雅普诺夫函数、特征值分析和状态空间分析等。

2. 基于仿真实验的吸引域估计如果系统的数学模型未知或过于复杂,可以使用仿真实验来估计系统的吸引域。

通过在Matlab中建立系统的仿真模型,并设置不同的初始条件,可以通过观察系统的运行轨迹来估计系统的吸引域。

3. 基于实际观测的吸引域估计在某些情况下,可以通过实际观测系统的行为来估计系统的吸引域。

例如,可以通过传感器测量系统的输出,并将这些测量值与已知的吸引域进行比较,从而估计系统的吸引域。

吸引域估计的应用吸引域估计在控制系统设计、动力系统分析和模式识别等领域有着广泛的应用。

求最大李雅普诺夫指数的matlab程序

求最大李雅普诺夫指数的matlab程序

程序一funct‎i on dx=Loren‎z(t,x);dx(1,1)=10*(x(2)-x(1));dx(2,1)=x(1)*(30-x(3))-x(2);dx(3,1)=x(1)*x(2)-8/3*x(3);dx(4,1)=0;dx(5,1)=0;dx(6,1)=0;funct‎i on lambd‎a_1=lyapu‎n ov_w‎o lf1(data,N,m,tau,P)% 该函数用来‎计算时间序‎列的最大L‎y apun‎o v 指数--Wolf 方法% m:嵌入维数% tau:时间延迟% data:时间序列% N:时间序列长‎度% P:时间序列的‎平均周期,选择演化相‎点距当前点‎的位置差,即若当前相‎点为I,则演化相点‎只能在|I-J|>P的相点中‎搜寻% lambd‎a_1:返回最大l‎y apun‎o v指数值‎%**************************************************************************% ode计算‎整数阶系统‎的时间序列‎%******************************************************************delt_‎t1 = 0.001;t1 = 0:delt_‎t1:60;[tt1,y1]=ode45‎(@loren‎z,t1,[-1,0,1]);xx1 = y1(:,1)';x1 = splin‎e(tt1, xx1, t1);data= x1(20000‎:10:60000‎);%采样N=lengt‎h(data);m=3;tau=11;%*****************************************************% FFT计算‎平均周期%**********************************************************x=data;xPowe‎r=abs(fft(x)).^2;NN=lengt‎h(xPowe‎r);xPowe‎r(1)=[];%去除直流分‎量NN=floor‎(NN/2);xPowe‎r=xPowe‎r(1:NN);freq=(1:NN)/NN*0.5;[mP,index‎]=max(xPowe‎r);P=index‎;%*************************************************************min_p‎o int=1 ; %&&要求最少搜‎索到的点数‎MAX_C‎I SHU=5 ; %&&最大增加搜‎索范围次数‎%FLYIN‎G HAWK‎% 求最大、最小和平均‎相点距离max_d‎= 0; %最大相点距‎离min_d‎= 1.0e+100; %最小相点距‎离avg_d‎d = 0;Y=recon‎s titu‎t ion(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 + (Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,j));endd = sqrt(d);if max_d‎< dmax_d‎= d;endif min_d‎> dmin_d‎= d;endavg_d‎d = avg_d‎d + d;endendavg_d‎= 2*avg_d‎d/(M*(M-1)); %平均相点距‎离dlt_e‎p s = (avg_d‎- min_d‎) * 0.02 ; %若在min‎_eps~max_e‎p s中找不‎到演化相点‎时,对max_‎e ps的放‎宽幅度min_e‎p s = min_d‎+ dlt_e‎p s / 2 ; %演化相点与‎当前相点距‎离的最小限‎max_e‎p s = min_d‎+ 2 * dlt_e‎p s ; %&&演化相点与‎当前相点距‎离的最大限‎% 从P+1~M-1个相点中‎找与第一个‎相点最近的‎相点位置(Loc_D‎K)及其最短距‎离DK DK = 1.0e+100; %第i个相点‎到其最近距‎离点的距离‎Loc_D‎K = 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));endd = sqrt(d);if (d < DK) & (d > min_e‎p s)DK = d;Loc_D‎K = i;endend% 以下计算各‎相点对应的‎李氏数保存‎到lmd()数组中% i 为相点序号‎,从1到(M-1),也是i-1点的演化‎点;Loc_D‎K为相点i‎-1对应最短‎距离的相点‎位置,DK为其对‎应的最短距‎离% Loc_D‎K+1为Loc‎_DK的演‎化点,DK1为i‎点到Loc‎_DK+1点的距离‎,称为演化距‎离% 前i个lo‎g2(DK1/DK)的累计和用‎于求i点的‎l ambd‎a值sum_l‎m d = 0 ; % 存放前i个‎l og2(DK1/DK)的累计和for i = 2 : (M-1) % 计算演化距‎离DK1 = 0;for k = 1 : mDK1 = DK1 + (Y(k,i)-Y(k,Loc_D‎K+1))*(Y(k,i)-Y(k,Loc_D‎K+1));endDK1 = sqrt(DK1);old_L‎o c_DK‎= Loc_D‎K ; % 保存原最近‎位置相点old_D‎K=DK;% 计算前i个‎l og2(DK1/DK)的累计和以‎及保存i点‎的李氏指数‎if (DK1 ~= 0)&( DK ~= 0)sum_l‎m d = sum_l‎m d + log(DK1/DK) /log(2);endlmd(i-1) = sum_l‎m d/(i-1);% 以下寻找i‎点的最短距‎离:要求距离在‎指定距离范‎围内尽量短‎,与DK1的‎角度最小 point‎_num = 0 ; % &&在指定距离‎范围内找到‎的候选相点‎的个数cos_s‎i ta = 0 ; %&&夹角余弦的‎比较初值——要求一定是‎锐角zjfwc‎s=0 ;%&&增加范围次‎数while‎(point‎_num == 0)% * 搜索相点for j = 1 : (M-1)if abs(j-i) <=(P-1) %&&候选点距当‎前点太近,跳过!conti‎n ue;end%*计算候选点‎与当前点的‎距离dnew = 0;for k = 1 : mdnew = dnew + (Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,j));enddnew = sqrt(dnew);if (dnew < min_e‎p s)|( dnew > max_e‎p s ) %&&不在距离范‎围,跳过!conti‎n ue;end%*计算夹角余‎弦及比较DOT = 0;for k = 1 : mDOT = DOT+(Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,old_L‎o c_DK‎+1));endCTH = DOT/(dnew*DK1);if acos(CTH) > (3.14151‎926/4) %&&不是小于4‎5度的角,跳过! conti‎n ue;endif CTH > cos_s‎i ta %&&新夹角小于‎过去已找到‎的相点的夹‎角,保留 cos_s‎i ta = CTH;Loc_D‎K = j;DK = dnew;endpoint‎_num = point‎_num +1;endif point‎_num <= min_p‎o intmax_e‎p s = max_e‎p s + dlt_e‎p s;zjfwc‎s =zjfwc‎s +1;if zjfwc‎s > MAX_C‎I SHU %&&超过最大放‎宽次数,改找最近的‎点DK = 1.0e+100;for ii = 1 : (M-1)if abs(i-ii) <= (P-1) %&&候选点距当‎前点太近,跳过! conti‎n ue;endd = 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_e‎p s)DK = d;Loc_D‎K = ii;endendbreak‎;endpoint‎_num = 0 ; %&&扩大距离范‎围后重新搜‎索cos_s‎i ta = 0;endendend%取平均得到‎最大李雅普‎诺夫指数lambd‎a_1=sum(lmd)/lengt‎h(lmd)funct‎i on X=recon‎s titu‎t ion(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以上是计算‎最大李氏指‎数的程序,可以运行。

matlab练习程序(解西尔维斯特、李雅普诺夫方程)

matlab练习程序(解西尔维斯特、李雅普诺夫方程)

matlab练习程序(解西尔维斯特、李雅普诺夫⽅程)西尔维斯特⽅程的形式:AX+XB=C李雅普诺夫⽅程的形式:AX+XA'=-C这两种⽅程都是已知矩阵A,B,C,求解X的⽅程。

对于这种⽅程有两种⽅法来求解,⼀种是朴素法,⼀种是Bartels-Stewart法。

以西尔维斯特⽅程为例,朴素法是将⽅程写为下列形式进⾏直接求解:其中圆圈中带个X的符号是kron积,vec()是将X或C转换为了n*1的列向量。

该⽅法将原来O(n^3)的问题变为了O(n^6),如果矩阵⽐较⼤,估计速度会⽐较慢。

第⼆种⽅法为Bartels-Stewart法,下⾯以西尔维斯特⽅程为例介绍⼀下:⾸先我们对A和B‘进⾏shur分解:原⽅程可改写为:此时令:得到:此时R和S都是⼀个上三⾓矩阵,我们需要S作为下三⾓矩阵才能⽅便求解。

这⾥的S正好是我们是对B'的shur分解,由于shur分解的特性,shur(B)=VSV',shur(B')=VS'V',所以这⾥再对S求个转置即可。

得到类似下⾯的矩阵⽅程:展开得到:再依次求出y4,y3,y2,y1即可。

matlab代码如下:解西尔维斯特⽅程:clear all;close all;clc;A = rand(2,2);X = rand(2,2);B = rand(2,2);C = A*X+X*B;X%%系统函数X = sylvester(A,B,C)%%朴素法,⾃写kron积IA = [A zeros(2);zeros(2) A];BI = [B(1,1)*eye(2) B(2,1)*eye(2);B(1,2)*eye(2) B(2,2)*eye(2)];X = reshape(inv(IA+BI)*C(:),[2,2])%%朴素法,系统kron积X = reshape(inv(kron(eye(2),A)+kron(B',eye(2)))*C(:),[2,2])%%Bartels–Stewart法[U,R] = schur(A); %schur分解,R是上三⾓[V,S] = schur(B');S = S'; %S是下三⾓F = U'*C*V;%解R*Y + Y*S = F⽅程Y = zeros(2,2);Y(2,2) = F(2,2)/(R(2,2) + S(2,2));Y(2,1) = (F(2,1) - S(2,1)*Y(2,2)) / (S(1,1) + R(2,2));Y(1,2) = (F(1,2) - R(1,2)*Y(2,2)) / (R(1,1) + S(2,2));Y(1,1) = (F(1,1) - R(1,2)*Y(2,1) - S(2,1)*Y(1,2)) / (R(1,1) + S(1,1)); X = U*Y*V'解李雅普诺夫⽅程:clear all;close all;clc;A = rand(2);X = rand(2);C = -(A*X+X*A');X%%系统函数X = lyap(A,C)%%朴素法,⾃写kron积IA = [A zeros(2);zeros(2) A];BI = [A(1,1)*eye(2) A(1,2)*eye(2);A(2,1)*eye(2) A(2,2)*eye(2)];X = reshape(inv(IA+BI)*(-C(:)),[2,2])%%朴素法,系统kron积X = reshape(inv(kron(eye(2),A)+kron(A,eye(2)))*(-C(:)),[2,2]) %%Bartels–Stewart法[U,R] = schur(A); %schur分解,R是上三⾓S = R'; %S是下三⾓F = U'*(-C)*U;%解R*Y + Y*S = F⽅程Y = zeros(2,2);Y(2,2) = F(2,2)/(R(2,2) + S(2,2));Y(2,1) = (F(2,1) - S(2,1)*Y(2,2)) / (S(1,1) + R(2,2));Y(1,2) = (F(1,2) - R(1,2)*Y(2,2)) / (R(1,1) + S(2,2));Y(1,1) = (F(1,1) - R(1,2)*Y(2,1) - S(2,1)*Y(1,2)) / (R(1,1) + S(1,1)); X = U*Y*U'。

matlab求最大李雅普诺夫(Lyapunov)指数程序

matlab求最大李雅普诺夫(Lyapunov)指数程序

求解系统的Lyapunov指数谱程序Lyapunov 指数是描述时序数据所生成的相空间中两个极其相近的初值所产生的轨道,随时间推移按指数方式分散或收敛的平均变化率。

任何一个系统,只要有一个Lyapunov 大于零,就认为该系统为混沌系统。

李雅普诺夫指数是指在相空间中相互靠近的两条轨线随着时间的推移,按指数分离或聚合的平均变化速率。

一 chen系统的Lyapunov指数谱function dX = Chen2(t,X)% Chen吸引子,用来计算Lyapunov指数% dx/dt=a*(y-x)% dy/dt=(c-a)*x+c*y-x*z% dz/dt=x*y-b*zglobal a; % 变量不放入参数表中global b;global c;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);% Lorenz吸引子dX(1) = a*(y-x);dX(2) = (c-a)*x+c*y-x*z;dX(3) = x*y-b*z;% Lorenz吸引子的Jacobi矩阵Jaco = [-a a 0;c-a-z c -x;y x -b];dX(4:12) = Jaco*Y;Z1=[];Z2=[];Z3=[];global a;global b;global c;b=3;c=28;for a=linspace(32,40,100);y=[1;1;1;1;0;0;0;1;0;0;0;1];lp=0;for k=1:200[T,Y] = ode45('Chen2', 1, y);y = Y(size(Y,1),:);y0 = [y(4) y(7) y(10);y(5) y(8) y(11);y(6) y(9) y(12)];y0=GS(y0);mod(1)=norm(y0(:,1));mod(2)=norm(y0(:,2));mod(3)=norm(y0(:,3));lp = lp+log(abs(mod));y0(:,1)=y0(:,1)/mod(1);y0(:,2)=y0(:,2)/mod(2);y0(:,3)=y0(:,3)/mod(3);y(4:12) = y0';endlp=lp/200;Z1=[Z1 lp(1)];Z2=[Z2 lp(2)];Z3=[Z3 lp(3)];enda=linspace(32,40,100);plot(a,Z1,'-',a,Z2,'-',a,Z3,'-');title('Lyapunov exponents of Chen')xlabel('b=3,c=28,parameter a'),ylabel('lyapunov exponents') grid on以上是三个变量的Lyapunov指数谱,下面是最大的Lyapunov指数谱:Z=[];d0=1e-8;for a=linspace(32,40,80)lsum=0;x=1;y=1;z=1;x1=1;y1=1;z1=1+d0;for i=1:100[T1,Y1]=ode45('Chen',1,[x;y;z;a;3;28]);[T2,Y2]=ode45('Chen',1,[x1;y1;z1;a;3;28]);n1=length(Y1);n2=length(Y2);x=Y1(n1,1);y=Y1(n1,2);z=Y1(n1,3);x1=Y2(n2,1);y1=Y2(n2,2);z1=Y2(n2,3);d1=sqrt((x-x1)^2+(y-y1)^2+(z-z1)^2);x1=x+(d0/d1)*(x1-x);y1=y+(d0/d1)*(y1-y);z1=z+(d0/d1)*(z1-z);if i>50lsum=lsum+log(d1/d0);endendZ=[Z lsum/(i-50)];enda=linspace(32,40,80);plot(a,Z,'-');title('Chen 系统最大lyapunov指数')xlabel('parameter a'),ylabel('lyapunov exponents')二模拟 Lorenz 系统最大lyapunov指数谱function ly=jose_ly(b,k)% the largest lyapunov exponent of josephson% k 迭代步数,b 参数% 方程如下:% θ''+G*θ'+sinθ=I+A*sin(ωt)+αsin(βωt) % 变化:% dx=y% dy=-G*y-sin(x)+I+A*sin(w*t)+a*sin(b*w*t) %% Example:% ly=jose_ly(0,800)%% Author:LDYU%Author'semail:*******************.cn%d0=1e-8;ly=0;lsum=0;x=[0;2;b];x1=[d0;2;b];for t=1:k[T1,Y1]=ode45('Josephon',[t-1,t],x);[T2,Y2]=ode45('Josephon',[t-1,t],x1);x=Y1(end,:);x1=Y2(end,:);d1=norm(x-x1);x1=x+(d0/d1)*(x1-x);lsum=lsum+log(d1/d0);endly=lsum/k;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
% 重新定义起始时刻
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);
dX(4:12) = Jaco*Y;
%程序中用到的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);
Lyapunov3(i) = lp(3)/(tstart);
y(4:12) = y0';
end
% 作Lyapunov指数谱图
i = 1:iteratetimes;
plot(i,Lyapunov1,i,Lyapunov2,i,Lyapunov3)
Le1=Lyapunov1(end),Le2=Lyapunov2(end),Le3=Lyapunov3(end)
% 取三个向量的模
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);
title('Lyapunov指数谱图')
end
%计算得到的Rossler系统的LE为———— 0.0992 0.0755 -5.2644
%计算得到的Rossler系统的LE为———— 0.0992 0.0755 -5.2644
function dX = Rossler_ly(t,X)
mod = zeros(3,1);
lp = zeros(3,1);
% 初始化三个Lyapunov指数
Lyapunov1 = zeros(iteratetimes,1);
Lyapunov2 = zeros(iteratetimes,1);
Lyapunov3 = zeros(iteratetimes,1);
a = 0.25;
b = 1;
c = 5.5;
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)];
% 输出向量的初始化,必不可少
mod = zeros(3,1);
lp = zeros(3,1);
% 初始化三个Lyapunov指数
Lyapunov1 = zeros(iteratetimes,1);
Lyapunov2 = zeros(iteratetimes,1);
Lyapunov3 = zeros(iteratetimes,1);
%求解LE代码:
% 计算Rossler吸引子的Lyapunov指数
% Rossler吸引子,用来计算Lyapunov指数
% a=0.25,b=1,c=5.5
% dx/dt = -y-z,
% dy/dt = x+ay,
% dz/dt = b+z(x-c),
y0(:,2) = y0(:,2)/mod(2);
y0(:,3) = y0(:,3)/mod(3);
lp = lp+log(abs(mod));
%三个Lyapunov指数
Lyapunov1(i) = lp(1)/(tstart);
Lyapunov2(i) = lp(2)/(tstart);
y(4:12) = orthmatrix;
tstart = 0; % 时间初始值
tstep = 1e-3; % 时间步长
wholetimes = 1e5; % 总的循环次数
steps = 10; % 每次演化的步数
iteratetimes = wholetimes/steps; % 演化的次数
dX = zeros(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];
clear;
yinit = [1,1,1];
orthmatrix = [1 0 0;
0 1 0;
0 0 1];
a = 0.25;
b = 1;
c = 5.5;
y = zeros(12,1);
% 初始化输入
y(1:3) = yinit;
y(4:12) = orthmatrix;
tstart = 0; % 时间初始值
tstep = 1e-3; % 时间步长
wholetimes = 1e5; % 总的循环次数
steps = 10; % 每次演化的步数
iteratetimes = etimes/steps; % 演化的次数
clear;
yinit = [1,1,1];
orthmatrix = [1 0 0;
0 1 0;
0 0 1];
a = 0.25;
b = 1;
c = 5.5;
y = zeros(12,1);
% 初始化输入
y(1:3) = yinit;
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];
for i=1:iteratetimes
tspan = tstart:tstep:(tstart + tstep*steps);
[T,Y] = ode45('Rossler_ly', tspan, y);
% 取积分得到的最后一个时刻的值
y = Y(size(Y,1),:);
function main
%求解LE代码:
% 计算Rossler吸引子的Lyapunov指数
% Rossler吸引子,用来计算Lyapunov指数
% a=0.25,b=1,c=5.5
% dx/dt = -y-z,
% dy/dt = x+ay,
% dz/dt = b+z(x-c),
for i=1:iteratetimes
tspan = tstart:tstep:(tstart + tstep*steps);
[T,Y] = ode45('Rossler_ly', tspan, y);
% 取积分得到的最后一个时刻的值
function main
相关文档
最新文档