Chaotic system, namely, is sensitive to the initial parameters and control conditions. Once the initial parameters or the control conditions change slightly, the system state is changes totally and becomes unpredictable. However, just like the map, the chaotic system is the only one when the initial parameters and control conditions are determined, which is named pseudo-random.
The definition of Lyapunov exponent / Lyapunov characteristic exponent
The definition of LE
Consider the following chaotic system,
If there is a slight difference between the two systems initially, separation will occur over time (or iterations). The degree of separation is usually measured by Lyapunov exponent, which is the logarithm of geometric mean,
When , the system will move into a chaotic state, and the corresponding map is called chaotic map.
我们知道,ln 1 = 0且对数函数是递增的,初始值的微小改变,乘以一个大于1的数,多次重复这个操作,最终会变得难以预测。
实际如何求解Lyapunov exponent,
求出混沌动力系统函数的导数,在给定初始值和控制条件的情况下,进行迭代计算,迭代次数n取一个较大的值,如50000,以表征无穷大,求出所有迭代值的对数值并求均值,所的到的值就可以视为对应的初始值和控制条件下该混沌系统的Lyapunov exponent 值。如果混沌系统是多维的,就求出偏导数,剩下的处理类似。
分岔图
分岔一般指的是系统中某一个常数发生变化,导致整个系统都会随之改变的现象。
分岔表达了非线性系统参数量对平衡点的量变到质变的影响。
分岔是稳态的数目变多,混沌是多到一塌糊涂。混沌来自分岔,分岔不一定混沌。
稳态:首先,什么是稳态,对于一个系统,稳态就是该系统在时间t趋于无穷大时,系统的状态,从函数映射的角度来看,稳态,就是一个函数迭代次数取为无穷大时对应的系统的状态,迭代次数无穷大时,函数值可能是取几个固定的值,这个几个可以是1、2、4、8、无穷个等。一个函数映射可以表征一个系统。当为有限个时,系统可以视为稳定的,当数量趋于无穷多个时,则可以说该系统是混沌系统。
分岔图作图链接
MATLAB常见非线性可视化绘制方法-分岔图与庞加莱截面(混沌可视化、Poincare截面、Logistic、Henon、Lorenz、Rossler、Duffing系统)_hyhhyh21的博客-CSDN博客_庞加莱截面
作图思路:
分岔图,是研究某个控制参数对于系统最终状态的影响,某个控制参数,意味着要采用控制变量法(其他控制参数取一个固定的常数值,此处不考虑其他控制参数对于系统的影响,不过,其他控制参数选取也要满足适当的原则),当选取了控制参数后,在一个范围内对于控制参数进行研究,对于控制参数的某个值,假设映射函数的自变量可以取尽其所在范围的所有值(生成给定范围内的等差数列,为什么这么做,只有穷举所有可能的自变量值,再迭代无穷多次(一个很大的数),才能确定该研究的控制参数下最终系统的状态情况,上面的最终可以视为迭代次数无限,实际操作取一个极大的数),对于每一个初始值,迭代无穷次后,获得迭代点,可以作动图,也可以截取一部分点,然后作图。
function [x1,y1]=henon_1(x0,y0,a,b)
% xn1=1-a*xn^2+yn
% yn1=b*xn
x1=1-a.*x0.*x0+y0;
y1=b.*x0;
function draw_bifurcation_henon
close all
x0_initial=-1.5:0.04:2;
b=0.3;
y0_initial=b.*[-1.5:0.04:2];
x0=x0_initial;
maxiteration=1000;
a=[0:0.0016:1.4];
a_size = numel(a);
x=ones(a_size,maxiteration,numel(x0));
y=ones(a_size,maxiteration,numel(x0));
for i=1:a_size
x0=x0_initial;
y0=y0_initial;
x(i,1,:)=x0;y(i,1,:)=y0;
for j=1:maxiteration-1
[x0,y0]=henon_1(x0,y0,a(i),b);
x(i,j+1,:)=x0;
y(i,j+1,:)=y0;
end
end
save x x
save y y
plotsize=300;
tt=(repmat(a,plotsize,1))';
save tt tt
function plot_henon
close all
draw_bifurcation_henon;
load x
load y
load tt
x0=-1.5:0.04:2;
a=[0:0.0016:1.4];
maxiteration=1000;
tt=(repmat(a,maxiteration,1))';
for i=1:maxiteration
f3 = figure(3)
clf
aaa=repmat(tt(:,i),1,numel(x0));
[m,n,q]=size(x(:,i,:));
aaa=reshape(aaa,m*q,1);
xxx = reshape(x(:,i,:),m*q,1);
plot(aaa(:,1),xxx(:,1),'.');
text(0.4,-1,["迭代次数",num2str(i)])
xlabel('a');
ylabel('x');
set(f3,'Color',[1 1 1]);
pause(0.1);
end
%
直接运行 plot_henon.m即可获得动图
如何获得静态图片,即最后稳定状态的图
将
for i=1:maxiteration
f3 = figure(3)
clf
aaa=repmat(tt(:,i),1,numel(x0));
[m,n,q]=size(x(:,i,:));
aaa=reshape(aaa,m*q,1);
xxx = reshape(x(:,i,:),m*q,1);
plot(aaa(:,1),xxx(:,1),'.');
text(0.4,-1,["迭代次数",num2str(i)])
xlabel('a');
ylabel('x');
set(f3,'Color',[1 1 1]);
pause(0.1);
end
中的i遍历范围改一改,删除clf,pause语句,加一个hold on
如下
for i=maxiteration-10:maxiteration
f3 = figure(4)
aaa=repmat(tt(:,i),1,numel(x0));
[m,n,q]=size(x(:,i,:));
aaa=reshape(aaa,m*q,1);
xxx = reshape(x(:,i,:),m*q,1);
hold on
plot(aaa(:,1),xxx(:,1),'b.');
%text(0.4,-1,["迭代次数",num2str(i)])
xlabel('a');
ylabel('x');
set(f3,'Color',[1 1 1]);
end
下面给出改进版(动态,静态分岔图)plot_henon.m
function plot_henon
close all
draw_bifurcation_henon;
load x
load y
load tt
x0=-1.5:0.04:2;
a=[0:0.0016:1.4];
maxiteration=1000;
tt=(repmat(a,maxiteration,1))';
for i=1:maxiteration
f3 = figure(3)
clf
aaa=repmat(tt(:,i),1,numel(x0));
[m,n,q]=size(x(:,i,:));
aaa=reshape(aaa,m*q,1);
xxx = reshape(x(:,i,:),m*q,1);
plot(aaa(:,1),xxx(:,1),'.');
text(0.4,-1,["迭代次数",num2str(i)])
xlabel('a');
ylabel('x');
set(f3,'Color',[1 1 1]);
pause(0.1);
end
for i=maxiteration-10:maxiteration
f3 = figure(4)
aaa=repmat(tt(:,i),1,numel(x0));
[m,n,q]=size(x(:,i,:));
aaa=reshape(aaa,m*q,1);
xxx = reshape(x(:,i,:),m*q,1);
hold on
plot(aaa(:,1),xxx(:,1),'b.');
%text(0.4,-1,["迭代次数",num2str(i)])
xlabel('a');
ylabel('x');
set(f3,'Color',[1 1 1]);
end