洛伦兹系统李雅普诺夫指数的MATLAB源代码
matlab lorenz模型的状态方程
matlab lorenz模型的状态方程Lorenz模型是一种混沌系统模型,是由Edward Lorenz在1963年提出的。
该模型可以描述一个物理系统中的非线性动力学过程,常常被用来研究气象学和流体力学等领域的相关问题。
在matlab中,Lorenz模型的状态方程可以表示为:dx/dt = σ(y - x)dy/dt = x(ρ - z) - ydz/dt = xy - βz其中,x、y和z分别表示三个物理量的状态变量,例如温度、速度等。
σ、ρ和β则是三个控制参数,用来调节系统的演化过程。
这些参数的选择可以决定系统的稳定性、周期性或混沌性质。
这个状态方程的含义是,三个状态量的变化是由它们之间的相互作用和所受力的影响所决定的。
其中,dx/dt和dy/dt分别表示x和y的变化率,dz/dt则表示z的变化率。
在Lorenz模型中,随着时间的演化,x、y和z的值会不断发生变化,难以预测,从而呈现出混沌的特征。
matlab作为一种强大的数学软件,可以用来求解Lorenz模型的状态方程。
通常情况下,我们可以通过matlab的ODE求解器来求解这个系统,具体步骤如下:1. 定义状态方程和初始条件:我们需要在matlab中利用函数句柄来定义状态方程,同时确定初始条件。
2. 设置ODE求解器:用户需要根据系统的特性来选择最适合的ODE求解器,例如ode45、ode23s等。
3. 求解ODE:利用所选求解器来求解ODE。
通常情况下,matlab还提供了许多其他的函数和工具箱,可以用来展示和分析所得到的结果。
总之,Lorenz模型的状态方程是一种常见的非线性动力学模型,它可以用来描述许多物理系统中的复杂行为。
利用matlab求解Lorenz模型的状态方程,可以帮助我们更好地理解这个系统的演化过程,并且研究它的混沌特性。
李雅普诺夫稳定性的Matlab实现
1 -1 -1
P -1
3
2
-1 2 5
对称矩阵的定号性(正定性)的判定(6/12)
Matlab程序m5-1如下。
P=[1 -1 -1; -1 3 2; -1 2 -5];
1 -1 -1
P -1 3
2
-1 2 5
result_state=posit_def(P); % 采用合同变换法判定矩阵定号性 switch result_state(1:5) % 运用开关语句,分类陈述矩阵正定否的判定结果
对称矩阵的定号性(正定性)的判定(9/12)
函数max()的主要调用格式为: [C,I]=max(A) D=max(A,B)
对第1种调用格式,若输入A为向量,输出的C为向量A的各 元素中最大值,输出I为该最大值在向量中的位置; 若A为矩阵,则C为矩阵A的各列的各元素中最大值,输 出I为这些最大值在各列的位置,这里输出C和I均为1 维数组。 如,执行语句 [C,I]=max([1 -2 3; -4 5 -6]); 后,C和I分别为[1 5 3]和[1 2 1]。
对称矩阵的定号性(正定性)的判定(10/12)
对第2种调用格式的输入A和B须为维数大小相同的矩阵 或向量,输出D为A和B两矩阵同样位置的元素的最大值组 成的矩阵。 如,执行语句 C=max([1 -2 3; -4 5 -6], [-1 2 -3; 4 -5 6]); 后,C为如下矩阵
1 2 3 4 5 6
Ch.5 李雅普诺夫稳定性 分析
目录
概述 5.1 李雅普诺夫稳定性的定义 5.2 李雅普诺夫稳定性的基本定理 5.3 线性系统的稳定性分析 5.4 非线性系统的稳定性分析 5.5 Matlab问题 本章小结
7.李雅普诺夫指数
李雅普诺夫指数与奇怪吸引子
1. 李雅普诺夫指数
2. 菲根鲍姆常数
吸引子
3. 奇怪
奇怪吸引子
利用李雅普诺夫指数λ ,相空间内初始时刻的两点距离将随时间(迭代次数)作指数分离:
在一维映射中λ 只有一个值,而在多维相空间情况下一般就有多个 λi ,而且沿相空间的不同方向,其 λi (i =1,2,…)值一般也不同。
)
exp(00n n λ⋅⋅−≈−n y x y x
面积 。
r <1 时坐标原点是稳定的不动点,当 r >1, 坐标原点为鞍点,两个新平衡点 C 1与 C 2是稳定的焦点。
=24.7368) C 1与 C 2成了不稳定的焦点。
c r r >
奇怪吸引子的最重要特征是对初值的敏感性,初始相互靠近的两条轨线将按指数式规律分离。
但在有限空间中如何保持这样的指数式分离状态? 洛伦兹吸引子有两个不稳定平衡点,因此复杂的相轨线可以随机地在两个中心之间行走。
是否只有一个平衡点的奇怪吸引子呢?
如果有,在有限相空间里如何容纳按指数分离的相轨线?于是就想象伸展开来的相轨线可能产生了某种折叠。
巴克尔变换描写了这种变换:
⎪⎪⎩
⎪⎪⎨⎧⎪⎪⎩⎪⎪⎨⎧
≤≤+<≤==++1212121021
1n n n n n n n x ay x ay y x x ,,
在平面的投影
c =2.6
c =3.5 c =4.1
c =4.18 c =4.21
c =4.6。
用Matlab5.3求解洛伦兹方程
>>O (!) 生成动画 内容如下: 用 "#$% 命令建立一个命令文件为 &’()*$" + (, [ %, (’ [1 !1] , [23, , ) ; ,] - )#".! &)/"0’’ 3, 4] (211) ; ( - ()*$"$0 [ 7 31, 56 31, 7 3!, 3!, 7 21, !1] ( ) ; 56$8 56 895#$0: ;<5%; (( , , ( , , ( , ) ; 9 - =<)%> , : 2) , : 3) , : >) ;)/ ? - 2: 211 ( 9, [1 1 2] , ; /)%5%" 2 + @) ( 56) ; 56$8 895#$0: ;<5%; (: , ( ?) - :"%;/5("; [C, D5=] - :"%;/5("; (C, [’ ( ?)’ ] , ’ ) ; $(E/$%" D5=, &’’$0%38%/ + F(=’ F(=’ "0# ((, ()*$" !) A 循环播放五次 运行后, 旋转显示洛伦兹吸引子图形, 并将每帧图片保存到 <’2 + F(= 到 <’211 + F(= 文件中 + 可用 G$;H0$(5I %)/ 等软件将其生成一个 :$; 动画文件 + (J) 验证 “蝴蝶效应” A 写入 F(= 文件 A 沿 B 轴旋转
Байду номын сангаас
2.期刊论文 周丰.关治洪 洛伦滋混沌吸引子轨道分布精细嵌层结构 -自动化技术与应用2003,22(8)
利用庞加莱映射和相空间重构的方法,研究了洛伦兹方程在混沌状态下的轨道分布,发现其混沌轨道并非乱成一团,而是乱而有序,且拥有精细的嵌层结 构,这从一个全新的角度揭示了混沌运动是内在随机性和规律性的统一体.
求最大李雅普诺夫指数的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以上是计算最大李氏指数的程序,可以运行。
logistic混沌系统的李雅普诺夫指数
logistic混沌系统的李雅普诺夫指数
对于logistic混沌系统,其李雅普诺夫指数(Lyapunov exponent)是用于描述系统混沌特性的重要参数。
具体来说,对于logistic混沌系统,其状态变量x满足以下微分方程:
dx/dt = αx(1 - x)
其中,α是一个正的常数。
通过对该微分方程进行稳定性分析,可以计算得到系统的李雅普诺夫指数。
当α小于某一临界值时,系统的解是稳定的,即系统处于稳定状态;当α大于该临界值时,系统的解变得不稳定,即系统进入混沌状态。
而该临界值与李雅普诺夫指数有关,具体计算方法可以参考相关混沌理论或数值计算方法的文献。
在实际应用中,通过计算李雅普诺夫指数可以判断系统的混沌特性,进一步应用于控制、同步等领域。
同时,也可以利用李雅普诺夫指数研究其他非线性系统,例如神经网络、化学反应等。
因此,李雅普诺夫指数对于理解混沌系统的动态行为和预测系统的长期演化具有重要意义。
用Matlab5.3求解洛伦兹方程
图> ( 的解对初始值高度敏感 , >)
洛伦兹方程的解对初始值有高度敏感性, 为验证这一点, 让我们对 , 的初始值稍作修改, 即由 3 改为 然后求解 B 的数值解 + 由图 > 可知, 3 + 12和 2 + 44, B 的数值解差别越来越大 + 用 "#$% 命令建立一个命令文件 内容为 <’8"08$ + ( , K<; 9)<# )0 A 将各个数值解叠放在一个图形中 [ %, (’ [1 23] , [23, , ) ; L] - )#".! &)/"0’’ 3, 4] ( %, ( , , ’ , ’ ) =<)% L : >) M)<)/’ /’ [ %, (’ [1 23] , [23, , ) ; *] - )#".! &)/"0’’ 3 + 12, 4] ( %, ( , , ’ , ’ ) =<)% * : >) M)<)/’ F’ [ %, (’ [1 23] , [23, , ) ; E] - )#".! &)/"0’’ 2 + 44, 4] ( %, (: , , ’ , ’ ) =<)% E >) M)<)/’ N’
)
引
言
洛伦兹方程是一个常微分方程 (.01) 系统, 用解析法精确求解是不可能的, 只能用计算机数值计算, 最 主要的有欧拉法、 亚当法和龙格 # 库塔法等 ( 但用这些方法都需要编写一段很长的程序, 而且步长取得不恰 当的话, 带来的误差也很大 ( 而利用数学工具 )*+2*- 求解微分方程却是一种较为方便的方法, 不仅求解速度 快, 同时对解决同类问题具有通用性 (
李雅普诺夫指数
1.此指数的定义 2.此指数的划分意义 3.此指数用在混沌中,如何应用 4.此指数在其他方面的应用 5.此指数的几种计算方法
一李雅普诺夫指数的定义
李雅普诺夫指数是指在相空间中相互靠近 的两条轨线随着时间的推移,按指数分离 或聚合的平均变化速率。最大李雅普诺夫 指数定义为 其中,表示时刻最邻近两点间的距离;M 为计算总步数。
在计算Lyapunov指数值的基础上,弄清楚 Lyapunov指数与时间序列结构在较短的时 间范围内稳定的前提条件下,建立 Lyapunov指数一维、二维及三维相空间的 预测模式,综合考虑各种模式的预测结果, 并对相空间模式的预测误差进行估计,最后 作出要素的气候预测。]
2.基于Lyapunov指数谱和Lyapunov指数 谱熵的航空发动机状态识别和故障诊断新 方法。 基于实测的某型航空发动机振动时间序列 求解了系统不同工作状态和故障状态的 Lyapunov指数谱;
3.还可以用在判断混沌神经网络 4.用于围岩系统的载荷演化 还有许多方面的应用
五计算此指数的几种方法
用Logistic映射产生的模拟时间序列数据, 采用两种从实验数据时间序列恢复动力学 的方法,计算混沌吸引子的Lyapunov指数。
一种方法是S.J.Chang和J.Wright提出的混 合嫡法〔8一〕,这种方法特别适合一维 的实验系统。另一种方法是A.wolf提出的 重构吸引子法,在原则上可以计算系统 的全部正Lyapunov指数谱。
三此指数在混沌系统中的应用
混沌运动的基本特点是运动状态对初始条 件的高度敏感性。两个极为靠近的初值所 产生的轨道,随时间推移按指数形式分 离,Lyapunov指数是定量描述这一现象的 量。
对所讨论的Duffing振子,若它的Lyapunov 指数均小于零,则系统处于周期状态:若存 在一个Lyapunov特性指数大于零,就说明 系统是处于混沌状态。这种判别方法计算 简单,物理意义明确,误差小 。
matlab编写的Lyapunov指数计算程序
% | 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程序
程序一functi on 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;functi on lambda_1=lyapun ov_wo lf1(data,N,m,tau,P)% 该函数用来计算时间序列的最大Ly apuno v 指数--Wolf 方法% m:嵌入维数% tau:时间延迟% data:时间序列% N:时间序列长度% P:时间序列的平均周期,选择演化相点距当前点的位置差,即若当前相点为I,则演化相点只能在|I-J|>P的相点中搜寻% lambda_1:返回最大ly apuno v指数值%**************************************************************************% 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_po int=1 ; %&&要求最少搜索到的点数MAX_CI SHU=5 ; %&&最大增加搜索范围次数%FLYING HAWK% 求最大、最小和平均相点距离max_d= 0; %最大相点距离min_d= 1.0e+100; %最小相点距离avg_dd = 0;Y=recons titut 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_dd = avg_dd + d;endendavg_d= 2*avg_dd/(M*(M-1)); %平均相点距离dlt_ep s = (avg_d- min_d) * 0.02 ; %若在min_eps~max_ep s中找不到演化相点时,对max_e ps的放宽幅度min_ep s = min_d+ dlt_ep s / 2 ; %演化相点与当前相点距离的最小限max_ep s = min_d+ 2 * dlt_ep s ; %&&演化相点与当前相点距离的最大限% 从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_ep s)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点的l ambda值sum_lm 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_DK+1))*(Y(k,i)-Y(k,Loc_DK+1));endDK1 = sqrt(DK1);old_Lo c_DK= Loc_DK ; % 保存原最近位置相点old_DK=DK;% 计算前i个l og2(DK1/DK)的累计和以及保存i点的李氏指数if (DK1 ~= 0)&( DK ~= 0)sum_lm d = sum_lm d + log(DK1/DK) /log(2);endlmd(i-1) = sum_lm d/(i-1);% 以下寻找i点的最短距离:要求距离在指定距离范围内尽量短,与DK1的角度最小 point_num = 0 ; % &&在指定距离范围内找到的候选相点的个数cos_si ta = 0 ; %&&夹角余弦的比较初值——要求一定是锐角zjfwcs=0 ;%&&增加范围次数while(point_num == 0)% * 搜索相点for j = 1 : (M-1)if abs(j-i) <=(P-1) %&&候选点距当前点太近,跳过!contin 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_ep s)|( dnew > max_ep s ) %&&不在距离范围,跳过!contin ue;end%*计算夹角余弦及比较DOT = 0;for k = 1 : mDOT = DOT+(Y(k,i)-Y(k,j))*(Y(k,i)-Y(k,old_Lo c_DK+1));endCTH = DOT/(dnew*DK1);if acos(CTH) > (3.14151926/4) %&&不是小于45度的角,跳过! contin ue;endif CTH > cos_si ta %&&新夹角小于过去已找到的相点的夹角,保留 cos_si ta = CTH;Loc_DK = j;DK = dnew;endpoint_num = point_num +1;endif point_num <= min_po intmax_ep s = max_ep s + dlt_ep s;zjfwcs =zjfwcs +1;if zjfwcs > MAX_CI SHU %&&超过最大放宽次数,改找最近的点DK = 1.0e+100;for ii = 1 : (M-1)if abs(i-ii) <= (P-1) %&&候选点距当前点太近,跳过! contin 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_ep s)DK = d;Loc_DK = ii;endendbreak;endpoint_num = 0 ; %&&扩大距离范围后重新搜索cos_si ta = 0;endendend%取平均得到最大李雅普诺夫指数lambda_1=sum(lmd)/length(lmd)functi on X=recons titut 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以上是计算最大李氏指数的程序,可以运行。
用Matlab5_3求解洛伦兹方程
文章编号:1001-2443(2002)04-0335-04用Matlab5.3求解洛伦兹方程吴朝晖, 危启正(安徽师范大学物理与电子信息学院,安徽芜湖 241000)摘 要:洛伦兹吸引子是混沌理论的标志,它是由洛伦兹方程求解而来.本文给出了用MatLab5.3求解该方程的一种方法,并用立体图形动态显示出洛伦兹吸引子.关键词:洛伦兹方程;吸引子;MatLab中图分类号:O415.5 文献标识码:A1 引 言 洛伦兹方程是一个常微分方程(ODE )系统,用解析法精确求解是不可能的,只能用计算机数值计算,最主要的有欧拉法、亚当法和龙格-库塔法等.但用这些方法都需要编写一段很长的程序,而且步长取得不恰当的话,带来的误差也很大.而利用数学工具Matlab 求解微分方程却是一种较为方便的方法,不仅求解速度快,同时对解决同类问题具有通用性.2 洛伦兹方程求解 本文说明用Matlab 工具求解洛伦兹方程的过程,并给出吸引子的三维动态图像.洛伦兹方程如下: dx dt=10(-x +y )dy dt=28x -y -xz dz dt =xy -8z /3(1) 这是一个自洽的方程组,求解过程如下: 为了用matlab 求解,这里将x ,y ,z 表示为y (1),y (2),y (3),即列向量y 中三个分量. (1)建立自定义函数 用edit 命令建立自定义函数名为Lorenz.m ,内容为: function dy =Lorenz (t ,y ) dy =zeros (3,1); %建立一个三维列向量 dy (1)=103(-y (1)+y (2)); dy (2)=283y (1)-y (2)-y (1)3y (3); dy (3)=y (1)3y (2)-83y (3)/3; (2)用ode45命令求解 用edit 命令建立一个命令文件lzdis.m ,内容为 [t ,y ]=ode45(’Lorenz ’,[030],[12,2,9]); %表示在0-30秒内求解,在零时刻设y (1)为12,y (2)为2,y (3)为9. plot (t ,y (:,1)) %显示y (1)即x 与时间的关系图 pause %暂停 plot (t ,y (:,2))%显示y (2)即y 与时间的关系图 pause %暂停 收稿日期:2002-04-19 作者简介:吴朝晖(1971-),男,安徽肥西人,讲师,主要从事应用电子技术的教学和研究工作.第25卷4期2002年12月 安徽师范大学学报(自然科学版)Journal of Anhui Normal University (Natural Science )Vol.25No.4Dec .2002 plot(t,y(:,3))%显示y(3)即z与时间的关系图 pause%暂停 plot3(y(:,1),y(:,2),y(:,3));%显示三分量的关系图,即吸引子 view([20,42]);%设定一个较好的观察角度 (3)求解结果 在matlab窗口中执行lzdis.m文件,结果见图1、图2:图1 y的解与时间的关系图图2 y的三分量间关系图 (4)动态显示吸引子的绘制过程 用edit命令建立一个命令文件lzcomet.m,内容为 [t,y]=ode45(’Lorenz’,[030],[12,2,9]); clf%清除图形 axis([-20,20,-25,25,10,50])%设定合适的坐标范围 view([20,42]);%设定较好的观察角度 hold on%保持坐标轴不变 comet3(y(:,1),y(:,2),y(:,3));%显示吸引子绘制过程633安徽师范大学学报(自然科学版)2002年 (5)生成动画 用edit 命令建立一个命令文件为Lzmovie.m ,内容如下: [t ,y ]=ode45(’Lorenz ’,[050],[12,2,9]); m =moviein (100); ax =[-20,20,-25,25,-10,50] axis (ax ); shading flat ; h =plot3(y (:,1),y (:,2),y (:,3)); for j =1:100 rotate (h ,[001],1.8);%沿Z 轴旋转 axis (ax ); shading flat ; m (:,j )=getframe ; [X ,Map ]=getframe ; imwrite (X ,Map ,[’Lz ’int2str (j )’.bmp ’],’bmp ’); %写入bmp 文件 end movie (m ,5)%循环播放五次 运行后,旋转显示洛伦兹吸引子图形,并将每帧图片保存到lz1.bmp 到lz100.bmp 文件中.可用G ifAni 2mator 等软件将其生成一个gif 动画文件. (6)验证“蝴蝶效应”图3 y (3)的解对初始值高度敏感 洛伦兹方程的解对初始值有高度敏感性,为验证这一点,让我们对y 的初始值稍作修改,即由2改为2.01和1.99,然后求解Z 的数值解.由图3可知,Z 的数值解差别越来越大.用edit 命令建立一个命令文件lzsensi.m ,内容为 clfhold on %将各个数值解叠放在一个图形中[t ,u ]=ode45(’Lorenz ’,[012],[12,2,9]);plot (t ,u (:,3),’Color ’,’r ’)[t ,v ]=ode45(’Lorenz ’,[012],[12,2.01,9]);plot (t ,v (:,3),’Color ’,’b ’)[t ,w ]=ode45(’Lorenz ’,[012],[12,1.99,9]);plot (t ,w (:,3),’Color ’,’k ’)参考文献:[1] 许波,刘征.MatLab 工程数学应用[M].北京:清华大学出版社,2000.[2] 刘华杰.分形艺术(电子版)[M].长沙:湖南电子音像出版社,1997.[3] 赵凯华.从单摆到混沌[J].现代物理知识,1993,6(1).73325卷第4期 吴朝晖, 危启正: 用Matlab5.3求解洛伦兹方程833安徽师范大学学报(自然科学版)2002年SOL VING LORENZ EQUATION WITH MAT LAB5.3WU Zhao2hui, WEI Qi2zheng(Institute of Physics and Electronic Information,Anhui Normal University,Wuhu241000,China)Abstract:Lorenz chaotic attractor is the flag of chao’s theory,it is obtained by solving the Lorenz Equation. We put on a method with Matlab5.3to solve the Lorenz Equation,and use a3D dynamic animation showing the Lorenz attractor.K ey w ords:lorenz equation;lorenz attractor;matlabΞ Ξ Ξ Ξ Ξ Ξ安徽师范大学学报(自然科学版)第六届编委会召开2002年会议 安徽师范大学学报(自然科学版)第六届编委会2002年会议于2002年11月6日下午召开。
Matlab画Lorenz系统的最大李雅普诺夫指数图
Lorenz 系统文档分两个文件方程m文件和计算L指数m文件分开写,复制粘贴即可运行matlab2012a,改写方程文件和参数即可算自己的系统,其中最大L指数用的是经典的柏内庭(G.Benettin)计算方法,准确快速无误!附计算结果图!!方程m文件:function dX = Loren(t,X)global a; % 变量不放入参数表中global b;global c;x=X(1); y=X(2); z=X(3);% Y的三个列向量为相互正交的单位向量% 输出向量的初始化dX = zeros(6,1);% Lorenz吸引子dX(1)=a*(y-x);dX(2)=x*(b-z)-y;dX(3)=x*y-c*z;end计算最大L指数文件Z=[];global a;global b;global c;a=10;c=8/3;d0=1e-7;for b=linspace(0,500,500)lsum=0;x=1;y=1;z=1;x1=1;y1=1;z1=1+d0;for i=1:100[T1,Y1]=ode45('Loren',1,[x;y;z;16;b;4]);[T2,Y2]=ode45('Loren',1,[x1;y1;z1;16;b;4]);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)];endb=linspace(0,500,500);plot(b,Z,'-');title('JD_{1} 系统最大lyapunov指数')xlabel('parameter b'),ylabel('The largest Lyapunov exponents'); grid on;结果图欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。
Matlab画Lorenz系统的最大李雅普诺夫指数图学习资料
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】在数值计算与科学工程计算中,四阶龙格库塔方法是一种常用的数值积分方法,它能够高效地求解常微分方程组。
而洛伦茨方程则是一个经典的混沌动力学系统模型,描述了一种具有确定混沌行为的流体对流系统。
在本文中,我们将探讨如何利用四阶龙格库塔方法求解洛伦茨方程,并使用Matlab进行实现。
1. 洛伦茨方程的数学描述洛伦茨方程是由爱德华·洛伦茨于1963年提出的,它被广泛应用于描述对流系统中的混沌现象。
洛伦茨方程的数学描述如下:$$\frac{dx}{dt} = \sigma (y - x)$$$$\frac{dy}{dt} = x(\rho - z) - y$$$$\frac{dz}{dt} = xy - \beta z$$其中,$x, y, z$分别代表系统中的三个状态变量,$\sigma, \rho, \beta$分别为方程中的参数。
2. 四阶龙格库塔方法的原理四阶龙格库塔方法是一种经典的数值积分方法,它通过迭代的方式逐步逼近微分方程的解。
其原理如下:- 首先根据初始条件,计算出当前状态下的斜率$k1$;- 然后利用$k1$计算出下一个状态的斜率$k2$;- 再利用$k2$计算出下一个状态的斜率$k3$;- 最后利用$k3$计算出下一个状态的斜率$k4$;- 最终根据$k1, k2, k3, k4$计算出下一个状态的值,并更新时间步长。
3. 利用Matlab实现四阶龙格库塔方法求解洛伦茨方程在Matlab中,我们可以利用自带的数值计算库和矩阵运算功能,快速实现四阶龙格库塔方法对洛伦茨方程进行求解。
以下是一个简单的Matlab代码示例:```matlabfunction [t, x, y, z] = solveLorenzEquation(sigma, rho, beta, x0,y0, z0, tspan, h)% 参数设置n = length(tspan);t = zeros(n, 1);x = zeros(n, 1);y = zeros(n, 1);z = zeros(n, 1);% 初始条件t(1) = tspan(1);x(1) = x0;y(1) = y0;z(1) = z0;% 循环迭代for i = 1:n-1k1 = lorenzEquation(t(i), x(i), y(i), z(i), sigma, rho, beta);k2 = lorenzEquation(t(i)+h/2, x(i)+h/2*k1(1), y(i)+h/2*k1(2), z(i)+h/2*k1(3), sigma, rho, beta);k3 = lorenzEquation(t(i)+h/2, x(i)+h/2*k2(1), y(i)+h/2*k2(2), z(i)+h/2*k2(3), sigma, rho, beta);k4 = lorenzEquation(t(i)+h, x(i)+h*k3(1), y(i)+h*k3(2),z(i)+h*k3(3), sigma, rho, beta);t(i+1) = t(i) + h;x(i+1) = x(i) + h/6 * (k1(1) + 2*k2(1) + 2*k3(1) + k4(1));y(i+1) = y(i) + h/6 * (k1(2) + 2*k2(2) + 2*k3(2) + k4(2));z(i+1) = z(i) + h/6 * (k1(3) + 2*k2(3) + 2*k3(3) + k4(3));endendfunction [k] = lorenzEquation(t, x, y, z, sigma, rho, beta)k = zeros(3, 1);k(1) = sigma*(y - x);k(2) = x*(rho - z) - y;k(3) = x*y - beta*z;end% 参数设置sigma = 10;rho = 28;beta = 8/3;x0 = 0;y0 = 1;z0 = 20;tspan = [0 100];h = 0.01;% 调用函数求解[t, x, y, z] = solveLorenzEquation(sigma, rho, beta, x0, y0, z0, tspan, h);```在上述代码中,我们首先定义了洛伦茨方程的参数和初始条件,然后通过solveLorenzEquation函数进行调用,即可求解得到洛伦茨方程的数值解。
求最大李雅普诺夫指数的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 仿真
一、未加入控制器的系统
其中,上半部分为参考模型,下半部分为控制系统,分别使用阶跃信号和方波信号输入,便可得到相应的输出。
1. 阶跃信号下的输出
2. 方波信号下的输出
仿真时间(s )
幅值
阶跃输入
仿真时间(s )
幅值
广义状态误差
仿真时间(s )
幅值控制对象状态变量
二、加入了自适应控制器的系统
其中,上半部分为参考模型,下半部分为控制系统,仍然使用和先前相同的阶跃信号和方波信号输入,便可得到相应的输出。
仿真时间(s )
幅值
广义状态误差
仿真时间(s )
幅值
控制对象状态变量
仿真时间(s )
幅值
方波输入
1. 阶跃信号下的输出
2. 方波信号下的输出
使用李雅普诺夫方法设计自适应控制器后,可以看到系统的误差明显减小了,同时系统的稳定性也得到了提升。
仿真时间(s )
幅值
广义状态误差
仿真时间(s )
幅值
广义状态误差
仿真时间(s )
幅值
控制对象状态变量
仿真时间(s )
幅值
控制对象状态变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%
% ****************************************************
% * 调用龙格库塔迭代公式进行迭代计算,算出下一时刻的值
% ****************************************************
lamda2 = lsum2/count1/h0;
lamda3 = lsum3/count1/h0;
% Lyapunov = [lamda1, lamda2, lamda3];
fprintf('LE1=%f,LE2=%f,LE3=%f\n',lamda1,lamda2,lamda3);
x3new = x3+dx3; y3new = y3+dy3; z3new = z3+dz3;
%
% ****************************************************
% * 求出前后两个时候的距离差值f
% ****************************************************
if j>= timesum1
lsum1 = lsum1+log(d1/d0);
lsum2 = lsum2+log(d2/d0);
lsum3 = lsum3+log(d3/d0);
count1 = count1+1;
%
f1x = x1new-x0new; f1y = y1new-y0new; f1z = z1new-z0new;
f2x = x2new-x0new; f2y = y2new-y0new; f2z = z2new-z0new;
f3x = x3new-x0new; f3y = y3new-y0new; f3z = z3new-z0new;
end
% *
% ****************************************************
% * 函数: 龙格库塔迭代方程
% * 描述: 龙格库塔迭代方程
% * 参数: x,y,z
% * 返回: dx,dy,dz
% ****************************************************
A = 10;
g = A*(y - x);
end
function g=f2(x,y,z)
B = 28;
g = B*x - y - x*z;
end
function g=f3(x,y,z)
C = 8/3;
g = x*y - C*z;
end
%
h = 1e-2;
%
% ****************************************************
% * 四阶龙格库塔
% ****************************************************
%
K1 = f1(x,y,z);
e2y = f2y-alfa1*e1y;
e2z = f2z-alfa1*e1z;
alfa2 = (f3x*e1x+f3y*e1y+f3z*e1z)/(e1x*e1x+e1y*e1y+e1z*e1z);
beta2 = (f3x*e2x+f3y*e2y+f3z*e2z)/(e2x*e2x+e2y*e2y+e2z*e2z);
e3x = f3x-alfa2*e1x-beta2*e2x;
e3y = f3y-alfa2*e1y-beta2*e2y;
e3z = f3z-alfa2*e1z-beta2*e2z;
d1 = sqrt(e1x*e1x+e1y*e1y+e1z*e1z);
e1x = f1x; e1y = f1y; e1z = f1z;
%
% ****************************************************
% * 通过Schmidt正交化不断对新得到的矢量集进行置换
lsum2 = 0;
lsum3 = 0;
x0 = 0.1; y0 = 0; z0 = -0.2; % 微分方程赋初值
x1 = 0.1+d0; y1 = 0; z1 = -0.2; % e1=(d0,0,0)
x2 = 0.1; y2 = 0+d0; z2 = -0.2; % e2=(0,d0,0)
% lamda1 = lsum1/count1/h0;
% lamda2 = lsum2/count1/h0;
% lamda3 = lsum3/count1/h0;
end
end
lamda1 = lsum1/count1/h0;
x2 = x0new+e2x/d2*d0; y2 = y0new+e2y/d2*d0; z2 = z0new+e2z/d2*d0;
x3 = x0new+e3x/d3*d0; y3 = y0new+e3y/d3*d0; z3 = z0new+e3z/d3*d0;
%
timesum = 100; % 微分方程迭代上限
timesum1 = 10; % 计算李雅普诺夫指数的起始有效迭代
d0 = 1e-3; % 微分方程取值步长
h0 = 1e-2;
count1 = 0; % 计数迭代次数
lsum1 = 0; % 李指和
% ============================================================
% 描述:计算洛伦兹系统的李雅普诺夫指数
%该程序加了注释,若有不懂得可以询问 535038737@
% ============================================================
x0new = x0+dx0; y0new = y0+dy0; z0new = z0+dz0;
x1new = x1+dx1; y1new = y1+dy1; z1new = z1+dz1;
x2new = x2+dx2; y2new = y2+dy2; z2new = z2+dz2;
L3 = f2(x + h*L2/2,y + h*L2/2,z + h*L2/2);
L4 = f2(x + h*L3,y + h*L3, z + h*L3);
M1 = f3(x,y,z);
M2 = f3(x + h*M1/2,y + h*M1/2,z + h*M1/2);
M3 = f3(x + h*M2/2,y + h*M2/2,z + h*M2/2);
%
% ****************************************************
% * 求李雅谱诺夫指数
% ****************************************************
%
d2 = sqrt(e2x*e2x+e2y*e2y+e2z*e2z);
d3 = sqrt(e3x*e3x+e3y*e3y+e3z*e3z);
x0 = x0new; y0 = y0new; z0 = z0new;
x1 = x0new+e1x/d1*d0; y1 = y0new+e1y/d1*d0; z1 = z0new+e1z/d1*d0;
function LE_Lorenz()
clear all;
clc;
%
% ****************************************************
% * 参数初始化
% ****************************************************
K2 = f1(x + h*K1/2,y + h*K1/2,z + h*K1/2);
K3 = f1(x + h*K2/2,y + h*K2/2,z + h*K2/2);
K4 = f1(x + h*K3,y + h*K3, z + h*K3);
L1 = f2(x,y,z);
L2 = f2(x + h*L1/2,y + h*L1/2,z + h*L1/2);
% ****************************************************
%
alfa1 = (f2x*e1x+f2y*e1y+f2z*e1z)/(e1x*e1x+e1y*e1y+e1z*e1z);
e2x = f2x-alfa1*e1x;
M4 = f3(x + h*M3,y + h*M3, z + h*M3);
dx = (K1 + 2*K2 + 2*K3 + K4)*h/6;
dy = (L1 + 2*L2 + 2*L3 + L4)*h/6;