混沌matlab仿真

二维线图标记轴并添加坐标如下程序(命令行窗口)

 x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
xlabel('x')
ylabel('sin(x)')
title('Plot of the Sine Function')

典型混沌系统matlab仿真

logistic映射(逻辑斯蒂映射)

在这里插入图片描述
其中mu是增长率,即为需要调节的控制参数

按照时间序列进行迭代映射仿真

若设系统初值为0.1,迭代50次,分别选取mu=0.5、2.8、3、3.3、3.5、4。用matlab编程仿真,画出不同的mu时的X(n)。仿真程序如下所示:

clear all;close all;
mu=0.5;        %Growth rate parameter
x=0.6*ones(1,200); %Create a matrix 1*200
% Iterative 200 times
for n=1:200 
    x(n+1)= mu * x(n) * (1- x(n));
end
plot(x(1,:),'k','MarkerSize',10);
xlabel('n');
ylabel('x(n)');
title('logistic(\mu=0.5)');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分岔的极限形态图仿真
mu=2.6:3e-5:4;%From 2.6 to 4, increasing gradually at 3e-5 intervals
k=length(mu);
x=linspace(0.6,0,k);%There's a linear spacing between zero and one, and the spacing is 1/(k-1)
for n=1:k
    x(n+1)=mu(n)*x(n)*(1-x(n));
    plot(mu,x(1,:),'k.');
    xlabel('\mu');
    ylabel('x(n)');
end

在这里插入图片描述

Lorenz系统(洛伦兹方程)

在这里插入图片描述
设系统的初始状态为(5,5,5),sigma=10,b=8/3,r=28,在matlab中调用ode45工具对该微分方程组ODE进行运动求解,得到系统的相图与混沌时序图如下所示:

ICs=[5, 5, 5];  % Your data
t=[0, 20];      % Your simulation space
OPTs = odeset('reltol', 1e-6, 'abstol', 1e-8);  % Optional ODE options set up
[time, fOUT]=ode45(@LORENZ_sys_1ODE, t, ICs, OPTs);
close all
%在该程序中调用ode45,并且在程序最后声明洛伦兹方程 


function  df = LORENZ_sys_1ODE(~, x)
% HELP: Lorenz Functions
% dx/dt=-sigma*x+sigma*y;
% dy/dt=r*x-y-x*z;
% dz/dt=x*y-b*z;
sigma=10; b=8/3; r=28;
% ICs: x(0)=5; y(0)=5; z(0)=5;  % Your ICs
df=[-sigma*x(1)+sigma*x(2); ...
    r*x(1)-x(2)-x(1)*x(3);...
    x(1)*x(2)-b*x(3)];
end

由此整个运动系统便被构造并调取了出来,在此基础上依次加入不同图像函数即可生成各种所需图像:

figure 
plot3(fOUT(:,1), fOUT(:,2), fOUT(:,3)), grid
xlabel('x(t)'), ylabel('y(t)'), zlabel('z(t)')
title('LORENZ functions x(t) vs. y(t) vs. z(t)')
axis tight

由上述程序生成的图像如下图所示:
在这里插入图片描述

figure 
comet3(fOUT(:,1), fOUT(:,2), fOUT(:,3))

由上述程序生成的图像如下图所示:(呈现出系统从初始给定点不断运动的图像,发现这些线始终是一个轨道且不交叉)
在这里插入图片描述

