duffing混沌振子形式如下:

k,a,c,f为自定义系数,将初值设为
,k=0.5,a=c=1
此时可通过更改f的值从0到1来改变duffing混沌系统状态,从固定点状态,小周期状态,混沌状态到大周期状态。例如f=0.6时处于混沌状态,如下:

上图横坐标x,纵坐标x的一阶导数

上图横坐标为时间t,纵坐标x
- clc;clear;
- [x,y]=ode113(@duffingFunc,[0:0.05:200],[0;1]);
- figure(1);
- plot(x,y(:,1));
- grid on;
- figure(2);
- plot(y(:,1),y(:,2));
- grid on;
- function res=duffingFunc(x,y)
- k=0.5;
- a=1;
- c=1;
- f=0.75;
- res=zeros(2,1);
- res(1)=y(2);
- res(2)=a*y(1)-c*y(1)^3-k*y(2)+f*cos(x);
- end
求解利用matlab中的ode113函数,duff ingFunc函数步骤为

利用四阶龙格库塔绘制,y3=t先转化三阶自治系统
- clc;clear;format long;
- h=0.005;%步长
- iters=50000;%迭代次数
- ys=zeros(3,iters);
- y1=1;y2=1;y3=0;
- for i=1:iters
- [y1n,y2n,y3n]=myfunc(y1,y2,y3,h);
- y1=y1n;
- y2=y2n;
- y3=y3n;
- ys(1,i)=y1;
- ys(2,i)=y2;
- ys(3,i)=y3;
- end
- figure();
- plot(1:iters,ys(1,:));
- hold on;
- plot(1:iters,ys(2,:));
- legend("y1","y2");
- figure();
- plot(ys(3,:),ys(1,:));
- figure();
- plot(ys(1,:),ys(2,:));
- function [y1n,y2n,y3n]=myfunc(y1,y2,y3,h)
- f=0.9;
- ky1_1=y2;
- ky2_1=-0.5*y2+y1-y1^3+0.6*sin(y3);
- ky3_1=1;
-
- ky1_2=y2+ky1_1*h/2;
- ky2_2=-0.5*(y2+ky2_1*h/2)+(y1+ky1_1*h/2)-(y1+ky1_1*h/2)^3+f*sin(y3+ky3_1*h/2);
- ky3_2=1;
-
- ky1_3=y2+ky1_2*h/2;
- ky2_3=-0.5*(y2+ky2_2*h/2)+(y1+ky1_2*h/2)-(y1+ky1_2*h/2)^3+f*sin(y3+ky3_2*h/2);
- ky3_3=1;
-
- ky1_4=y2+ky1_3*h;
- ky2_4=-0.5*(y2+ky2_3*h)+(y1+ky1_3*h)-(y1+ky1_3*h)^3+f*sin(y3+ky3_1*h/2);
- ky3_4=1;
-
- y1n=y1+h*(ky1_1+2*ky1_2+2*ky1_3+ky1_4)/6;
- y2n=y2+h*(ky2_1+2*ky2_2+2*ky2_3+ky2_4)/6;
- y3n=y3+h*(ky3_1+2*ky3_2+2*ky3_3+ky3_4)/6;
- end