基于Matlab實(shí)現(xiàn)離散系統(tǒng)分岔圖的繪制
1.一維離散分岔圖
一維那非常簡(jiǎn)單哈,就循環(huán)著畫(huà)唄,以下舉兩個(gè)簡(jiǎn)單的例子 :

% x(n+1)=1-r*x(n)^2
% (r∈(0,2),x∈[-1,1])的分支混沌圖。
hold on
f=@(x,r)1-r.*x.^2;
r=0:.01:2;
x=0; % x初值
for n=1:1000
x=f(x,r);
if n>100 % 穩(wěn)定后開(kāi)始繪圖
plot(r,x,'k.','MarkerSize',1);
drawnow
end
end

% Logistic系統(tǒng)
% x(n+1)=r*x(n)-r*x(n)^2
% (r∈(2.6,4),x∈(0,1])的分支混沌圖。
hold on
f=@(x,r)r.*x-r.*x.^2;
r=2.6:.01:4;
x=0.6; % x初值
for n=1:1000
x=f(x,r);
if n>100 % 穩(wěn)定后開(kāi)始繪圖
plot(r,x,'k.','MarkerSize',1);
drawnow
end
end
橫坐標(biāo)代表參數(shù)的數(shù)值,縱坐標(biāo)表示該參數(shù)數(shù)值下序列可能的取值,n>100再開(kāi)始畫(huà)圖是為了讓序列通過(guò)迭代穩(wěn)定下來(lái),事實(shí)上我么可以不設(shè)置n>100,同時(shí)將顏色設(shè)置為隨著n變化的漸變色,可以發(fā)現(xiàn)幾乎看不出漸變來(lái),該序列穩(wěn)定的很快(以下是繪圖部分代碼的微調(diào)):
c1=[0 0.4470 0.7410];
c2=[0.6350 0.0780 0.1840];
N=1000;
for n=1:N
x=f(x,r);
plot(r,x,'.','Color',(n.*c1+(N-n).*c2)./N,'MarkerSize',2);
drawnow
end
當(dāng)然我們可以設(shè)置n為奇數(shù)和偶數(shù)時(shí)繪制不同顏色,下圖所示,對(duì)于該系統(tǒng)而言,其序列的數(shù)值是反復(fù)橫跳的(以下是繪圖部分代碼的微調(diào)):

當(dāng)然可以設(shè)置更多顏色:
for n=1:1000
x=f(x,r);
switch mod(n,4)
case 3,plot(r,x,'.','Color',[0.4660 0.6740 0.1880],'MarkerSize',2);
case 2,plot(r,x,'.','Color',[0.8500 0.3250 0.0980],'MarkerSize',2);
case 1,plot(r,x,'.','Color',[0 0.4470 0.7410],'MarkerSize',2);
case 0,plot(r,x,'.','Color',[0.6350 0.0780 0.1840],'MarkerSize',2);
end
drawnow
end
2.二維離散分岔圖
繪制Henon系統(tǒng)的分岔圖:

定住b值不變,改變a值,觀察y序列,不同b值時(shí)繪制效果不同:
% x(n+1)=1+y(n)-a*x(n)^2
% y(n+1)=b*x(n)
% Henon系統(tǒng)
hold on
fx=@(x,y,a)1+y-a.*x.^2;
fy=@(x,b)b.*x;
a=0:.002:1.4;b=0.2;
x=0;y=0;
for n=1:800
lx=x;
ly=y;
x=fx(lx,ly,a);
y=fy(lx,b);
if n>100 % 穩(wěn)定后開(kāi)始繪圖
plot(a,y,'k.','MarkerSize',1);
drawnow
end
endb=0.2時(shí)繪制效果

b=0.3時(shí)繪制效果

