稳定性分析与相图分析
一、直观理解:小扰动后会不会回来
稳定性分析回答的是:系统若处在某个“静止状态”(平衡点),受到一点小扰动后,会回到原处、附近徘徊,还是越偏越远。
可以把平衡点想象成山谷和山顶上的小球:
- 放在谷底,轻推一下会滚回来——稳定;
- 放在山顶,轻推就会滑下——不稳定;
- 放在碗沿上水平滑动、既不靠近也不远离——介于二者之间的临界情形。
相图则把“状态本身”当作坐标轴。对二维系统 ,横轴是 、纵轴是 ,每条曲线是某组初值随时间走出的轨迹。时间不再显式画在图上,但箭头方向表示时间前进。一张相图能同时展示:
- 有哪些平衡点;
- 附近轨迹是螺旋靠近、节点靠近,还是鞍点分离;
- 是否存在极限环(持续振荡的闭轨);
- 不同初值最终会落入哪些吸引域。
在数学建模中,稳定性与相图往往比“再画一条时间曲线”更有决策价值:它说明长期结构,而不是某一参数下的单次模拟。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 需要判断系统长期是否趋于稳态、灭绝、爆发或周期振荡;比较不同政策/参数下平衡点是否改变类型;解释捕食—被捕食、SIR、资源竞争等二维系统的定性行为;为数值仿真选择合理时间尺度与初值范围。 |
| 核心优点 | 不依赖某一条特定时间序列即可得到结构性结论;Jacobian 线性化计算成本低;相图对二维系统非常直观;可与 Lyapunov 函数、数值轨迹相互印证。 |
| 局限与缺点 | 线性化只保证局部结论;高维系统相图难画;非双曲平衡点(特征值实部为 0)需更高阶工具;数值相图受步长与积分时间影响,可能把慢漂移误判为极限环。 |
使用前应先确认:
- 状态变量与方程右端 已明确,且量纲一致;
- 关心的是自治系统,或已通过扩展状态写成自治形式;
- 平衡点求解可靠(解析或数值求根并回代检验);
- 若做政策比较,参数变化路径要说明,不能只看一个点。
三、核心原理:平衡点、Jacobian 与相平面
考虑自治系统
1. 平衡点
满足 的点称为平衡点(定常解)。在平衡点处系统“看起来静止”,但稳定性取决于扰动后的行为。
2. 线性化
在 附近令 ,当 足够光滑时,
的特征值决定局部定性行为(双曲平衡点情形):
| 特征值特征(二维) | 相图类型 | 稳定性 |
|---|---|---|
| 两负实特征值 | 稳定节点 | 渐近稳定 |
| 两正实特征值 | 不稳定节点 | 不稳定 |
| 异号实特征值 | 鞍点 | 不稳定 |
| 共轭复根,实部为负 | 稳定焦点(螺旋汇入) | 渐近稳定 |
| 共轭复根,实部为正 | 不稳定焦点 | 不稳定 |
| 纯虚根 | 中心(线性层面) | 临界,需非线性项判定 |
更一般地:若全部特征值实部严格小于 0,则局部渐近稳定;若存在实部大于 0 的特征值,则不稳定。
3. 相图的几何要素
- 向量场:每点画出 方向(
quiver); - 零倾线: 与 的曲线,交点即平衡点;
- 轨线:数值积分得到的状态轨迹;
- 分界线:鞍点稳定/不稳定流形,常分隔不同吸引域。
4. 全局工具(需要时)
- Lyapunov 函数:构造 、 可证明稳定或吸引,不限于局部;
- Dulac / Poincaré–Bendixson:二维系统中用于排除或证明周期轨;
- 分支:参数变化时平衡点数目或类型突变(跨临界、Hopf 等)。
四、关键决策:从计算到表述
-
先求全体平衡点,再逐个分类
遗漏鞍点或边界平衡(如种群为 0)会导致相图解释不完整。 -
区分局部与全局
“局部渐近稳定”不等于“从任意初值都能到达”。报告中应写清吸引域是否已知。 -
非双曲情形不要硬套特征值表
有零实部特征值时,线性化 inconclusive,需中心流形、Lyapunov 或数值精细积分。 -
相图时间长度要足够
过短会看不出慢螺旋;过长且步长粗可能数值耗散伪造“收敛”。 -
与机制语言对齐
例如 SIR 中无病平衡点稳定 ,应把数学判据翻译回流行病学指标。
五、MATLAB 示例
下面以线性系统与非线性阻尼摆为例:先用特征值判断,再画向量场与轨线。
%% 1) 线性系统:x' = A x
% 例:稳定焦点
A = [ -0.5, -1;
1, -0.3];
lam = eig(A);
disp("特征值:");
disp(lam);
disp("最大实部:");
disp(max(real(lam)));
% 向量场
[x1, x2] = meshgrid(linspace(-2, 2, 21));
u = A(1,1)*x1 + A(1,2)*x2;
v = A(2,1)*x1 + A(2,2)*x2;
figure;
quiver(x1, x2, u, v, 1.2);
hold on;
axis equal; grid on;
xlabel("x_1"); ylabel("x_2");
title("线性系统相平面向量场");
% 几条数值轨线
fA = @(t, x) A * x;
tspan = [0 30];
ics = [1.5 1.2; -1.5 1; 1 -1.5; -1 -1];
for k = 1:size(ics, 1)
[~, Y] = ode45(fA, tspan, ics(k, :)');
plot(Y(:,1), Y(:,2), "LineWidth", 1.2);
plot(ics(k,1), ics(k,2), "ko", "MarkerFaceColor", "k");
end
plot(0, 0, "r*", "MarkerSize", 12);
%% 2) 非线性例子:阻尼摆 theta'' + b theta' + sin(theta) = 0
% 写成一阶系统:y1 = theta, y2 = omega
b = 0.3;
fPend = @(t, y) [ y(2);
-b*y(2) - sin(y(1)) ];
% 平衡点附近线性化:在 (0,0)
% J = [0 1; -cos(0) -b] = [0 1; -1 -b]
J0 = [0 1; -1 -b];
disp("阻尼摆在 (0,0) 的特征值:");
disp(eig(J0));
figure;
hold on; grid on; axis equal;
xlabel("\theta"); ylabel("\omega");
title("阻尼摆相图(数值轨线)");
theta0 = [-2*pi, -pi, -1, 0.5, pi, 2*pi];
omega0 = [ 0, 1.5, 2, -2, 0, -1];
for k = 1:numel(theta0)
[~, Y] = ode45(fPend, [0 40], [theta0(k); omega0(k)]);
plot(Y(:,1), Y(:,2), "LineWidth", 1.1);
end
% 标出若干平衡点 k*pi
for k = -2:2
plot(k*pi, 0, "r*", "MarkerSize", 10);
end
xlim([-2.5*pi, 2.5*pi]);
对一般非线性 ,可用符号或数值差分构造 Jacobian:
% 数值 Jacobian(中心差分)
f = @(x) [ x(1) - x(1)*x(2);
x(1)*x(2) - x(2) ]; % 简化 LV 右端示例
xstar = [1; 1];
epsJ = 1e-6;
n = numel(xstar);
J = zeros(n);
f0 = f(xstar);
for j = 1:n
e = zeros(n,1); e(j) = 1;
J(:, j) = (f(xstar + epsJ*e) - f(xstar - epsJ*e)) / (2*epsJ);
end
disp(J);
disp(eig(J));
六、如何解释结果
完整报告通常包括:
- 方程与假设(是否自治、变量含义);
- 全部平衡点及其实际含义(如“无病平衡”“共存平衡”);
- 各点 Jacobian 特征值或迹—行列式判据;
- 相图:向量场 + 代表性轨线 + 平衡点标注;
- 局部稳定性结论,以及是否有全局吸引的证据;
- 参数变化时类型是否改变(若做情景分析);
- 与时间序列仿真的对照:稳定焦点应对应衰减振荡等。
解释时避免把“图上看着转圈”直接说成极限环:可能是中心附近的慢螺旋,也可能是数值误差。应结合散度、Poincaré 截面或长时间能量/振幅是否恒定来判断。
七、常见误区
1. 把局部稳定写成“系统一定稳定”
局部结论只在平衡点邻域成立。大扰动仍可能逃逸到其他吸引子或无穷远。
2. 只算一个“看起来合理”的平衡点
边界平衡(变量为 0)和多稳态是竞争、传染病模型的关键部分,必须全部列出。
3. 特征值实部接近 0 时仍下硬结论
接近虚轴时,数值误差与高阶项可能改变判断,应做参数扰动与非线性分析。
4. 相图坐标混用未无量纲变量
数量级相差过大时,轨线会挤成一条线,难以观察结构;宜先无量纲化或分别缩放。
5. 用过粗步长的 Euler 画相图
低阶方法的数值耗散可能把中心变成螺旋。定性相图优先 ode45 并收紧容差。
八、小结
稳定性分析与相图分析的核心思想可以概括为:
先找到系统可能停留的平衡状态,再用线性化判断小扰动后的命运,并用相平面几何展示全局结构。
它特别适合回答“长期会怎样”和“参数阈值是否改变定性行为”。使用时务必区分局部与全局、双曲与非双曲,并把数学分类翻译回建模对象的语言。数值相图是辅助,不是取代严格判据的借口;二者互相印证,结论才站得住。