figure
subplot(3,1,1)
plot(time, fOUT(:,1), 'b','linewidth', 3), grid minor
title 'LORENZ functions x(t), y(t), z(t)', xlabel 'time', ylabel 'x(t)'
subplot(312)
plot( time', fOUT(:,2), 'r', 'linewidth', 2 ), grid minor
xlabel 'time', ylabel 'y(t)'
subplot(313)
plot(time, fOUT(:,3),'k', 'linewidth', 2), grid minor, xlabel 'time', ylabel 'z(t)'

由上述程序生成的图像如下图所示:
在这里插入图片描述

figure
plot(fOUT(:,1), fOUT(:,2), 'b', 'linewidth', 1.5)
grid minor, title('LORENZ functions'), xlabel('x(t)'), ylabel 'y(t)'
axis square

由上述程序生成的图像如下图所示:
在这里插入图片描述

figure
plot(fOUT(:,1), fOUT(:,3), 'k', 'linewidth', 1.5)
grid minor, title('LORENZ functions'), xlabel('x(t)'), ylabel 'z(t)'
axis square

由上述程序生成的图像如下图所示:
在这里插入图片描述

figure
plot(fOUT(:,2), fOUT(:,3), 'm', 'linewidth', 1.5)
grid minor, title('LORENZ functions'), xlabel('y(t)'), ylabel 'z(t)'
axis square

由上述程序生成的图像如下图所示:
在这里插入图片描述
整篇Lorenz方程混沌运动形态的matlab仿真代码如下:

ICs=[5, 5, 5];  % Your data
t=[0, 20];      % Your simulation space
OPTs = odeset('reltol', 1e-6, 'abstol', 1e-8);  % Optional ODE options set up
[time, fOUT]=ode45(@LORENZ_sys_1ODE, t, ICs, OPTs);
close all 
figure 
plot3(fOUT(:,1), fOUT(:,2), fOUT(:,3)), grid
xlabel('x(t)'), ylabel('y(t)'), zlabel('z(t)')
title('LORENZ functions x(t) vs. y(t) vs. z(t)')
axis tight
figure 
comet3(fOUT(:,1), fOUT(:,2), fOUT(:,3))

figure
subplot(3,1,1)
plot(time, fOUT(:,1), 'b','linewidth', 3), grid minor
title 'LORENZ functions x(t), y(t), z(t)', xlabel 'time', ylabel 'x(t)'
subplot(312)
plot( time', fOUT(:,2), 'r', 'linewidth', 2 ), grid minor
xlabel 'time', ylabel 'y(t)'
subplot(313)
plot(time, fOUT(:,3),'k', 'linewidth', 2), grid minor, xlabel 'time', ylabel 'z(t)'

figure
plot(fOUT(:,1), fOUT(:,2), 'b', 'linewidth', 1.5)
grid minor, title('LORENZ functions'), xlabel('x(t)'), ylabel 'y(t)'
axis square
figure
plot(fOUT(:,1), fOUT(:,3), 'k', 'linewidth', 1.5)
grid minor, title('LORENZ functions'), xlabel('x(t)'), ylabel 'z(t)'
axis square
figure
plot(fOUT(:,2), fOUT(:,3), 'm', 'linewidth', 1.5)
grid minor, title('LORENZ functions'), xlabel('y(t)'), ylabel 'z(t)'
axis square

function  df = LORENZ_sys_1ODE(~, x)
% HELP: Lorenz Functions
% dx/dt=-sigma*x+sigma*y;
% dy/dt=r*x-y-x*z;
% dz/dt=x*y-b*z;
sigma=10; b=8/3; r=28;
% ICs: x(0)=5; y(0)=5; z(0)=5;  % Your ICs
df=[-sigma*x(1)+sigma*x(2); ...
    r*x(1)-x(2)-x(1)*x(3);...
    x(1)*x(2)-b*x(3)];
end
当然在编写程序时有需要注意的小知识点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Henon映射

在这里插入图片描述

a=1.4;
b=0.3;
x(1)=0.4;
y(1)=0.4;
for i=1:10000
    x(i+1)=1-a*x(i)^2+y(i);
    y(i+1)=b*x(i);
end
plot(x,y,'.');
xlabel('x');
ylabel('y');

在这里插入图片描述

三维混沌系统的李雅普洛夫指数仿真

在matlab中分成两个.m文件编写,一个为李亚普洛夫指数生成文件,另一个是运动学方程编写文件,其中需要调用function函数和ode45功能
在这里插入图片描述

clc;
clear all;
close all;

e=0;
global parameter;

scan = linspace(0.027, 0.07, 150); %0.027-0.07区间内等间隔取150个点,作为横坐标采样点
for parameter = scan;    %parameter取150个输入参数值
    parameter
InitialTime=0;	%初始时间
FinalTime=800;	%终止时间
TimeStep=0.01;		%步长
RelTol=1e-5;		%Relative tolerance
AbsTol=1e-6;		%Absolute tolerance
 
DiscardItr=150;	%Iterations to be discarded不再使用的迭代次数
UpdateStepNum=10;	%Lyapunov exponents updating steps——李雅普诺夫指数更新步长
linODEnum=9;	%No. of linearized ODEs
ic=[0.1;0.1;0.2];	%Initial conditions ——初始条件
 
%Dimension of the linearized system (total: d x d ODEs)——线性化系统的维数
d=sqrt(linODEnum); %线性化系统的维数是3
%Initial conditions for the linearized ODEs——线性化常微分方程的初始条件
Q0=eye(d); % 返回一个主对角线元素为 1 且其他位置元素为 0 的 d×d 单位矩阵。
IC=[ic(:);Q0(:)];% 李亚普洛夫指数图像的变化是跟随可变控制参数(瑞利数)变化而变化的,只要瑞利数变化一次,系统就会重回初始点重新做一次非线性运动
ICnum=length(IC);		%Total no. of initial coniditions——?初始条件
%One iteration: Duration for updating the LEs——一次迭代,更新LES的持续时间
Iteration=UpdateStepNum*TimeStep;	
DiscardTime=DiscardItr*Iteration+InitialTime;%迭代时间累加,从InitialTime=0到FinalTime=800
 

T1=InitialTime;
T2=T1+Iteration; % T1+迭代
TSpan=T1:TimeStep:T2;
%Absolute tolerance of each components is set to the same value
options=odeset('RelTol',RelTol,'AbsTol',ones(1,ICnum)*AbsTol);%确定误差容限

%Initialize variables初始化变量
n=0;		%Iteration counter迭代计数
k=0;		%Effective iteration counter有效迭代计数器
		% (discarded iterations are not counted)丢弃的迭代不计算在内
Sum=zeros(1,d);%生成13列的0向量
xData=[];%生成空集
yData=[];
  
A=[];

%Main loop
while (1)
   n=n+1;
   %Integration
   [t,X]=ode45('Lg_F_3',TSpan,IC,options);   %调用运动方程
   
   [rX,cX]=size(X);
   L=cX-linODEnum;      %No. of initial conditions for 
                        %the original system原始系统的没有初始条件

    for i=1:d
          m1=L+1+(i-1)*d;
          m2=m1+d-1;
          A(:,i)=(X(rX,m1:m2))';
   end
   %QR decomposition  QR分解
   if d>1
      %The algorithm for 1st-order system doesn't require一阶系统的算法不需要
      %QR decomposition
      [Q,R]=qr(A); %X = qr(A) 返回 QR 分解 A = Q*R 的上三角 R 因子。如果 A 为满矩阵,则 R = triu(X)。如果 A 为稀疏矩阵,则 R = X
      if T2>DiscardTime
         Q0=Q;
      else
         Q0=eye(d);
      end
   else
      R=A;
   end
         
  %in the following calculation, so discard this step.在下面的计算中可省略此步骤
   permission=1;
   for i=1:d
      if R(i,i)==0
         permission=0;
         break;
      end
   end
  %To determine the Lyapunov exponents来确定李亚普诺夫指数
   if (T2>DiscardTime && permission)
      k=k+1;
      T=k*Iteration;
      TT=n*Iteration+InitialTime;
      %There are d Lyapunov exponents有d个李亚普诺夫指数
      Sum=Sum+log(abs(diag(R))');
      Lambda=Sum/T; %这里涉及到了李亚普洛夫指数的推导公式
      
 
      %Display the calculated Lyapunov exponents every 10 steps每10步显示计算出的李亚普诺夫指数
      if rem(k,10)==0  %表示整除,即r = rem(a,b) 返回 a 除以 b 后的余数,其中 a 是被除数,b 是除数。此函数通常称为求余运算,表达式为 r = a - b.*fix(a./b)。rem 函数遵从 rem(a,0)NaN 的约定。
         Lambda ; % Lambda is the calculated Lyapunov exponents计算出来的李亚普诺夫指数
         T2	; %Current time

         xData=[xData;TT]; %store the data to plot
         yData=[yData;Lambda];
      end
   end
        
   %If calculation is finished , exit the loop.如果计算结束,退出循环
   if (T2>=FinalTime)
      %Show the final results (for making sure the final results being shown if DisplayStep>1)
      if (T2>DiscardTime && permission)
         Lambda
%         LD      %the Lyapunov dimension李雅普诺夫维
      end
      break;
   end
   %Update the initial conditions and time span for the next iteration
   %这一步就是我第一个瑞丽数的李亚普洛夫指数值已经求完了,现在要使系统重新恢复初始条件并改变瑞利数,开始求第二个瑞利数对应的李亚普洛夫指数
      ic=X(rX,1:L);
      T1=T1+Iteration;
      T2=T2+Iteration;
      TSpan=T1:TimeStep:T2;
   IC=[ic(:);Q0(:)];
end		%End of main loop
pp=length(yData(:,1));
e=e+1;
ll(e,1)= yData(pp,1);
ll(e,2)= yData(pp,2);
ll(e,3)= yData(pp,3);
%ll(e,4)= yData(pp,4);将上述生成的每次迭代的李亚普洛夫指数值存储在这里面,如果要增加更高维度可在此编写
end

a = scan ;
plot(a, ll(:,1),a, ll(:,2),a, ll(:,3));grid;%生成图像

xlabel('x(0)') 
ylabel('Lyapunov');%getBehavior = get(behavior) 构造 PropertyGetBehavior 对象来定义 mock 属性的 get 行为。通常情况下,当您定义 mock 行为时,可使用 get 方法来隐式构造 PropertyGetBehavior。
set(get(gca,'XLabel'),'FontSize',22);%图上文字为8 point或小5set(get(gca,'YLabel'),'FontSize',20);
set(get(gca,'TITLE'),'FontSize',15);
set(gca,'fontsize',16);

legend('LE1', 'LE2', 'LE3');%给生成的曲线命名

调用function声明运动学方程的程序如下:
**注意:**要掌握在该程序中将微分方程组编写成矩阵形式的方法

function OUT=Lg_F_3(~,X)

global parameter;

uc=X(1);il=X(2);x=X(3);

Q=[ X(4), X(7), X(10);
    X(5), X(8), X(11);
    X(6), X(9), X(12)];


%ww=k1*((1-k2*(z-k3))^(-1/2));


CC=0.13;
LL=parameter;

duc=-1/CC * (il + (1.3*x^2-x-1.3)*uc);%系统运动方程在此输入
dil= (1/LL) * (uc);
dx= 2.01*x - 1.9*x^3+1.7*uc-2*uc*x;



DX1=[duc;dil;dx];	%Output data

%Linearized system %将原先的微分方程写成矩阵形式,由此构造出3*3的矩阵,内含9给变量
aa=(1.3*x.^2-x-1.3);
bb=(1.7-2*x);
cc=(2.01-1.9*3*x);

 J=[
    -aa/CC, -1/CC,  0;
    1/LL,      0,  0;
    bb,       0,  cc];


   
%Variational equation   
F=J*Q;

%Output data must be a column vector
OUT=[DX1; F(:)];

由此生成的李亚普洛夫指数的图像如下所示:
在这里插入图片描述

  • 17
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 光电震荡环是一种产生混沌现象的系统,它由一个正反馈环路和一个光电转换器组成。通过光电转换器将光信号转化为电信号,并通过正反馈环路将电信号反馈到光电转换器,形成一个闭环系统。 要在MATLAB中进行光电震荡环的混沌仿真,需要以下步骤: 1. 建立光电震荡环的数学模型。根据系统的结构和特性,可以建立相应的微分方程描述系统的动态行为。例如,可以使用Van der Pol方程描述正反馈环路的动态行为。 2. 设定系统参数和初始条件。根据实际需求,设定正反馈环路的参数和光电转换器的特性,如放大倍数、灵敏度等,并为系统设置一个初始状态。 3. 使用数值方法求解微分方程。采用数值方法(如欧拉法、龙格-库塔法等)对微分方程进行数值求解,得到系统在一段时间内的演化过程。 4. 画出混沌图像。根据仿真结果,可以通过画出光电震荡环输出信号的时序图、相位图或波形图等,来观察系统的混沌特性。 5. 分析和验证仿真结果。根据混沌图像的特征,如周期性、分岔等现象,可以对仿真结果进行分析和验证,以确保仿真的准确性。 通过以上步骤,就可以在MATLAB中进行光电震荡环的混沌仿真。该仿真有助于理解光电震荡环的动态行为和混沌现象,同时也为我们研究和应用混沌系统提供了一个有效的工具。 ### 回答2: 光电震荡环是一种光学系统,其中包含了反射器、光学耦合元件、光源等。它通过反射与耦合产生的光信号引起光电转换器的输出,形成一个反馈回路。该系统可以产生丰富的振荡行为,包括周期振荡和混沌振荡。 要在MATLAB中进行光电震荡环的混沌仿真,首先需要建立一个光电震荡环的数学模型。该模型涉及到光学耦合的效应、反射的效应以及光电转换器的非线性特性。可以使用差分方程或微分方程来描述这个模型,包括光强的变化和光电转换器的输出。 在仿真过程中,可以选择一组初始条件作为系统的起始状态,例如光源的初始强度、光电转换器的初始电压。然后,通过迭代求解模型的方程,计算随时间演化的光强和光电转换器的输出。可以观察到一系列振荡现象,例如周期振荡和混沌振荡。 为了产生混沌振荡,可以调节系统中的参数或引入适当的噪声。参数的改变可以导致系统经过不同的动力学演化,从而产生不同的振荡行为。噪声的引入可以使系统的行为变得随机,进一步增强混沌性质。 最后,可以通过绘制光强和光电转换器输出随时间的变化曲线来分析和理解系统的振荡行为。通过观察振荡的特征和统计数据,可以判断系统是否处于混沌状态。 总之,MATLAB可以通过建立光电震荡环的数学模型和迭代求解来进行混沌仿真。通过调节系统参数和引入噪声,可以模拟和观察系统的混沌行为。这种仿真方法可以帮助人们更好地理解光电震荡环的动力学特性和混沌行为。 ### 回答3: 光电震荡环产生混沌是一种复杂而具有随机性的动态行为。在Matlab仿真中,我们可以通过模拟光电震荡环的运行过程来研究混沌现象。 光电震荡环是一种由光源、光电检测器和反馈回路组成的系统。在正常工作状态下,光电震荡环会发出一种稳定的周期性信号。然而,在一些特殊条件下,光电震荡环会出现混沌现象,即信号变得无规律且不可预测。 在Matlab仿真中,我们可以建立一个光电震荡环的数学模型,并通过修改模型中的参数来观察混沌现象的产生。 首先,我们可以使用一系列的微分方程来描述光电震荡环的行为。这些微分方程可以包括光强度随时间的变化、光电检测器的响应等。 接下来,我们可以选择一个初始条件,并在一定的时间间隔内迭代微分方程,以模拟光电震荡环的运行过程。在此过程中,我们可以观察到光强度的变化和周期性的波动。 然后,我们可以通过调整光源、光电检测器和反馈回路的参数来观察混沌现象的产生。通过改变参数的值,我们可以观察到光电震荡环的行为从稳定周期到混沌的转变。 最后,我们可以通过绘制光强度随时间的变化图像来可视化混沌现象的产生。当混沌现象发生时,图像将变得无规律且不可预测。 总体而言,通过在Matlab中进行光电震荡环的仿真,我们可以研究混沌现象的产生和特性。这些研究对于理解混沌动力学和实际应用具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值