跳转至

Radau 与 Lobatto 插值

节点类型为何重要?

Pockit 使用分段插值多项式表示状态和控制。网格决定一段多项式在哪里 结束、下一段在哪里开始;节点类型决定相邻区间如何连接。

性质 Radau Lobatto
公共网格边界处的数值 左右两侧可以不同 相邻区间共用同一个值
重构函数 可在网格边界间断 在整个阶段内连续
典型用途 bang-bang 或与事件对齐的控制,也可处理光滑问题 光滑状态和控制
区间内节点 端点配置不对称 包含两个端点并具有对称性

需要显式表示真实跳变时,应直接选择 Radau,并把跳变放在网格边界或 足够靠近边界的位置。Lobatto 可以近似快速但连续的过渡,却不能在同一个 公共边界上表示两个不同数值。

对于光滑解,两种节点都可能有效。正式案例会根据预期连续性以及密集 验证是否容易解释来选择节点类型。

网格区间与多项式次数

Phase.set_discretization() 既可接收均匀计数,也可接收显式数组:

# 20 个均匀区间,每个区间四个点
phase.set_discretization(20, 4)

# 两个非均匀区间,分别使用不同点数
phase.set_discretization([0.0, 0.3, 1.0], [4, 6])

网格坐标归一化到阶段时间区间。增加区间数会提供更多局部变化位置; 增加每个区间的点数则提高局部多项式次数。

下面的原则适合作为初始选择,而不是收敛保证:

  • 每个已知控制跳变或物理事件都应放在 Radau 网格边界上。
  • 间断点或狭窄边界层附近宜采用较低次数和更多区间。
  • 全局光滑的解可以使用较少区间或较高次数。
  • 除非模型缩放良好且确有必要,不要让区间长度相差多个数量级。
  • 很高的多项式次数可能使插值和非线性规划病态。次数超过约 20--30 时,应专门进行收敛性研究。
  • 至少比较两套离散,并在密集物理时间上重构解;配点可行不能单独证明 连续时间可行。

间断控制

把阶段约束标记为 bang-bang,只是告诉 Pockit 的间断检查器:哪个有界 表达式应接近某个边界。这个标记不能证明问题本身具有 bang-bang 结构, 也不适用于真正的内部奇异弧。

切换时刻未知时,可先设置具有物理意义的网格,求解并检查有界控制; 若切换尚未解析清楚,再更新网格。误差检查与网格调整 说明了可用检查及其适用边界。

求解后应检查什么?

在密集物理时间上计算重构状态、控制、动力学残差、路径约束和事件条件。 对于间断,应分别计算左右极限,而不是跨越跳变做连续插值。只有当网格 变化后目标函数和物理诊断仍保持稳定,数值解才具有可信度。