国产aaaa级全身裸体精油片_337p人体粉嫩久久久红粉影视_一区中文字幕在线观看_国产亚洲精品一区二区_欧美裸体男粗大1609_午夜亚洲激情电影av_黄色小说入口_日本精品久久久久中文字幕_少妇思春三a级_亚洲视频自拍偷拍

首頁 > 化工知識 > 非線性可視化(4)龐加萊截面

非線性可視化(4)龐加萊截面

時間:2021-10-21 來源: 瀏覽:

非線性可視化(4)龐加萊截面

原創(chuàng) hyhhyh21 matlab愛好者
matlab愛好者

matlabaihaozhe

學(xué)matlab編程就關(guān)注matlab愛好者!

收錄于話題

上一期介紹了幾個經(jīng)典的非線性系統(tǒng),并給出了他們在三維相空間的各種表現(xiàn)。
但是隨著維度增加到三維甚至更高維,光繪制出相空間已經(jīng)不足以直觀的了解系統(tǒng)的形態(tài)。我們也很難對著一坨爛七八糟的軌線在論文里水字?jǐn)?shù)。因此有必要引入一個新的可視化方法,對系統(tǒng)進(jìn)一步降維,提煉出更簡潔的信息。
龐加萊截面就是基于這個思想被提出來的。對于一個周期運動的系統(tǒng),在相空間的運動表現(xiàn)為一圈又一圈的轉(zhuǎn)動。我們定義一個截面(一般是平面),當(dāng)軌線穿過這個面時,把交點記錄下來。當(dāng)記錄足夠多的交點后,這些交點形成的圖像就是龐加萊截面的圖像。而這個截面就是龐加萊截面。
一般只記錄由向正向負(fù)穿越截面的交點,不記錄由負(fù)向正穿越的點。這樣,就可以得到下面的規(guī)律:對于單周期運動,軌線為一個近似圓形,龐加萊截面上為一個點;對于2周期運動,軌線繞兩圈才會閉合,穿過龐加萊截面兩次,表現(xiàn)為2個點;對于周期N的運動,龐加萊截面上有N個點。
對于混沌運動,截面上的點理論上會有無限多。如果截面上的點形成了一條線,則把這種運動叫做擬周期運動。如果龐加萊截面上的點形成了一片二維圖形,甚至還存在分形結(jié)構(gòu),則可以判斷是典型的混沌運動。
單純的說可能不太直觀,這里用之前的duffing方程舉個例子。
將Duffing方程改寫為下面的三維形式:

然后和前面一樣,用龍格庫塔方法求解即可。
取[δ,γ,ω]=[1.5,1,1],其三維的相空間和對應(yīng)的龐佳萊截面如下:

三維的軌線圖為近似一個圓。綠色的面就是定義的龐加萊截面(當(dāng)然實際上應(yīng)該是一個無限大的平面,這里為了展示只畫了一部分)。這時對應(yīng)的運動為典型的周期運動,龐加萊截面上只有一個交點。
當(dāng)取 [δ,γ,ω]=[1.35 ,1,1] 時, 其三維的相空間和對應(yīng)的龐佳萊截面如下:

此時的運動變?yōu)橹芷?的運動,對應(yīng)的二維相平面上的投影(下面黑色的),為一個交叉的雙環(huán)。這種周期2的運動與龐加萊截面有2個交點。
當(dāng)取 [δ,γ,ω]=[1.15 ,1,1] 時, 其三維的相空間和對應(yīng)的龐佳萊截面如下:

此時運動變?yōu)榛煦邕\動,對應(yīng)的二維相平面投影為一個混沌的8字型堆疊的圖案。而龐加萊截面上的點則似乎很有規(guī)律的分布著。
單獨將截面上的點繪制出來,可以得到:

龐加萊截面上的點以線的方式分布著,可以認(rèn)為這種運動為一種準(zhǔn)周期運動。
如果 [δ,γ,ω] =[0.1,0.35,1.4]時 ,系統(tǒng)會進(jìn)入混沌狀態(tài),其龐加萊截面演示圖如下:

其龐加萊截面圖像如下。對于復(fù)雜的龐加萊截面,如果想要繪制的好看,需要計算非常多的點,這也意味著非常大的計算時間。

