4. 相轨迹数值计算与可视化

相平面分析的核心困难在于:绝大多数非线性系统的相轨迹无法用解析式写出。我们通常只能拿到状态方程本身,例如二阶自治系统

dx/dt = f(x, y)
dy/dt = g(x, y)

其中 x 为位移类状态,y 为速度类状态。相轨迹就是该向量场在 (x, y) 平面上的积分曲线。既然解析解不可得,就改用数值积分:从某个初始点出发,沿向量场方向一小步一小步地“走”,把走过的点连起来,就得到一条近似相轨迹。本节要解决两件事——怎样把这条轨迹算准,以及怎样把它和方向场一起画出来,让相图的整体结构一眼可见。

一、数值积分:把向量场离散成折线

先明确符号约定:本文所有相图均以 x 为横轴、y 为纵轴,时间 t 增大方向即向量场箭头方向;轨迹上的箭头表示 t 增加的方向,与向量场箭头一致。

最直接的方法是显式欧拉法。设步长为 h,第 k 步的状态为 (xk, yk),则

x_{k+1} = x_k + h * f(x_k, y_k)
y_{k+1} = y_k + h * g(x_k, y_k)

欧拉法实现简单,但只有一阶精度,且对刚性或快速旋转的轨迹(如无阻尼振子的圆轨迹)会明显“外扩”或“内缩”,长时间积分后轨迹形状失真。因此实际绘图更常用四阶龙格-库塔法(RK4):

k1 = F(x_k, y_k)
k2 = F(x_k + h/2 * k1x, y_k + h/2 * k1y)
k3 = F(x_k + h/2 * k2x, y_k + h/2 * k2y)
k4 = F(x_k + h * k3x,  y_k + h * k3y)
x_{k+1} = x_k + h/6 * (k1x + 2k2x + 2k3x + k4x)
y_{k+1} = y_k + h/6 * (k1y + 2k2y + 2k3y + k4y)

其中 F 即向量场 (f, g)。RK4 每步计算四次向量场,代价约为欧拉法的四倍,但精度提升到四阶,在相同步长下轨迹闭合性明显更好。工程上常用折中:先用 RK4 保证形状,再用较小步长(如 h = 0.01~0.05 个时间单位)控制累积误差。

步长选择有一个实用判据:单步内状态变化不应超过相图特征尺度的百分之几。若系统特征频率为 ω,则建议 h < 0.1/ω。步长过大,轨迹会在平衡点附近“跳过”细节甚至发散;步长过小,计算量与绘图点数激增。可以先用粗步长试算,观察轨迹是否光滑闭合,再逐步减半验证结果稳定。

二、方向场:让结构先于轨迹显现

只画几条轨迹,读者很难判断整体走向。方向场(斜率场)在网格点上计算 (f, g) 的方向,用短线段或箭头表示,能在不积分的情况下展示向量场的骨架。绘制时通常对每个网格点做归一化,只保留方向、统一长度,否则大速度区域箭头过长会互相遮挡。

方向场与轨迹叠加后,相图的信息层次就清楚了:方向场给出“处处往哪走”,轨迹给出“从某点出发具体怎么走”,平衡点则是方向场中箭头长度趋零的位置。判断平衡点类型时,可结合该点附近方向场的汇聚、发散或旋转形态,与雅可比矩阵特征值结论互相印证。

三、一个可复现的示例

以无阻尼单摆的小角度近似为例(示例参数,非实测):取方程

dx/dt = y
dy/dt = -sin(x)

初始点选 (x₀, y₀) = (2.0, 0),步长 h = 0.02,用 RK4 积分约 3000 步。由于系统保守,轨迹应是一条闭合曲线,围绕原点(稳定平衡点)旋转;若改用欧拉法同样步长,轨迹会逐渐向外螺旋,这就是数值耗散/增益造成的假象,可作为方法对比的直观证据。

绘图流程可归纳为:① 确定绘图窗口,如 x ∈ [-4, 4]、y ∈ [-3, 3];② 在窗口内均匀取 20×20 网格计算方向场;③ 对若干初始点分别积分,得到多条轨迹;④ 将方向场、轨迹、平衡点分层叠加,轨迹用不同颜色区分初始条件;⑤ 在轨迹上按固定步数间隔加箭头,标明时间方向。

相轨迹数值计算与方向场叠加流程 状态方程 dx/dt = y dy/dt = -sin(x) 初值 (2.0, 0) 步长 h = 0.02 窗口 x∈[-4,4] y∈[-3,3] RK4 数值积分 每步计算 k1~k4 四次向量场 加权平均得下一步状态 四阶精度,轨迹闭合性好 对比:欧拉法一阶,易外扩 输出:离散点序列 (x_k, y_k) 方向场生成 20×20 网格逐点计算 (f,g) 归一化方向,统一箭头长度 箭头长度趋零处即平衡点 展示向量场整体骨架 不依赖积分,先看结构 分层叠加绘图 底层:方向场(浅色短箭头) 中层:多条轨迹(不同颜色区分初值) 顶层:平衡点标记 + 轨迹时间方向箭头 结果:闭合轨迹围绕原点,结构清晰可判读 闭合相轨迹示意

四、结果判读与常见问题

叠加图完成后,判读顺序建议是:先看方向场中箭头汇聚、发散或旋转的区域,定位平衡点;再看轨迹是否闭合、是否被吸引到某点或极限环;最后检查轨迹与方向场是否一致——若某条轨迹明显逆着方向场箭头走,多半是积分步长过大或符号写反。

几个高频问题值得提前防范。其一,坐标轴比例不一致会把圆轨迹画成椭圆,误判为极限环,绘图时应保持等比例或明确标注。其二,轨迹在平衡点附近速度趋零,等步长积分会“走不动”,可改用自适应步长或按弧长参数化。其三,多条轨迹叠加时颜色过多反而混乱,建议主轨迹用饱和色、辅助轨迹用低透明度,方向场用浅灰,形成清晰的信息层级。

实用建议:把“方向场 + 3~5 条代表性轨迹 + 平衡点”作为相图的标准三件套。轨迹初始点优先选在平衡点附近、坐标轴附近和远离原点处各一条,这样最容易暴露系统的全局结构。

至此,数值计算与可视化形成了闭环:方程给出向量场,RK4 把向量场积成轨迹,方向场提供全局参照,叠加绘图把两者合成一张可判读的相图。后续分析平衡点稳定性、判断极限环存在性时,这张图就是最直接的出发点。