用Matlab求非线性微分方程的稳定边界

时间:2014-08-06 18:13:18

标签: matlab portrait differential-equations boundary stability

我已经坚持这个问题好几个星期了。如何使用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)直到它起作用(即,一些受过教育的试验和错误)。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

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

有关实施停止条件的帮助,请查看ode45 doc的事件功能部分,以及this examplethis one