Matlab中动态系统绘制轨迹的离散化

时间:2018-03-15 22:49:36

标签: matlab

假设我有以下动态系统

\ dot {x} = x(x-0.5)(x + 0.5)

所以我知道吸引区域在[-0.5,0.5]

因此,在此区域中给定x0,当t变为无穷大时,此状态应为0

在matlab中,我想看到这样的轨迹,所以我使用以下常用方法:

x(t + 1)= x(t)+ dt * f(x)

x0 = [-.3;-.1;.3] % 3D case
dt = .01;
num = 1;
for t = dt : dt : tf
    num = num + 1;
        x(:,num) = x(:,num - 1) + dt*([x(1)^3-0.25*x(1);x(2)^3-0.25*x(2);x(3)^3-0.25*x(3)] );
end 

似乎所有三个轨迹都没有收敛到0.我的代码有问题吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

x是一个3xN矩阵。通过说x(1)你隐含地写x(1,1),这意味着你的第二个词(dt*([x(1)^3-0.25*x(1);x(2)^3-0.25*x(2);x(3)^3-0.25*x(3)])将始终保持不变。要转到最新列,请使用x(1,num-1)

完整代码(我已将变量tf更改为ma,因为tf是现有的MATLAB函数。):

x0 = [-.3;-.1;.3]; % 3D case
dt = .01;
num = 1;
ma = 30;
x = zeros(3,length(dt:dt:ma)+1);
x(:,1) = x0;
for t = dt : dt : ma
    num = num + 1;
        x(:,num) = x(:,num - 1) + dt*([x(1,num-1)^3-0.25*x(1,num-1);x(2,num-1)^3-0.25*x(2,num-1);x(3,num-1)^3-0.25*x(3,num-1)] );
end 

plot(dt:dt:ma+dt,x)
xlim([0 30])

结果:

enter image description here