Matlab 中二阶自治系统的极限环

Limit cycle in Matlab for 2nd order autonomous system

我想在 Matlab 中创建一个极限环。极限环看起来像这样:

不过我不知道该怎么做,我从来没有在 Matlab 中做过这样的事情。

描述极限环的方程如下:

x_1d=x_2
x_2d=-x_1+x_2-2*(x_1+2*x_2)x_2^2

它将以 (0,0)

的平衡点为中心

你们能帮帮我吗?

如果您使用函数的偏导数来构建向量场,则可以使用流线来可视化您所描述的循环。

例如函数f = x^2+y^2

给我偏导数 dx = 2x, dy=2y 对于可视化,我从网格上的偏导数中采样。

[x,y] = meshgrid(0:0.1:1,0:0.1:1);
dx = 2*x;
dy = 2*y;

为了可视化矢量场,我使用 quiver;

figure; 
quiver(x, y, dx, dy); 

使用流线,我可以想象注入矢量场的粒子的路径。在我的示例中,我将粒子注入 (0.1, 0.1)

streamline(x,y, dx, dy, 0.1, 0.1);

这会产生以下可视化结果

在您的情况下,您可以省略箭袋步骤以移除每个网格点的刺猬箭头。

这是另一个显示粒子会聚到轨道的例子。

编辑:您的函数。 因此,正如 knedlsepp 指出的那样,您感兴趣的功能有点含糊不清。在 Matlab 中,* 表示矩阵乘积,而 .* 表示矩阵之间的逐元素乘法。类似地,'^2' 表示矩阵 MMM,而 .^2 表示采用元素方式的幂。

所以,

[x_1,x_2] = meshgrid(-4:0.1:4,-4:0.1:4);
dx_1 = x_2;
dx_2 = -x_1+x_2-2*(x_1+2*x_2)*(x_2)^2;
figure; streamline(x_1,x_2, dx_1, dx_2, 0:0.1:4, 0:0.1:4);

看起来像

这个函数不会显示收敛,因为它不收敛。

knedlsepp 建议您真正感兴趣的功能是

dx_1 = -1 * x_2;
dx_2 = -1 * -x_1+x_2-2*(x_1+2*x_2).*(x_2).^2;    

对其余部分有很好的描述。

此 post 显示了生成矢量场积分线的代码,该矢量场定义为:

dx/dt = y
dy/dt = -x+y-2*(x+2*y)*y^2.

正确矢量化此函数很重要。 (即在所有重要的地方引入点)

dxdt = @(x,y) y;
dydt = @(x,y) -x+y-2*(x+2*y).*y.^2;

[X,Y] = meshgrid(linspace(-4,4,100));
[sx,sy] = meshgrid(linspace(-3,3,20));

streamline(stream2(X, Y, ...                % Points
                   dxdt(X,Y), dydt(X,Y),... % Derivatives
                   sx, sy));                % Starting points
axis equal tight

要获得与您的照片更相似的图片,请更改网格大小和起点:

[X,Y] = meshgrid(linspace(-1,1,100));
[sx,sy] = meshgrid(linspace(0,0.75,20),0.2);