duffing方程matlab绘制

duffing混沌振子形式如下:

\ddot{x}+k\dot{x}-ax+cx^{3}=fcos(\omega t)

k,a,c,f为自定义系数,将初值设为[x,\dot{x}]=[0,1],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函数步骤为

x1=x; x2=\dot{x};->\dot{x1}=x2;\dot{x2}=-(k\dot{x}-ax+cx^{3})+fcos(\omega t)

利用四阶龙格库塔绘制,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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值