此時,龐加萊截面還有很多分形結(jié)構(gòu),其局部放大圖如下

計算龐加萊截面的方法可以分為兩步:1計算出軌線 2計算出線與面的交點。
額外插一句,Duffing方程如果翻到開頭,去看它的形式,可以看到它是一個非自治系統(tǒng),有一個周期性外力在方程里。這里繪制龐加萊截面的處理方式,是把周期性力單獨提出來,定義為z,然后繪制z=0的圖像。這時每個截面上的點對應(yīng)時間t,是一個以周期(2π/ω)為等差的數(shù)列。
還有一種降維方法,叫做 頻閃采樣法 ,就是針對這類型含有周期驅(qū)動力的方程的。在計算完軌線之后,直接取t0,t0+T,t0+2T,t0+3T,...這樣的時間序列,其中T為驅(qū)動周期,這些點天然的在一個龐加萊平面上。因此,這樣可以大大的簡化龐加萊圖像的計算,縮短計算時間。方程本身甚至也可以降維到2維,如下面所示。雖然下面的方程已經(jīng)看不到高維空間截面的樣子,但是頻閃采用法本質(zhì)上還是龐加萊截面。

下面程序是通用的計算龐加萊截面的matlab程序:

%龐佳萊截面 %截面采用公式Ax+By+Cz+D=0;的形式 %采用杜芬方程演示 clear clc close all %第一步,計算出軌跡 h=5e-3; x0=0:h:1600; y0=[0.1;0.1;1];%最后一項是cos(w*t),當(dāng)t=0時必須為1. [y1,Output]=ODE_RK4_hyh(x0,h,y0,[1.15,1,1]); %[1.5,1,1],[1.35,1,1],[1.15,1,1],[0.1,0.35,1.4] Lx=y1(1,2000:end); Ly=y1(2,2000:end); Lz=y1(3,2000:end); Plane=[0;0;1;0];%一般情況下是個垂直某個軸的平面。這里是z=0 [tP_List,yP_List]=Solve_Poincare(x0,y1,Plane);%計算Poincare平面上的點 %繪圖 %1龐加萊截面 %最開始幾個點還沒有穩(wěn)定,沒有體現(xiàn)出系統(tǒng)特點,所以放棄,從第10個點開始 figure() plot(yP_List(1,10:end),yP_List(2,10:end),’.’) xlim([-1,0.6]) ylim([-0.8,0.2]) %2投影的二維相平面 figure() plot(Lx,Ly) %3展示用的示意圖 figure() hold on patch([Lx,nan],[Ly,nan],[Lz,nan],[Lx+Ly,nan],... ’EdgeColor’,’interp’,’Marker’,’none’,’MarkerFaceColor’,’flat’,’LineWidth’,0.8,’FaceAlpha’,1); plot3(yP_List(1,10:end),yP_List(2,10:end),zeros(size(yP_List(2,10:end))),... ’.’,’MarkerSize’,8,’color’,’r’) patch([-1.6,0.4,0.4,-1.6],[-0.7,-0.7,0.0,0.6],[0,0,0,0],[1,1,1,1],... ’FaceAlpha’,0.8,’EdgeColor’,[0.5,0.5,0.5]) view([-17,39]) box on grid on %繪制相圖 set(gcf,’position’,[300 200 560 500]) xlim([-2,2]) zlim([-3,1]) plot3( Lx,Ly,zeros(size(Ly))-3 ,’color’,’k’) hold off function [tP_List,yP_List]=Solve_Poincare(t,y,Plane) %截面方程z=0 % Plane=[0;0;1;0];%一般情況下是個垂直某個軸的平面 %一般只記錄從負(fù)到正穿越。如果想反向也記錄,可以設(shè)置Plane=-Plane。 %第一步,計算出軌線y %第二步,插值得到線與面的交點 yP_List=[]; tP_List=[]; Dis=DistancePlane(y,Plane); N=size(y,2); for k=1:N-1 if Dis(k)<=0 && Dis(k+1)>0 t0=t(k);t1=t(k+1); yP0=y(:,k);yP1=y(:,k+1); Dis0=Dis(k);Dis1=Dis(k+1); %一維線性插值,求Dis=0時的t和y %(相比較前面積分的4階RK,這里用線性插值精度有點低) yP=yP0+(yP1-yP0)/(Dis1-Dis0)*(0-Dis0); tP=t0+(t1-t0)/(Dis1-Dis0)*(0-Dis0); %儲存 yP_List=[yP_List,yP]; tP_List=[tP_List,tP]; end end end %點到平面的距離 function Dis=DistancePlane(xk,Plane) % xk,坐標(biāo)點,如果是3維坐標(biāo),大小就是3*N的矩陣。 % Plane,平面,形如Ax+By+Cz+D=0形式的平面。 N=size(xk,2);%計算總共多少個點 xk2=[xk;ones(1,N)]; Dis=dot(xk2,Plane*ones(1,N),1)./norm(Plane(1:end-1)); end %兩點線性插值 function y=interp2point_linear(x0,x1,y0,y1,x) y=y0+(y1-y0)/(x1-x0)*(x-x0); end %兩點3次插值 function y=interp2point_spline(x0,x1,y0,y1,x) %y0包含y0的值和y0的導(dǎo)數(shù),yy=y0(1),dy=y0(2) xx0=x0; xx1=x1; yy0=y0(1);dy0=y0(2); yy1=y1(1);dy1=y1(2); cs = csape([xx0,xx1],[dy0,yy0,yy1,dy1],[1,1]); y=ppval(cs,x); end function [F,Output]=Fdydx(x,y,Input) %形式為Y’=F(x,Y)的方程,參見數(shù)值分析求解常系數(shù)微分方程相關(guān)知識 %高次用列向量表示,F(xiàn)=[dy(1);dy(2)];y(1)為函數(shù),y(2)為函數(shù)導(dǎo)數(shù) %杜芬方程duffing,參見中國大學(xué)MOOC,北京師范大學(xué)-計算物理基礎(chǔ)-77倒擺與杜芬方程 d=Input(1); r=Input(2); w=Input(3); dy(1)=y(2); dy(2)=-y(1)^3+y(1)-d*y(2)+r*y(3); dy(3)=-w*sin(w*x); F=[dy(1);dy(2);dy(3)]; Output=[]; end function [y,Output]=ODE_RK4_hyh(x,h,y0,Input) %4階RK方法 %h間隔為常數(shù)的算法 y=zeros(size(y0,1),size(x,2)); y(:,1)=y0; for ii=1:length(x)-1 yn=y(:,ii); xn=x(ii); [K1,~]=Fdydx(xn ,yn ,Input); [K2,~]=Fdydx(xn+h/2,yn+h/2*K1,Input); [K3,~]=Fdydx(xn+h/2,yn+h/2*K2,Input); [K4,~]=Fdydx(xn+h ,yn+h*K3 ,Input); y(:,ii+1)=yn+h/6*(K1+2*K2+2*K3+K4); end Output=[]; end

