1

我已经陷入这个问题好几个星期了。如何使用 Matlab 找到非线性微分方程的稳定性(或吸引力)区域。

假设我有这个等式:

x' = y;
y' = -10*sin(x)  - y + 9;

这个方程的平衡点是 [x , y] = [1.1198 , 0]。我想画出这个非线性微分方程的稳定性边界。我的意思是,我想找到任何初始点都会收敛到平衡点的区域,并且该区域之外的任何点都会发散。请参阅 http://www.mathworks.com/matlabcentral/answers/146562-finding-the-stability-boundary-or-attraction-region-of-a-nonlinear-differential-equation的附图

现在,我运行以下 Matlab 代码:

f = @(t , x)[x(2) ; -10 * sin(x(1)) - x(2) + 9];
[T , X] = ode45(f , Tint , X0);

对于某些 Tint,我将结果绘制成相位图(即 x 与 y),并改变初始条件 (X0) 直到它起作用(即,一些有根据的试验和错误)。

我需要找到这个微分方程的许多不同变化的稳定区域。我的问题是:如何自动找到该区域?

谢谢您的帮助

4

1 回答 1

2

非常高的计算成本,您可以进行蛮力搜索:离散化您的搜索空间,选择一个长色调(以考虑在很长一段时间内收敛的解决方案),并针对每个起点进行积分。
为了稍微加快这个过程,您可以为积分实现一些停止条件,并修剪离平衡点太远的分支以及靠近平衡点的分支。

当然,通过这种方式,您只会得到稳定性边界的近似值,因为 1. 为您的搜索空间选择的离散化步骤,以及 2. 如果解决方案在远离平衡点后收敛,则可能会出现“错误修剪”。停止条件,或在比您的停止条件更接近平衡后发散。

如需帮助实现停止条件,请查看ode45 文档的事件函数部分,以及此示例此示例

于 2014-08-12T23:51:32.263 回答