3.封面圖繪制
經(jīng)典體現(xiàn)理科生工科生藝術(shù)情懷環(huán)節(jié),我們?cè)趺茨軌驅(qū)⒎植韴D的美忽視?
感覺(jué)大家很多也是因?yàn)榭捶饷鎴D點(diǎn)進(jìn)來(lái)的,雖然不短,但還是把代碼放一下叭,原理很簡(jiǎn)單,構(gòu)造一個(gè)矩陣統(tǒng)計(jì)各個(gè)位置點(diǎn)數(shù)量,然后依據(jù)點(diǎn)數(shù)量映射到顏色:
圖一
% x(n+1)=1+y(n)-a*x(n)^2
% y(n+1)=b*x(n)
% Henon系統(tǒng)
fx=@(x,y,a)1+y-a.*x.^2;
fy=@(x,b)b.*x;
a=0:.002:1.4;b=0.3;
x=0;y=0;
% 填充矩陣
pntMat=zeros(451,701);
for n=1:12000
lx=x;
ly=y;
x=fx(lx,ly,a);
y=fy(lx,b);
disp(['進(jìn)度:[',num2str(n),'/12000]']);
ty=round((y+0.4)*500);
ta=a*500;
index=round((ta).*451+ty);
pntMat(index)=pntMat(index)+1;
end
% 矩陣上下翻轉(zhuǎn)(坐標(biāo)y軸方向與圖片序數(shù)相反)
pntMat=flipud(pntMat);
% 繪圖
imagesc(pntMat);
caxis([0,50])
ax=gca;
hold on;
ax.XTick=[];
ax.YTick=[];
% 顏色映射
map=[0.1294 0.0549 0.1725;0.2196 0.1608 0.2902;0.3882 0.1804 0.4941;
0.4392 0.1922 0.4706;0.5333 0.2235 0.4392;0.6471 0.2588 0.3686;
0.7137 0.2745 0.3294;0.7725 0.3059 0.2902;0.8510 0.3725 0.2275;
0.9137 0.4196 0.1804;0.9608 0.5020 0.2000;0.9765 0.5529 0.2078;
0.9804 0.6431 0.2549;0.9843 0.6627 0.2706;0.9765 0.7176 0.3412;
0.9765 0.7686 0.4000;0.9765 0.8118 0.4902;0.9725 0.8510 0.5961;
0.9882 0.9020 0.6667;1.0000 0.9451 0.8431;1.0000 0.9961 0.9804;
1.0000 1.0000 1.0000];
Xi=1:size(map,1);Xq=linspace(1,size(map,1),800);
map=[interp1(Xi,map(:,1),Xq,'linear')',...
interp1(Xi,map(:,2),Xq,'linear')',...
interp1(Xi,map(:,3),Xq,'linear')'];
colormap(map)
圖二
% x(n+1)=1-r*x(n)^2
% (r∈(0,2),x∈[-1,1])的分支混沌圖。
f=@(x,r)1-r.*x.^2;
r=0:.0025:2;
x=0; % x初值
pntMat=zeros(801,801);
for n=1:20000
x=f(x,r);
disp(['進(jìn)度:[',num2str(n),'/20000]']);
if n>1 % 穩(wěn)定后開(kāi)始繪圖
tx=round((x+1)*400);
tr=r*400;
index=round((tr).*801+tx);
pntMat(index)=pntMat(index)+1;
end
end
% 為了減少鋸齒化高斯模糊一下
pntMat=imgaussfilt(pntMat,0.3);
% 矩陣上下翻轉(zhuǎn)(坐標(biāo)y軸方向與圖片序數(shù)相反)
pntMat=flipud(pntMat);
% 繪圖
imagesc(pntMat);
caxis([0,80])
ax=gca;
hold on;
ax.XTick=[];
ax.YTick=[];
% 顏色映射
map=[0.1400 0.1100 0.1500
0.2800 0.0900 0.4100
0.2700 0.2100 0.5100
0.2300 0.3200 0.5500
0.1900 0.4200 0.5600
0.1500 0.5100 0.5600
0.1200 0.5800 0.5500
0.1400 0.6700 0.5100
0.2400 0.7300 0.4600
0.3900 0.8000 0.3700
0.5900 0.8500 0.2500];
Xi=1:size(map,1);Xq=linspace(1,size(map,1),800);
map=[interp1(Xi,map(:,1),Xq,'linear')',...
interp1(Xi,map(:,2),Xq,'linear')',...
interp1(Xi,map(:,3),Xq,'linear')'];
colormap(map)
到此這篇關(guān)于基于Matlab實(shí)現(xiàn)離散分岔圖的繪制的文章就介紹到這了,更多相關(guān)Matlab離散分岔圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C語(yǔ)言fscanf函數(shù)讀取文件教程及源碼
這篇文章主要為大家介紹了詳解C語(yǔ)言算法fscanf讀取文件示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
C語(yǔ)言報(bào)錯(cuò)Use of Uninitialized Variable的原因及解決方案
Use of Uninitialized Variable是C語(yǔ)言中常見(jiàn)且危險(xiǎn)的錯(cuò)誤之一,它通常在程序試圖使用一個(gè)未初始化的變量時(shí)發(fā)生,本文將詳細(xì)介紹Use of Uninitialized Variable的產(chǎn)生原因,提供多種解決方案,并通過(guò)實(shí)例代碼演示如何有效避免和解決此類(lèi)錯(cuò)誤,需要的朋友可以參考下2024-06-06
深入探討C++ OpenCV如何實(shí)現(xiàn)圖像矯正
這篇文章主要為大家詳細(xì)介紹了C++ OpenCV如何實(shí)現(xiàn)簡(jiǎn)單的圖像矯正功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
C++實(shí)現(xiàn)選擇性排序(SelectionSort)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)選擇性排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
解析c++中參數(shù)對(duì)象與局部對(duì)象的析構(gòu)順序的詳解
本篇文章是對(duì)c++中參數(shù)對(duì)象與局部對(duì)象的析構(gòu)順序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++中的多態(tài)問(wèn)題—理解虛函數(shù)表及多態(tài)實(shí)現(xiàn)原理
這篇文章主要介紹了C++中的多態(tài)問(wèn)題—理解虛函數(shù)表及多態(tài)實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
解析c++ 中智能指針引用計(jì)數(shù)為什么不是0原理
這篇文章主要為大家介紹了C語(yǔ)言中智能指針引用計(jì)數(shù)為什么不是0原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