下面是相同效果下,采用頻閃采樣法。Duffing方程也被降維為2維(其實也可以不變)

%龐佳萊截面 %截面采用頻閃采樣法 %采用杜芬方程 clear clc close all %第一步,計算出軌跡 h=5e-3; x0=0:h:1600; y0=[0.1;0.1];%最后一項是cos(w*t),當(dāng)t=0時必須為1. [y1,Output]=ODE_RK4_hyh(x0,h,y0,[1.15,1,1]); Lx=y1(1,:); Ly=y1(2,:); Lz=cos(1*x0); %不用計算截面的方式 % Plane=[0;0;1;0];%一般情況下是個垂直某個軸的平面 % [tP_List,yP_List]=Solve_Poincare(x0,y1,Plane);%計算Poincare平面 %采用頻閃采樣法計算 tP_Ideal=3*pi/2:(2*pi/1):x0(end); tP_List=zeros(1,length(tP_Ideal)); Ind_List=zeros(1,length(tP_Ideal)); for k=1:length(tP_Ideal) [~,Ind]=min(abs( tP_Ideal(k)-x0 )); Ind_List(k)=Ind; tP_List(k)=x0(Ind); end yP_List=y1(:,Ind_List); %繪圖 %3展示用的示意圖 figure() hold on % plot3(y1(1,:),y1(2,:),y1(3,:)) patch([Lx,nan],[Ly,nan],[Lz,nan],[Lx+Ly,nan],... ’EdgeColor’,’interp’,’Marker’,’none’,’MarkerFaceColor’,’flat’,’LineWidth’,0.8,’FaceAlpha’,1); plot3(yP_List(1,10:end),yP_List(2,10:end),zeros(size(yP_List(2,10:end))),... ’.’,’MarkerSize’,8,’color’,’r’) patch([-1.6,0.4,0.4,-1.6],[-0.7,-0.7,0.0,0.6],[0,0,0,0],[1,1,1,1],... ’FaceAlpha’,0.8,’EdgeColor’,[0.5,0.5,0.5]) view([-17,39]) box on grid on %繪制相圖 set(gcf,’position’,[300 200 560 500]) xlim([-2,2]) zlim([-3,1]) plot3( Lx,Ly,zeros(size(Ly))-3 ,’color’,’k’) hold off function [F,Output]=Fdydx(x,y,Input) %形式為Y’=F(x,Y)的方程,參見數(shù)值分析求解常系數(shù)微分方程相關(guān)知識 %高次用列向量表示,F(xiàn)=[dy(1);dy(2)];y(1)為函數(shù),y(2)為函數(shù)導(dǎo)數(shù) d=Input(1); r=Input(2); w=Input(3); %降維后的Duffing方程 dy(1)=y(2); dy(2)=-y(1)^3+y(1)-d*y(2)+r*cos(w*x); % dy(3)=-w*sin(w*x); F=[dy(1);dy(2)]; Output=[]; end function [y,Output]=ODE_RK4_hyh(x,h,y0,Input) %4階RK方法 %h間隔為常數(shù)的算法 y=zeros(size(y0,1),size(x,2)); y(:,1)=y0; for ii=1:length(x)-1 yn=y(:,ii); xn=x(ii); [K1,~]=Fdydx(xn ,yn ,Input); [K2,~]=Fdydx(xn+h/2,yn+h/2*K1,Input); [K3,~]=Fdydx(xn+h/2,yn+h/2*K2,Input); [K4,~]=Fdydx(xn+h ,yn+h*K3 ,Input); y(:,ii+1)=yn+h/6*(K1+2*K2+2*K3+K4); end Output=[]; end

效果圖如下,可以看到兩種方法是一致的。

頻閃采樣法適合周期驅(qū)動的非自治方程。而一般形式的龐加萊截面求交點法,試用范圍會更廣一些。
題外話

恭喜昨晚觀看直播中獎的四位伙伴, 正版紙質(zhì)圖送《MATLAB智能優(yōu)化算法:從寫代碼到算法思想》正在趕來的路上

書籍簡介: 《MATLAB智能優(yōu)化算法: 從寫代碼到算法思想 以實戰(zhàn)和快速教會智能優(yōu)化算法初學(xué)者為主旨,通過9個常見的組合優(yōu)化問題、5個經(jīng)典的智能優(yōu)化算法及4個新穎的智能優(yōu)化算法,讓讀者全面、深入、透徹地理解智能優(yōu)化算法求解問題時的算法設(shè)計思路及代碼編寫思路,進(jìn)一步提高使用智能優(yōu)化算法求解實際問題的實戰(zhàn)能力。
當(dāng)然,沒有中獎但有需要的小伙伴可以通過下方鏈接進(jìn)行購買或通過matlab愛好者視頻號的 商品 列表中購買。

凡通過matlab愛好者視頻號 商品 成功 購買的伙伴,將獲得 3元 現(xiàn)金紅包返利!
領(lǐng)取方式: 直接將相關(guān) 簽收訂單截圖微信收款碼 發(fā)到matlab愛好者公眾號后臺即可領(lǐng)取 現(xiàn)金返利 !

參考資料:

[1] 劉秉正 ,非線性動力學(xué)與混沌基礎(chǔ)[M]

[ 2]Computing accurate Poincaré maps[J]. PHYSICA D, 2002, 171(3):127-137.

版權(quán):如無特殊注明,文章轉(zhuǎn)載自網(wǎng)絡(luò),侵權(quán)請聯(lián)系cnmhg168#163.com刪除!文件均為網(wǎng)友上傳,僅供研究和學(xué)習(xí)使用,務(wù)必24小時內(nèi)刪除。
相關(guān)推薦