专题 7 · 非光滑分析基础:接触力学的数学根基¶
档位:核心档位 3(博士入学)+ 进阶档位 4(博士毕业+) 建议时长:档位 3 约 14–18 h;档位 4 额外 12–16 h 前置:第二批凸分析(凸集、凸函数、次梯度、对偶);第零批线性代数与实分析(Lipschitz 连续、测度、可测函数);接触力学专题 1(互补问题与 Signorini 条件)、专题 2(摩擦锥) 下游:本章是接触力学全章的**理论天花板**——专题 3(时步法)、专题 5(混合系统/Saltation)、专题 6(接触隐式 MPC)在这里获得它们的解概念与收敛性证明的数学根基
前置自测¶
📋 前置自测(答不出 ≥ 2 题 → 先回第二批凸分析与本章列出的前置专题复习)
- 什么是 Lipschitz 连续?局部 Lipschitz 与全局 Lipschitz 的区别是什么?为什么"Lipschitz 但不可微"的函数(如 \(|x|\))在工程里随处可见?
- 凸函数的次梯度(subgradient)如何定义?凸函数的次微分 \(\partial f(x)\) 为什么一定是凸集?\(f(x)=|x|\) 在 \(x=0\) 的次微分是什么?
- 写出标量 Signorini 条件 \(0\le \lambda \perp g(q)\ge 0\) 的含义。它表达了接触力学中的什么物理事实?为什么这个条件无法写成一个等式 \(h(\lambda,g)=0\) 而保持光滑?
- 常微分方程解的存在唯一性需要右端函数满足什么条件(Picard–Lindelöf 定理)?如果右端函数在某个面上不连续,经典解还存在吗?
- Coulomb 摩擦律"静摩擦力大小不超过 \(\mu N\)、滑动时摩擦力反向于滑动速度且大小等于 \(\mu N\)"如何用数学公式表达?当切向速度 \(v_t=0\) 时摩擦力取什么值?
这五题分别对应本章的五个支柱:Lipschitz 与可微性(→ Rademacher 定理)、凸次微分(→ Clarke 次微分的特例)、互补条件(→ 微分包含的右端)、ODE 解理论(→ Filippov 解)、Coulomb 摩擦(→ 全章贯穿的运行示例)。如果第 5 题答不上来,强烈建议先读专题 2 的前两节。
本章目标¶
学完本章后,你应当能够:
- 诊断非光滑的来源:对一个给定的接触/摩擦/碰撞问题,准确指出非光滑性来自单边约束(Signorini)、Coulomb 摩擦的粘滑切换、还是碰撞导致的速度跳变,并说清每一种非光滑在数学上对应哪种对象(集值映射、不可微点、测度)。
- 构造与计算 Clarke 广义梯度:从广义方向导数 \(f^\circ(x;v)\) 的定义出发,用 Gradient Formula 计算任意局部 Lipschitz 函数的 Clarke 次微分;亲手算出 \(|x|\)、Coulomb 摩擦律、接触间隙函数 \(\min_i \phi_i(q)\) 的广义梯度。
- 区分四种次微分概念:清楚 Fréchet(regular)次微分、limiting(Mordukhovich)次微分、Clarke 次微分、Bouligand 次微分四者的定义、包含关系与适用场景,知道"什么时候用 Clarke、什么时候必须用 Mordukhovich"。
- 理解微分包含与 Filippov 解:把不连续右端的微分方程 \(\dot x = f(x)\) 正则化为微分包含 \(\dot x \in F(x)\),写出 Filippov 凸化算子 \(K[f]\),理解 Filippov 解的存在性条件,并用它解释滑模(sliding mode)与 stick-slip。
- 建立测度微分包含(MDI)框架:理解为什么刚体碰撞的速度跳变必须把"加速度"提升为测度,写出 Moreau 扫动过程(sweeping process)的形式,把它与时步法(专题 3)的 Moreau–Jean 格式对应起来。
- 用非光滑视角统一互补问题:把 LCP/NCP 的互补条件理解为法锥包含、变分不等式、与不可微方程三种等价表述,理解 Fischer–Burmeister 函数为何把互补"压缩"成一个半光滑方程,从而解释半光滑 Newton 法(PATH 求解器内核)的收敛性来源。
- 桥接全章:说清本章每个工具如何为专题 1–6 的具体技术(LCP 解映射的 Lipschitz 性、saltation 矩阵的 B-导数推广、IPC barrier 的凸性、CI-MPC 的灵敏度)提供严格证明。
本章知识导航¶
在深入推导之前,先建立一张全景地图,让你知道"一共要学什么、它们之间什么关系、现在学到哪里"。
本章的核心信念是一句话:接触力学的全部数学困难,归根结底是"经典微积分要求的光滑性在接触、摩擦、碰撞这三件事上系统性失效"。于是我们需要一整套替代品——替代导数(广义梯度、次微分)、替代解概念(Filippov 解、测度解)、替代方程(变分不等式、互补问题)。本章就是这套替代品的系统课。
知识结构分为五个板块,它们的关系是"一个根源、三种数学对象、一个统一视角、一座桥":
非光滑的三大物理来源(§1)
单边约束(Signorini) · Coulomb摩擦 · 碰撞冲击
│
┌────────────────────────┼────────────────────────┐
│ │ │
替代"导数" 替代"解" 替代"方程"
│ │ │
Clarke广义梯度(§2) 微分包含+Filippov(§4) 互补的非光滑视角(§6)
四种次微分(§3) 测度微分包含+Moreau(§5) 法锥/VI/FB函数
│ │ │
└────────────────────────┼─────────────────────────┘
│
与接触力学全章的桥接(§7)
摩擦锥 · 时步法 · 混合系统 · 可微仿真 · CI-MPC
涵盖哪些知识点:本章包含 7 个核心板块——(1) 非光滑来源的系统分类;(2) Clarke 广义梯度与广义方向导数;(3) 四种次微分(Fréchet/limiting/Clarke/Bouligand)的层级;(4) 微分包含与 Filippov 解;(5) 测度微分包含与 Moreau 扫动过程;(6) 互补问题的非光滑视角(法锥、VI、半光滑 Newton);(7) 与接触力学全章的桥接。
知识点之间的关系:
| 板块 | 依赖 | 与其他板块的关系 |
|---|---|---|
| §1 非光滑来源 | 前置专题 1、2 | 全章的"动机源",后面每个数学工具都回头解释 §1 的某个现象 |
| §2 Clarke 广义梯度 | §1、凸分析 | 静态非光滑的"导数",是 §3 四种次微分中的一种,是 §4 Filippov 凸化的对偶 |
| §3 四种次微分 | §2 | 把 §2 放进更大的图景;解释"为什么有时 Clarke 不够用" |
| §4 微分包含 | §1、§2、ODE 理论 | 动态非光滑(不连续右端)的"解",与 §2 通过 Clarke 梯度对偶 |
| §5 测度微分包含 | §4、测度论 | §4 的进一步推广(连速度都跳变时),直接对应专题 3 时步法 |
| §6 互补的非光滑视角 | §1、§2、§3 | 把专题 1 的 LCP 用 §2/§3 的语言重写,解释半光滑 Newton |
| §7 桥接 | 全部 | 收束:每个工具落到专题 1–6 的一个具体技术 |
推荐阅读路径:本章有两条线索。理论主线 §1→§2→§3→§4→§5 是"从静态到动态、从导数到解"的递进,建议按顺序读。应用副线 §1→§6→§7 是"从物理到求解器"的捷径,时间紧时可先读这条建立工程直觉,再回头补 §3、§5 的严格证明。§3 与 §5 属于博士论文级深度,第一遍可只读其结论框(带 📌 标记),第二遍再啃证明。
注意:本导航只展示**结构**,不展开具体内容。每个板块的完整推导见对应小节。
前置知识桥接¶
本章站在三块前置知识之上,这里用几行重新激活它们的核心,让你不必翻回去也能跟上。
回顾第二批凸分析——次梯度:对凸函数 \(f:\mathbb{R}^n\to\mathbb{R}\),点 \(x\) 处的次梯度 \(\xi\) 定义为满足 \(f(y)\ge f(x)+\langle \xi, y-x\rangle\) 对所有 \(y\) 成立的向量,所有次梯度的集合 \(\partial f(x)\) 称为次微分。它的几何含义是"所有支撑超平面的斜率",必然是闭凸集。在那里我们用它刻画凸优化的最优性条件 \(0\in\partial f(x^\star)\)。本章把这个工具推广到非凸的局部 Lipschitz 函数——这就是 Clarke 广义梯度(§2),而在凸情形它退化回经典次微分(这是 Clarke 理论自洽性的关键检验)。
回顾接触力学专题 1——Signorini 与 LCP:单边接触的非穿透条件是 \(0\le \lambda \perp g(q)\ge 0\),意思是间隙 \(g\ge 0\)、法向力 \(\lambda\ge 0\)、且二者不能同时为正(要么贴合 \(g=0\) 受力 \(\lambda>0\),要么分离 \(g>0\) 无力 \(\lambda=0\))。线性化后成为 LCP \(0\le z\perp Mz+q\ge 0\)。在那里我们把它当作一个组合优化问题来解(枚举活跃集)。本章揭示它的非光滑本质:互补条件等价于一个法锥包含,也等价于一个不可微方程(§6)——这才解释了为什么 LCP 难、以及现代求解器(半光滑 Newton、IPC barrier)如何绕过组合爆炸。
回顾接触力学专题 2——Coulomb 摩擦:摩擦力 \(F_t\) 在切向速度 \(v_t\ne 0\) 时大小为 \(\mu N\)、方向反于 \(v_t\);在 \(v_t=0\)(粘住)时只要求 \(\|F_t\|\le \mu N\)(可取该圆盘内任意值,由其他约束决定)。在那里我们用二阶锥几何描述它。本章指出这个"在 \(v_t=0\) 处取一整个集合"正是非光滑分析的标志性现象——它是一个集值映射,是 sign 函数的集值化,其 Clarke 广义梯度恰好是区间 \([-\mu N,+\mu N]\)(§2.5)。
回顾实分析——ODE 解理论:Picard–Lindelöf 定理保证:若 \(\dot x=f(x)\) 的右端 \(f\) 关于 \(x\) 局部 Lipschitz,则解存在且唯一。证明靠 Banach 不动点定理(Picard 迭代是压缩映射)。本章处理的是 \(f\) 不连续的情形——此时经典解可能根本不存在(轨迹"想"穿过不连续面却被两侧矛盾的速度场夹住),必须引入 Filippov 解(§4)。
如果跳过本章会怎样¶
不学本章的非光滑分析,你仍然可以"用"接触力学的工具,但会在两类场景里栽跟头:
场景一:仿真器"莫名其妙"地发散或穿透,你无法定位原因。 比如你用某个时步法仿真一个四足机器人落地,结果脚穿透了地面,或者求解器在某一步报告"无解"。如果不懂 §5 的测度微分包含,你会以为这是"步长太大"的数值问题,盲目调小 \(\Delta t\);但真正的原因可能是你用的格式把"加速度是测度"这件事处理错了(碰撞瞬间加速度是 Dirac,根本不是有限值),调步长治标不治本。又比如求解器报"无解",你不知道这是 Painlevé 佯谬(Coulomb 摩擦 LCP 在某些构型下确实无解),还是代码 bug——§6 告诉你如何区分。
场景二:你想写一篇接触相关的论文,却证不出任何收敛性/稳定性定理。 比如你提出一个新的接触求解器,审稿人问"你的半光滑 Newton 为什么二次收敛?"——这需要 §6 的 Fischer–Burmeister 强半光滑性 + Qi–Sun 定理。又比如你做接触感知的状态估计(Salted Kalman Filter),需要计算落地瞬间的状态雅可比跳变——这需要 §3 的 Bouligand 导数(saltation 矩阵的严格推广)。再比如你声称"我的接触力对关节扰动是 Lipschitz 连续的,所以控制器稳定"——这需要 §3 的 Mordukhovich 判据来严格刻画 LCP 解映射何时局部 Lipschitz。简言之:不学本章仍可做工程;学了本章才能做研究。
预计阅读时间¶
| 阅读方式 | 时间 | 适合谁 |
|---|---|---|
| 精读(含手推练习与证明) | 14–18 h | 准备做接触/优化方向研究、需要严格理论支撑的读者 |
| 速读(跳过 §3、§5 的证明细节,只读结论框与直觉) | 6–8 h | 已有工程经验、想建立理论框架图谱的读者 |
| 速查(只看符号表、定理速查表、桥接表、故障排查表) | 40 min | 遇到具体问题(求解器报错、审稿质疑)时回来查 |
§7.1 非光滑性从哪里来:接触、摩擦、碰撞的系统分类 ⭐⭐¶
动机:为什么接触力学是"非光滑的",而自由飞行的卫星不是¶
先做一个对比实验,建立最朴素的直觉。考虑两个力学系统。
系统 A:自由空间中的卫星。 它的动力学是 \(\dot x = f(x,u)\),其中 \(f\) 由万有引力、推进器推力等组成,这些都是状态的光滑(无穷次可微)函数。给定初始状态和控制,轨迹是一条光滑曲线,你可以对它求任意阶导数,可以放心地用 Taylor 展开做线性化(这正是 LQR、卡尔曼滤波、连续 MPC 的前提)。整个经典控制理论——可控性、可观性、Riccati 方程、Lyapunov 稳定性——都默认这种光滑性。
系统 B:在地面上行走的足式机器人。 它的脚时而离地、时而触地;触地瞬间速度可能突变(脚不能穿透地面,向下的速度被"吃掉");脚底与地面之间有摩擦,时而粘住(stick)、时而滑动(slip)。这三件事——触地/离地的切换、碰撞导致的速度跳变、粘滑切换——每一件都破坏了系统 A 所依赖的光滑性。你无法对"脚是否触地"这个布尔事件求导;碰撞瞬间的加速度是无穷大(一个冲量在零时间内改变了动量);摩擦力在粘滑临界点不可微。
这个对比给出本章存在的根本理由:机器人一旦与环境发生接触,经典微积分的工具箱就系统性地失效了。 我们不能再假装一切都是光滑的然后"小心一点"——非光滑不是需要规避的数值麻烦,而是接触物理的本质属性。我们需要一套新的数学语言,它能精确地谈论"在不可微点的导数"、"右端不连续的微分方程的解"、"加速度是测度的运动方程"。这套语言就是**非光滑分析(nonsmooth analysis)**。
本质洞察:接触力学的非光滑性不是建模的"近似缺陷",而是物理实在的忠实反映。真实世界中,刚体确实不能互相穿透(这是一个硬的单边约束,没有光滑过渡),干摩擦确实在静止时能取一整个力的范围(这是一个集值关系),刚性碰撞确实在极短时间内改变动量(这是一个冲量)。如果你用光滑模型(如弹簧-阻尼接触、正则化摩擦)去逼近,你引入的反而是近似误差;非光滑模型才是"零误差"的理想极限。非光滑分析的任务,就是让这个理想极限在数学上严格可操作。
在展开三大来源之前,必须先厘清一件容易混淆的事:"非光滑"在本章有两个层次的含义,它们对应两套不同的数学工具,初学者常把它们搅在一起。
- 层次一:静态非光滑(函数不可微)。 某个标量函数(如势能、间隙函数、摩擦力关于速度的关系)在某些点不可微,但函数本身是良定义的、连续的(或至少 Lipschitz 的)。处理工具是**广义梯度/次微分**(§2、§3)——给不可微点配一个"导数集合"。
- 层次二:动态非光滑(方程的解不光滑)。 微分方程的右端不连续,或者解本身(如速度)会跳变。此时"解"是什么都需要重新定义。处理工具是**微分包含 + Filippov 解**(§4)和**测度微分包含**(§5)。
二者通过 Clarke 梯度联系起来(§4 会看到 Filippov 凸化与 Clarke 梯度的对偶),但在学习时务必分清:§2、§3 是给"函数"配导数,§4、§5 是给"方程"配解。下面三大来源的分类,会同时标注每种来源触发的是哪个层次。
如果不这样做会怎样:四种"假装光滑"的失败¶
在系统建立非光滑工具之前,先看看工程上常见的四种"假装光滑"的做法,以及它们各自在什么地方失败。这不是要否定这些做法(它们在合适场景下都有用),而是要让你看清"光滑化"付出的代价,从而理解为什么我们需要直面非光滑。
做法一:弹簧-阻尼接触(penalty / compliant contact)。 把"不能穿透"这个硬约束换成一个很硬的弹簧:一旦穿透深度 \(d>0\),就施加恢复力 \(\lambda = k_n d + b_n \dot d\)(\(k_n\) 很大)。这样一切都光滑了。代价:(1) \(k_n\) 必须取得极大才能让穿透可忽略,导致动力学是"刚性(stiff)"的,显式积分器需要极小步长(数值刚性问题);(2) 物理上引入了不存在的弹性,刚性接触的特征(如完全非弹性碰撞后立即静止)无法精确再现;(3) \(k_n\)、\(b_n\) 成了需要手调的"魔法参数",缺乏物理依据。
做法二:正则化摩擦(regularized / smoothed friction)。 把 Coulomb 摩擦在 \(v_t=0\) 处的集值跳变换成一条光滑曲线,例如 \(F_t = -\mu N \tanh(v_t/\varepsilon)\)。代价:(1) "静摩擦"消失了——在 \(v_t=0\) 附近,物体总会缓慢蠕动(drift),无法真正静止,这在抓取、装配等需要"夹住不动"的任务里是致命的;(2) \(\varepsilon\) 越小越接近真实但动力学越刚性,又回到做法一的两难。
做法三:事件驱动 + 重置(event-driven hybrid)。 显式检测每个接触事件(触地、离地、粘滑切换),在事件处暂停积分、施加碰撞律(重置映射),再继续光滑积分。代价:(1) 当接触事件密集发生时(如物体落地后的多次微小弹跳,或多点接触同时切换),事件检测会"卡死"——Zeno 现象(无穷多事件在有限时间内发生);(2) 多个接触点的事件组合数爆炸,难以枚举。这正是专题 5(混合系统)单独处理、而专题 3(时步法)选择"不显式检测事件"的原因。
做法四:直接对不连续函数求导(无视非光滑)。 比如在做轨迹优化时,目标/约束里含 \(\min\)、\(\max\)、\(|\cdot|\)、\(\text{sign}\),却直接调用自动微分(autodiff)求"梯度"。代价:autodiff 在不可微点会返回一个**任意的**子梯度(取决于浮点比较的方向),既不是真正的梯度(不存在),优化器据此前进可能在不可微点附近振荡、停滞,或收敛到伪稳定点。§3 会精确解释这里 autodiff 实际返回的是 \(\partial_B\)(Bouligand 子微分)的某一个元素,以及为什么这对半光滑 Newton 恰好够用、对一般梯度下降却危险。
本质洞察:上面四种做法的共同逻辑是"把非光滑藏起来"——藏进大刚度、藏进正则化参数、藏进事件检测、藏进 autodiff 的默认行为。但非光滑性是守恒的:你在一个地方抹平它,它就在另一个地方(数值刚性、物理失真、Zeno、伪梯度)冒出来。非光滑分析的态度截然相反:不藏,而是正面建模。给不可微点一个诚实的"导数集合",给不连续方程一个诚实的"解概念",给冲击一个诚实的"测度"。代价是数学更难,回报是模型更真、求解更稳、且可证明。
历史:非光滑分析如何成为一门学科¶
非光滑分析作为独立学科的成形有几条并行的线索,值得简要梳理,因为它解释了"为什么有这么多看起来重复的次微分概念"。
凸分析的奠基(1960s–1970s)。 Rockafellar 的 Convex Analysis(1970)系统化了凸函数的次微分理论。但凸性是很强的假设——接触力学里大量函数(如 \(-|x|\)、\(\min_i \phi_i\))不是凸的。
Clarke 的突破(1973–1975)。 Frank Clarke 在其博士论文及 1975 年的论文中,定义了**对任意局部 Lipschitz 函数**(不要求凸、不要求可微)都适用的广义方向导数和广义梯度。他的天才之处是:通过取 \(\limsup\) 构造一个**自动凸**的广义方向导数 \(f^\circ(x;v)\),于是可以借用凸分析的全部机器。这是非光滑分析从"凸"走向"一般 Lipschitz"的关键一步。Clarke 1983 年的专著 Optimization and Nonsmooth Analysis(后被 SIAM 收入经典丛书)成为这一领域的开山教材。
Mordukhovich 的非凸路线(mid-1970s 起)。 几乎同时,Boris Mordukhovich 走了一条不同的路:他不要求次微分是凸的,而是通过法锥的极限构造(limiting/basic subdifferential)得到一个可能非凸、但信息更精细的对象。代价是失去了凸性带来的便利,回报是更紧的最优性条件和灵敏度刻画。Clarke 次微分恰好是 Mordukhovich 次微分的凸包——这个关系是 §3 的核心。
Filippov 的微分方程路线(1960 起)。 与上面的"静态"路线并行,A. F. Filippov 从 1960 年起研究右端不连续的微分方程,1988 年的专著 Differential Equations with Discontinuous Righthand Sides 成为这一方向的根。这条线直接服务于控制工程(滑模控制)和接触力学(stick-slip)。
Moreau 的凸分析-力学融合(1960s–1970s)。 Jean-Jacques Moreau 把凸分析直接用于力学,1971 年提出扫动过程(sweeping process),开创了用测度微分包含描述含碰撞的刚体动力学的传统。这条线是专题 3 时步法的直接源头。
Rockafellar–Wets 的大综合(1998)。 最后,Rockafellar 和 Wets 的 Variational Analysis(Springer Grundlehren 317,近 1000 页)把上述所有线索统一进"变分分析(variational analysis)"这一总框架,成为该领域的百科全书。
理解了这段历史,你就明白为什么本章有四种次微分(§3):它们不是冗余,而是不同研究者为不同目的发展的工具,各有其最优适用域。下面我们正式展开三大非光滑来源。
理论:三大非光滑来源的精确刻画¶
我们用一个统一的记号系统来刻画三大来源。设机器人构型为 \(q\in\mathbb{R}^{n_q}\)(关节角等广义坐标),广义速度为 \(v=\dot q\in\mathbb{R}^{n_v}\),动力学由 Euler–Lagrange 方程给出:
其中 \(M(q)\succ 0\) 是质量矩阵,\(C\) 是科氏/离心项,\(g\) 是重力项,\(\tau\) 是关节力矩,\(J(q)\) 是接触雅可比,\(\lambda\) 是接触力(含法向与切向分量)。非光滑性全部藏在 \(\lambda\) 与 \((q,v)\) 的关系里——也就是接触力如何依赖构型和速度。下面逐一拆解。
来源一:单边约束(Signorini 条件)——集值的法向力¶
接触的第一个非光滑来源是**非穿透的单边性**。设接触间隙函数为 \(\phi(q)\)(两物体最近点的有符号距离,\(\phi>0\) 分离、\(\phi=0\) 接触、\(\phi<0\) 穿透,物理上禁止)。法向接触力 \(\lambda_n\ge 0\)(只能推、不能拉)。物理事实是:
读作"\(\lambda_n\ge 0\),\(\phi(q)\ge 0\),且 \(\lambda_n\cdot\phi(q)=0\)"。这就是 Signorini 条件(专题 1 已引入,这里从非光滑视角重看)。它说:分离时无力(\(\phi>0\Rightarrow\lambda_n=0\)),受力时贴合(\(\lambda_n>0\Rightarrow\phi=0\))。
非光滑在哪里? 把法向力看作间隙的函数 \(\lambda_n=\Lambda(\phi)\)。Signorini 条件等价于这个"函数"是:
注意 \(\phi=0\) 处 \(\Lambda\) 取一整个区间 \([0,+\infty)\)——这不是普通函数,而是一个**集值映射(set-valued map)**。这是层次一(静态)非光滑的典型:关系本身良定义(它精确描述了物理),但无法写成单值光滑函数。
更深刻的刻画用**法锥(normal cone)**。设可行集 \(K=\{q:\phi(q)\ge 0\}\)。回顾凸分析:闭凸集 \(C\) 在点 \(x\) 的法锥是 \(N_C(x)=\{v:\langle v,y-x\rangle\le 0,\ \forall y\in C\}\)(所有"向外"的方向)。可以证明,Signorini 条件等价于法向力属于可行集的法锥:
其中 \(N_{\mathbb{R}_+}(\phi)\) 是非负实轴 \(\mathbb{R}_+=[0,\infty)\) 在点 \(\phi\) 的法锥:
阶段小结:到这里我们完成了第一个来源的刻画——单边约束的非光滑性体现为法向力是间隙的**集值函数**,精确语言是"力属于可行集的法锥"。接下来要做的是看第二个来源(摩擦),它的非光滑性更复杂,因为它同时涉及力的大小约束和方向耦合。
这个"力 ∈ 法锥"的表述极其重要,它是后面一切的模板:接触力学里所有的力,都不是构型的光滑函数,而是属于某个锥。法向力属于 \(\mathbb{R}_+\) 的法锥,摩擦力属于摩擦锥的法锥(下面),这个统一视角会在 §6 把所有接触条件压缩成一个变分不等式。
我们用一个对比表总结 Signorini 条件的"不是 X 而是 Y":
| 直觉(错误) | 实际(正确) | 为什么 |
|---|---|---|
| 法向力是穿透深度的函数 \(\lambda_n=k\cdot\max(0,-\phi)\) | 法向力是间隙的**集值映射**,\(\phi=0\) 处取 \([0,\infty)\) | 刚体不允许穿透,没有"深度"可言;力由约束(其他物体、运动)决定,而非由形变决定 |
| Signorini 是一条曲线 | Signorini 是一个**互补条件**(两条射线拼成的 L 形集合) | \((\lambda_n,\phi)\) 的可行点集是 \(\{\lambda_n=0,\phi\ge0\}\cup\{\lambda_n\ge0,\phi=0\}\),是非光滑的 L 形 |
来源二:Coulomb 摩擦——集值的切向力与粘滑切换¶
第二个来源是**干摩擦(dry / Coulomb friction)**,它是接触力学里数学上最不友好的部分(专题 2 已专门讨论其几何,这里聚焦其非光滑结构)。设切向速度为 \(v_t\in\mathbb{R}^2\)(接触平面内),切向摩擦力为 \(\lambda_t\in\mathbb{R}^2\)。Coulomb 律是:
其中 \(\mu>0\) 是摩擦系数。非光滑在哪里? 把摩擦力看作切向速度的函数 \(\lambda_t = \Phi(v_t)\)(固定 \(\lambda_n\)):
在 \(v_t=0\) 处,\(\Phi\) 取一整个圆盘——又是集值映射。这正是 §2.5 的运行示例:一维情形下,\(\Phi(v_t)=-\mu\lambda_n\,\text{Sign}(v_t)\),其中 \(\text{Sign}\) 是集值符号函数
而 \(-\mu\lambda_n\,\text{Sign}(v_t)\) 恰好是 Clarke 广义梯度 \(\partial(\mu\lambda_n|v_t|)\)(§2 会严格证明)。粘滑切换(stick-slip)的数学根源就是这个集值在 \(v_t=0\) 处的"开口":当物体即将从静止启动,摩擦力可以在区间 \([-\mu\lambda_n,+\mu\lambda_n]\) 内"自由调整"以维持静止,直到外力超过 \(\mu\lambda_n\) 才滑动。
本质洞察:Coulomb 摩擦的非光滑性比 Signorini 更"恶",因为它同时违反三个良态条件:(1) 它**非光滑**(\(v_t=0\) 处集值);(2) 它**非单调**(在 \(v_t>0\) 区域 \(\lambda_t\) 是常数 \(-\mu\lambda_n\),速度增大力不增大,违反"力随速度单调");(3) 当 \(\lambda_n\) 本身也是未知量时(法向与切向耦合),整个问题**非凸**。这三条叠加导致 Painlevé 佯谬——存在无解或多解的构型(专题 2 详述)。本章 §6 会从非光滑视角解释:正是 Coulomb 摩擦让接触 LCP 失去 P-matrix 性质,从而失去解的存在唯一性保证。
把摩擦力也用法锥语言写出来:定义摩擦锥 \(\mathcal{K}_\mu=\{\lambda:\|\lambda_t\|\le\mu\lambda_n\}\)(专题 2 的二阶锥)。Coulomb 律的"最大耗散原理(maximal dissipation)"表述是:摩擦力使切向滑动的功率耗散最大,等价于
即切向速度的反向属于"摩擦力可行圆盘"在 \(\lambda_t\) 处的法锥。又是"\(\cdot \in\) 法锥"的模板!这进一步印证了上面的洞察:接触力学的所有力都是法锥包含。
来源三:碰撞冲击——速度的跳变与测度¶
前两个来源是层次一(静态,函数集值),第三个来源是层次二(动态,解跳变),数学上最深。考虑一个刚性碰撞:脚以速度 \(v^-<0\)(向下)撞向刚性地面。碰撞后,脚不能继续向下(非穿透),所以法向速度突变。最简单的完全非弹性碰撞(restitution \(e=0\))令法向速度瞬间归零:\(v^+=0\)。于是速度 \(v(t)\) 在碰撞时刻 \(t^\star\) 不连续(从 \(v^-\) 跳到 \(v^+\))。
非光滑在哪里? 加速度 \(\dot v\) 是速度的导数。但速度在 \(t^\star\) 跳变,跳变函数的导数(在分布意义下)是一个 Dirac 测度:\(\dot v = (v^+-v^-)\delta_{t^\star} + (\text{光滑部分})\)。换言之,碰撞瞬间的"加速度"是无穷大、持续零时间、但积分(动量改变量)有限——这正是**冲量(impulse)**。
经典 Euler–Lagrange 方程 \(M\dot v = \ldots + J^\top\lambda\) 此时失效,因为左边 \(M\dot v\) 含 Dirac 测度,右边 \(\lambda\) 也必须是测度(冲量 \(J^\top\Lambda\delta_{t^\star}\))。我们必须把方程理解为**测度的等式**,即对任意时间区间积分后成立:
其中 \(dv\) 是速度的微分测度(含 Dirac),\(d\Lambda\) 是接触冲量测度。这就是**测度微分包含(measure differential inclusion, MDI)**的雏形,§5 会完整展开,并连接到 Moreau 扫动过程与专题 3 的时步法。
本质洞察:碰撞的非光滑性迫使我们重新定义"运动方程"本身。在自由飞行(系统 A)里,\(\dot v\) 是有限值的函数,方程是逐点(pointwise)成立的等式。在含碰撞的接触里,\(\dot v\) 是测度(含 Dirac),方程只能在测度/积分意义下成立。这不是数学家的吹毛求疵——它直接决定了仿真器的正确写法:正确的时步法离散的是测度(冲量),而不是加速度。这就是为什么 Moreau–Jean 格式以"速度-冲量"为基本变量,而不是"位置-加速度"——专题 3 的核心设计选择,根源在此。
我们用一张穷举式的分类表(认知工具 E:系统性分类)总结三大来源,让你获得"诊断非光滑"的思考框架,而非记忆清单:
| 来源 | 物理现象 | 数学对象 | 非光滑层次 | 标志公式 | 处理工具(本章) |
|---|---|---|---|---|---|
| 单边约束 | 非穿透、只推不拉 | 集值映射 / 法锥 | 层次一(静态) | \(0\le\lambda_n\perp\phi(q)\ge0\) | Clarke 梯度(§2)、法锥与 VI(§6) |
| Coulomb 摩擦 | 粘滑切换、最大耗散 | 集值映射 / 集值符号 | 层次一(静态) | \(\lambda_t=-\mu\lambda_n\,\text{Sign}(v_t)\) | Clarke 梯度(§2.5)、Mordukhovich(§3) |
| 碰撞冲击 | 速度跳变、冲量 | 测度 / Dirac | 层次二(动态) | \(M\,dv=\ldots+J^\top d\Lambda\) | 测度微分包含(§5)、Moreau 扫动(§5) |
| (派生)粘滑动态 | 滑模、stick-slip 轨迹 | 不连续右端 ODE | 层次二(动态) | \(\dot x=f(x)\),\(f\) 在切换面不连续 | 微分包含、Filippov 解(§4) |
注意最后一行:当 Coulomb 摩擦(层次一)嵌入到动力学中,它会导致右端不连续的微分方程,从而触发层次二——这就是 §4 微分包含的物理来源。三大来源不是孤立的,它们通过动力学耦合,最终都汇入"非光滑动力系统"这个统一对象。
⚠️ 常见陷阱¶
💡 概念误区:把"非光滑"等同于"不连续" 新手想法:"非光滑分析就是研究不连续函数的,因为接触力会突然出现/消失。" 实际上:非光滑分析的核心对象是 Lipschitz 连续但不可微**的函数(如 \(|x|\)、\(\min\)、\(\max\)),它们**连续但不可导。真正的不连续(如阶跃函数、不连续右端)是更进一步的层次(§4 的微分包含、§5 的测度),且通常通过"把不连续函数的导数理解为测度"或"把不连续右端凸化为微分包含"来处理。混淆这两者会导致用错工具:对 Lipschitz 函数用 Clarke 梯度(§2),对不连续右端用 Filippov 凸化(§4)。 为什么重要:选错工具,证明就垮。比如对 \(|x|\) 用"测度导数"是杀鸡用牛刀且会出错(它有良定义的 Clarke 梯度 \([-1,1]\));对不连续 sign 函数的 ODE 用 Clarke 梯度则不够(需要 Filippov 凸化得到滑模解)。
💡 概念误区:认为光滑化(penalty/正则化)是"无害的近似" 新手想法:"反正参数取得足够极端(\(k_n\) 足够大、\(\varepsilon\) 足够小),光滑模型就任意接近真实,没有本质区别。" 实际上:光滑化引入的不是"小误差",而是**改变了问题的数学类型**。硬约束 Signorini 是互补问题(组合结构),penalty 把它变成光滑 ODE(连续结构)——后者的解在极限 \(k_n\to\infty\) 下确实收敛到前者,但收敛是奇异的(singular perturbation),伴随刚性、边界层、数值病态。物理上,正则化摩擦永远无法表达真正的静摩擦(恒有蠕动)。 为什么重要:在抓取、装配、精密操作中,"能否真正夹住不动"是任务成败的关键,正则化摩擦在此必然失败。理解这一点,你才会在该用硬约束时坚持用硬约束,而不是图省事光滑化。
🧠 思维陷阱:以为"事件驱动 + 重置"总能处理接触 新手想法:"只要我足够仔细地检测每个接触事件并施加碰撞律,就能精确仿真任何接触系统。" 实际上:事件驱动法在**接触事件密集**时崩溃——Zeno 现象(有限时间内无穷多次碰撞,如小球落地后越弹越快地无穷次弹跳)让事件检测永远无法推进;多接触点的事件组合数随接触对数指数增长。这正是现代时步法(专题 3)故意不显式检测事件、而是用测度微分包含统一处理整个时间步内所有接触的根本原因。 正确思维:面对接触系统,先问"事件是稀疏还是密集?接触点是单个还是多个?"稀疏单点用事件驱动(专题 5 的混合系统);密集多点用时步法(专题 3)。这个判断直接决定仿真架构。
练习¶
练习 7.1.1(诊断题,在草稿纸上完成) 考虑一个二维方块静止地放在水平桌面上,你用一个缓慢增大的水平力 \(F(t)=ct\)(\(c\) 为小常数)推它。请分析整个过程中出现了哪些非光滑来源,分别属于层次一还是层次二,并指出方块从静止到滑动的临界时刻 \(t^\star\) 满足什么条件。(提示:先粘住,摩擦力在 \([-\mu N, \mu N]\) 内调整以平衡 \(F\);当 \(F\) 超过 \(\mu N\) 时开始滑动。临界处涉及集值符号函数的"开口"。)
练习 7.1.2(对比题) 对同一个"小球竖直落到刚性地面并反弹"的问题,分别写出:(a) 用 penalty 接触(弹簧-阻尼)建模时的运动方程(光滑 ODE);(b) 用硬约束 + 碰撞律(restitution \(e\))建模时的运动方程(含测度)。说明在 \(e=0\)(完全非弹性)情形下,两种模型的解在定性上有何不同(提示:penalty 模型小球会有阻尼振荡,硬约束模型小球碰后立即静止贴地)。讨论:随着弹簧刚度 \(k_n\to\infty\)、阻尼调到临界,penalty 解是否收敛到硬约束解?收敛是否"均匀"?
练习 7.1.3(开放思考题) 本节说"非光滑性是守恒的,你在一处抹平它,它在另一处冒出来"。请针对正则化摩擦 \(F_t=-\mu N\tanh(v_t/\varepsilon)\),具体指出:当 \(\varepsilon\to 0\) 时,非光滑性以什么形式"冒出来"?(提示:考虑这个光滑 ODE 的刚性——右端关于 \(v_t\) 的 Lipschitz 常数随 \(\varepsilon\to0\) 如何变化?这对显式积分器的稳定步长意味着什么?)这个练习帮你理解"正则化把非光滑转化为数值刚性"这一守恒律。
§7.2 Clarke 广义梯度:给不可微点配一个"导数集合" ⭐⭐⭐¶
动机:梯度下降走到尖点,下一步往哪走?¶
上一节我们看到,接触力学里到处是 Lipschitz 但不可微的函数:\(|x|\)、\(\min_i\phi_i(q)\)、\(\max\)、集值符号函数背后的 \(|v_t|\)。现在面对一个具体的、迫在眉睫的问题。
假设你在做一个接触相关的优化(比如轨迹优化的内层),目标函数含一项 \(f(x)=|x|\)(一维抽象,代表"某个量的绝对值",如切向滑动距离的代价、或 \(L_1\) 正则)。你想用梯度下降。在 \(x>0\) 处 \(f'(x)=+1\),在 \(x<0\) 处 \(f'(x)=-1\)。一切顺利,直到你走到 \(x=0\)——这是一个尖点(kink),\(f\) 在此不可微。下一步往哪走? 经典导数在这里根本不存在;硬要计算 \(\lim_{h\to0}\frac{|0+h|-|0|}{h}\),从右边得 \(+1\),从左边得 \(-1\),极限不存在。
朴素的应对是"随便选一个"——比如规定 \(f'(0)=0\)(很多自动微分库的默认)。但这会出问题:如果在 \(x=0\) 处真正的最优在别处(比如目标还有别的项把最优推到 \(x>0\)),那么 \(f'(0)=0\) 会让优化器误以为"已经到了驻点"而停下。我们需要的不是"随便选一个数",而是一个**诚实的、包含所有合理斜率的集合**——在 \(x=0\) 处,所有介于 \(-1\) 和 \(+1\) 之间的斜率都是"合理的"(它们是左右导数的所有凸组合)。这个集合 \([-1,+1]\) 就是我们想要的"广义梯度"。
把这个直觉一般化:对一个局部 Lipschitz 函数 \(f\),在不可微点 \(x\),我们希望定义一个集合 \(\partial f(x)\subset\mathbb{R}^n\),它满足:(i) 在 \(f\) 可微的点退化为单点集 \(\{\nabla f(x)\}\)(与经典导数兼容);(ii) 在凸函数情形退化为经典次微分(与凸分析兼容);(iii) 它是凸紧集(便于借用凸分析的机器);(iv) 最优性条件 \(0\in\partial f(x^\star)\) 成立(能用于优化);(v) 有完整的运算法则(和、复合、链式)。Clarke 1975 年构造的广义梯度恰好满足全部五条。这一节就是把这个构造讲透。
本质洞察:广义梯度的哲学是"用集合换确定性"。在光滑世界,每点有唯一的导数(一个向量),它精确告诉你函数局部如何变化。在非光滑世界,不可微点的"变化率"本身是多值的(依赖方向),单个向量无法表达。Clarke 的解决方案不是"挑一个向量假装是导数",而是"诚实地承认有一整个集合的合理斜率,并把这个集合作为一等公民来运算"。这种"用集值对象替代单值对象"的思想,是整个非光滑分析(乃至变分分析)的灵魂——你会在 §3(更多次微分都是集合)、§4(微分包含的右端是集合)、§6(法锥是集合)反复看到它。
如果不这样做会怎样:三种"伪导数"的失败¶
在给出 Clarke 的正式定义前,看看三种看似合理但失败的"伪导数"定义,理解 Clarke 定义中每个元素的必要性。
伪导数一:只用单侧导数。 定义 \(f'(0)\) 为右导数 \(f'_+(0)=\lim_{h\downarrow0}\frac{f(h)-f(0)}{h}\)。对 \(f=|x|\) 给出 \(+1\)。失败:不对称(凭什么用右不用左?),且对很多函数右导数也不存在(如 \(f(x)=x\sin(1/x)\) 在 \(0\) 处)。它丢掉了"\(-1\) 也是合理斜率"这一信息。
伪导数二:用所有方向导数的集合。 定义 \(\partial f(x)=\{f'(x;v):v\in\mathbb{R}^n,\|v\|=1\}\),其中 \(f'(x;v)=\lim_{h\downarrow0}\frac{f(x+hv)-f(x)}{h}\) 是经典方向导数。失败:(a) 方向导数本身可能不存在(极限不存在);(b) 即使存在,这个集合一般不是凸的(如 \(f=-|x|\),方向导数集是 \(\{-1,-1\}\) 退化,但对二维的 \(-\|x\|\) 会得到非凸集),失去凸分析的便利;(c) 它对 \(f\) 在 \(x\) 附近的行为不稳定(不能保证运算法则)。
伪导数三:极限梯度集(不取凸包)。 定义 \(\partial_B f(x)=\{\lim\nabla f(x_k):x_k\to x,\ \nabla f(x_k)\text{ 存在}\}\)(这其实就是 §3 的 Bouligand 子微分)。对 \(f=|x|\) 给出 \(\{-1,+1\}\)(两个孤立点)。部分成功但仍有缺陷:它**不是凸集**(\(\{-1,+1\}\) 中间的 \(0\) 不在其中)。这导致两个问题:(a) 最优性条件 \(0\in\partial_B f\) 在 \(x=0\) 处不成立(尽管 \(0\) 是 \(|x|\) 的最优点!),漏判最优;(b) 缺乏完整的链式法则。
Clarke 的修正:取伪导数三的**凸包**!定义 \(\partial f(x)=\text{conv}\,\partial_B f(x)=\text{conv}\{\lim\nabla f(x_k)\}\)。对 \(|x|\) 给出 \(\text{conv}\{-1,+1\}=[-1,+1]\),凸集,包含 \(0\),最优性条件成立。这就是 Clarke Gradient Formula(§下面 T2),也是计算 Clarke 梯度最实用的公式。但 Clarke 的原始定义走的是另一条路(通过广义方向导数),两条路殊途同归——理解这个"殊途同归"正是掌握本节的关键。
区分 Bouligand 子微分 \(\partial_B f\) 与 Clarke 次微分 \(\partial f\):\(\partial f=\text{conv}\,\partial_B f\)。前者是离散点集("选对分支后的梯度"),后者是其凸包(填满中间)。半光滑 Newton 用 \(\partial_B\)(§6),优化的最优性条件用 \(\partial\)(凸性必要)——这个区别在 §3 会反复出现,是博士级理解的分水岭。
历史:Clarke 1975 的天才一招¶
Frank Clarke 在 1973 年的博士论文(导师是 Rockafellar)和 1975 年的论文 "Generalized gradients and applications"(Trans. AMS)中给出广义梯度。他面临的难题是:非凸函数没有现成的次微分理论,而 Lipschitz 函数(接触力学的主角)通常非凸。他的天才一招是:不直接定义梯度集合,而是先定义一个"广义方向导数" \(f^\circ(x;v)\),并通过取 \(\limsup\) 让它自动成为凸函数(关于 \(v\)),然后把 \(\partial f(x)\) 定义为这个凸函数的(凸分析意义的)次微分。 这样一来,凸分析的全部机器(支撑函数、对偶、运算法则)都能直接搬过来。
下面我们就沿着 Clarke 的原路走一遍,再证明它等价于上面的 Gradient Formula。
理论:Clarke 广义方向导数与广义梯度¶
前提:本节始终假设 \(f:\mathbb{R}^n\to\mathbb{R}\) 在 \(x\) 的邻域内**局部 Lipschitz**,即存在邻域 \(U\ni x\) 和常数 \(L>0\) 使 \(|f(y)-f(z)|\le L\|y-z\|\) 对所有 \(y,z\in U\) 成立。这是整套理论的基本工作假设,原因有二:(i) Lipschitz 是接触力学函数的普遍性质(间隙、摩擦势、\(\min/\max\) 都 Lipschitz);(ii) 由 Rademacher 定理(T1),Lipschitz 函数几乎处处可微,这给了 Gradient Formula 立足点。
定义 7.2.1(Clarke 广义方向导数) \(f\) 在 \(x\) 沿方向 \(v\) 的 Clarke 广义方向导数为
逐字拆解这个定义,每个元素都有用意:
- \(\limsup\)(上极限)而非 \(\lim\):因为 \(f\) 不可微,普通极限可能不存在。\(\limsup\) 总是存在(可能为 \(+\infty\),但 Lipschitz 保证它有限,\(\le L\|v\|\))。取上极限相当于"取最悲观(最大)的变化率"。
- \(y\to x\) 而非固定 \(y=x\):这是与经典方向导数 \(f'(x;v)=\lim_{t\downarrow0}\frac{f(x+tv)-f(x)}{t}\) 的关键区别!经典方向导数只看从 \(x\) 出发的差商;Clarke 让基点 \(y\) 也在 \(x\) 附近游走。为什么? 正是这个"基点游走"让 \(f^\circ(x;\cdot)\) 自动成为凸函数(下面定理),并让它"稳定"(对 \(f\) 在 \(x\) 附近的扰动不敏感),从而支持运算法则。这是 Clarke 定义的精髓。
- \(t\downarrow 0\)(单侧,从正向趋于 0):方向导数天然是单侧的(沿 \(v\) 正方向)。
定理 7.2.2(\(f^\circ\) 的基本性质) 设 \(f\) 在 \(x\) 局部 Lipschitz(常数 \(L\))。则: 1. \(v\mapsto f^\circ(x;v)\) 是**有限的、正齐次的、次可加的**,从而是**凸函数**;且 \(|f^\circ(x;v)|\le L\|v\|\)。 2. \(f^\circ(x;-v) = (-f)^\circ(x;v)\)。 3. \((x,v)\mapsto f^\circ(x;v)\) 是上半连续的。
证明(第 1 条,凸性是关键,完整给出)。
有限性:由 Lipschitz,\(\left|\frac{f(y+tv)-f(y)}{t}\right|\le\frac{L\|tv\|}{t}=L\|v\|\),故差商有界,\(\limsup\) 有限且 \(|f^\circ(x;v)|\le L\|v\|\)。
正齐次性(\(f^\circ(x;\alpha v)=\alpha f^\circ(x;v)\),\(\alpha>0\)):作变量替换 \(s=\alpha t\),
次可加性(\(f^\circ(x;v+w)\le f^\circ(x;v)+f^\circ(x;w)\),这是凸性的核心):
第一项中令 \(y':=y+tw\),当 \(y\to x,t\downarrow0\) 时 \(y'\to x,t\downarrow0\),故其 \(\limsup\le f^\circ(x;v)\);第二项 \(\limsup\le f^\circ(x;w)\)。由于 \(\limsup(A+B)\le\limsup A+\limsup B\),得 \(f^\circ(x;v+w)\le f^\circ(x;v)+f^\circ(x;w)\)。注意:这一步正是"基点游走 \(y\to x\)"发挥作用的地方——我们把基点从 \(y\) 平移到 \(y'=y+tw\) 仍落在 \(x\) 附近,这只有在 \(y\) 可游走时才合法。若用固定基点的经典方向导数,这一步行不通,次可加性(凸性)就得不到。
正齐次 + 次可加 \(\Rightarrow\) 凸(标准结论:\(f^\circ(x;\lambda v+(1-\lambda)w)\le\lambda f^\circ(x;v)+(1-\lambda)f^\circ(x;w)\) 由两性质直接推出)。\(\blacksquare\)
阶段小结:到这里我们完成了 Clarke 定义的第一步——构造了一个关于方向 \(v\) 自动凸的广义方向导数 \(f^\circ(x;v)\),并看清了"基点游走 \(y\to x\)"是凸性的来源。接下来要做的是:利用这个凸函数,借助凸分析的"支撑函数 ↔ 凸集"对偶,把它翻译成一个凸集——那就是 Clarke 广义梯度。
定义 7.2.3(Clarke 广义梯度 / 次微分) 既然 \(f^\circ(x;\cdot)\) 是凸的正齐次函数,由凸分析它必是某个唯一闭凸集的**支撑函数**。这个集合就是 Clarke 广义梯度:
等价地,\(f^\circ(x;v)=\max_{\xi\in\partial f(x)}\langle\xi,v\rangle\)(支撑函数关系)。直觉:\(\partial f(x)\) 收集了所有"斜率向量" \(\xi\),使得沿任意方向 \(v\) 的广义变化率 \(f^\circ(x;v)\) 都不小于 \(\xi\) 在该方向的投影 \(\langle\xi,v\rangle\)。
定理 7.2.4(\(\partial f\) 的基本性质) 设 \(f\) 在 \(x\) 局部 Lipschitz(常数 \(L\))。则: 1. \(\partial f(x)\) 是 \(\mathbb{R}^n\) 中**非空、凸、紧**的集合,且 \(\partial f(x)\subseteq\{\xi:\|\xi\|\le L\}\)(被 Lipschitz 常数界住)。 2. 可微相容:若 \(f\) 在 \(x\) 连续可微(\(C^1\)),则 \(\partial f(x)=\{\nabla f(x)\}\)(退化为单点,与经典梯度一致)。 3. 凸相容:若 \(f\) 是凸函数,则 \(\partial f(x)\) 等于凸分析意义的次微分 \(\{\xi:f(y)\ge f(x)+\langle\xi,y-x\rangle,\forall y\}\)。 4. 最优性条件:若 \(x^\star\) 是 \(f\) 的局部极小点,则 \(0\in\partial f(x^\star)\)。 5. 上半连续性(闭图):若 \(x_k\to x\),\(\xi_k\in\partial f(x_k)\),\(\xi_k\to\xi\),则 \(\xi\in\partial f(x)\)。
性质 2、3 正是动机里要求的"与经典/凸情形兼容";性质 4 是优化的基石;性质 1 的凸紧是借用凸分析的前提。这五条共同确立了 Clarke 梯度作为"导数的合法推广"的地位。
最优性条件(性质 4)的证明:设 \(x^\star\) 局部极小。对任意方向 \(v\),当 \(t>0\) 足够小时 \(f(x^\star+tv)\ge f(x^\star)\),故差商 \(\frac{f(x^\star+tv)-f(x^\star)}{t}\ge0\)。取基点 \(y=x^\star\)(这是 \(\limsup\) 中允许的一支),得 \(f^\circ(x^\star;v)\ge0\) 对所有 \(v\)。于是 \(\max_{\xi\in\partial f}\langle\xi,v\rangle=f^\circ(x^\star;v)\ge0\) 对所有 \(v\)。若 \(0\notin\partial f(x^\star)\),由凸集分离定理存在 \(v_0\) 使 \(\langle\xi,v_0\rangle<0\) 对所有 \(\xi\in\partial f\),矛盾。故 \(0\in\partial f(x^\star)\)。\(\blacksquare\)
计算的利器:Gradient Formula(T2)¶
定义 7.2.3 在概念上完美,但实际计算 \(f^\circ(x;v)\) 的 \(\limsup\) 很麻烦。所幸有一个等价的、可操作的刻画,这是 Clarke 1983 专著的 Theorem 2.5.1:
定理 7.2.5(Clarke Gradient Formula,T2) 设 \(f\) 在 \(x\) 局部 Lipschitz。设 \(\Omega_f\) 是 \(f\) 不可微的点集(由 Rademacher 定理 T1,\(\Omega_f\) 是零测集),\(S\) 是任意零测集。则
即:在 \(x\) 附近取所有可微点列 \(x_k\to x\),算它们的梯度 \(\nabla f(x_k)\),收集所有收敛子列的极限,再取凸包。(允许额外排除一个零测集 \(S\),因为它不影响结果——这在数值上很有用,可以避开"坏"点。)
为什么 Gradient Formula 成立(直觉论证):Rademacher 定理保证 \(f\) 几乎处处可微,所以 \(x\) 附近"绝大多数"点都有经典梯度。这些梯度的极限点刻画了 \(f\) 在 \(x\) "从各个方向逼近时的斜率";取凸包恰好填补不可微点造成的"缺口",得到凸集。严格证明需要 Lebourg 均值定理(T4)连接差商与梯度,此处从略(见 Clarke 1983 §2.5),但其合理性已由动机里"伪导数三 + 取凸包"的讨论充分预示。
定理 7.2.6(Rademacher 定理,T1) \(\mathbb{R}^n\) 上局部 Lipschitz 的函数在 Lebesgue 测度意义下几乎处处(almost everywhere, a.e.)可微。
Rademacher 定理是 Gradient Formula 的立足石:正因为不可微点是零测集,"取可微点列逼近"才总是可行的。它的物理意义(T1 在接触中的应用):Coulomb 摩擦律作为 Lipschitz 函数,除了 stick-slip 临界点(\(v_t=0\),零测集)外处处可微——这就是为什么"几乎所有时刻"摩擦力是良定义的光滑函数,只在临界瞬间需要广义梯度。
运行示例:从 \(|x|\) 到 Coulomb 摩擦的广义梯度¶
理论讲完,必须落到接触力学的核心示例——Coulomb 摩擦律的广义梯度。这是本章前后呼应的关键计算,也是 §7.1 来源二留下的"欠条"。
例 1:绝对值 \(f(x)=|x|\)(一维,热身)。 在 \(x\ne0\) 处 \(f\) 可微,\(f'(x)=\text{sign}(x)\in\{-1,+1\}\)。在 \(x=0\) 处用 Gradient Formula:取 \(x_k\to0\),若 \(x_k>0\) 则 \(\nabla f(x_k)=+1\),若 \(x_k<0\) 则 \(-1\)。极限点集为 \(\{-1,+1\}\),凸包为
验证最优性条件:\(x=0\) 是 \(|x|\) 的全局极小,\(0\in[-1,+1]\) ✓。验证支撑函数:\(f^\circ(0;v)=|v|\)(直接算 \(\limsup\)),而 \(\max_{\xi\in[-1,1]}\xi v=|v|\) ✓。
例 2:一维 Coulomb 摩擦势 \(f(v_t)=\mu\lambda_n|v_t|\)。 这是摩擦的"耗散势"——摩擦力是它关于速度的(负)广义梯度。直接由例 1 缩放:
写成集值符号函数:\(\partial f(v_t)=\mu\lambda_n\,\text{Sign}(v_t)\)。摩擦力是耗散势的负广义梯度:\(\lambda_t\in-\partial f(v_t)=-\mu\lambda_n\,\text{Sign}(v_t)\)。在 \(v_t=0\) 处,\(\lambda_t\in[-\mu\lambda_n,+\mu\lambda_n]\)——这正是 §7.1 来源二里"粘住时摩擦力可取锥内任意值"的精确数学表达!stick-slip 的数学根源,就是 \(\partial(\mu\lambda_n|\cdot|)\) 在 \(v_t=0\) 处张开成区间 \([-\mu\lambda_n,+\mu\lambda_n]\)。 这就是 §7.1 留下的欠条,现在还清了。
本质洞察:摩擦力"在静止时取一整个区间"不是物理的模糊或建模的偷懒,而是 Clarke 广义梯度 \(\partial(\mu\lambda_n|v_t|)\) 在尖点处的精确值 \([-\mu\lambda_n,+\mu\lambda_n]\)。这个区间的宽度 \(2\mu\lambda_n\) 正是"最大静摩擦力的两倍"——它定量地刻画了"物体在被推动前,摩擦力有多大的调整余地"。一旦你接受"导数可以是集合",Coulomb 摩擦从一个"麻烦的特例"变成 Clarke 理论的一个干净推论。这就是非光滑分析的威力:它把工程师眼中的"恶心特例"统一进一个优美的数学框架。
例 3:二维 Coulomb 摩擦(耦合)。 二维切向速度 \(v_t\in\mathbb{R}^2\),耗散势 \(f(v_t)=\mu\lambda_n\|v_t\|\)(欧氏范数)。在 \(v_t\ne0\) 处可微,\(\nabla f=\mu\lambda_n\frac{v_t}{\|v_t\|}\)(单位向量缩放)。在 \(v_t=0\) 处用 Gradient Formula:取 \(v_t^{(k)}\to0\) 沿各个方向,\(\nabla f\) 的极限点是所有单位向量乘 \(\mu\lambda_n\),即半径 \(\mu\lambda_n\) 的**圆周**;取凸包得整个**闭圆盘**
摩擦力 \(\lambda_t\in-\partial f(0)\) = 半径 \(\mu\lambda_n\) 的圆盘——正是 §7.1 来源二的二维摩擦圆盘。注意这里凸包的作用:极限梯度只是圆周(边界),取凸包才填成实心圆盘,从而 \(0\in\partial f(0)\)(静止可平衡),最优性/平衡条件才对。
例 4:极大值函数 \(f(x)=\max(f_1(x),\dots,f_m(x))\)(\(f_i\) 均 \(C^1\))。 这是接触里 \(\max\)(如多接触约束的最严约束)的原型。在某点 \(x\),设**活跃指标集** \(I(x)=\{i:f_i(x)=f(x)\}\)(达到最大的那些 \(f_i\))。则
推导:在只有一个 \(f_{i^\star}\) 活跃的点,\(f=f_{i^\star}\) 在邻域内光滑,\(\partial_C f=\{\nabla f_{i^\star}\}\)。在多个 \(f_i\) 同时活跃的点,沿不同方向逼近时不同 \(f_i\) 成为最大者,可微点的梯度在 \(\{\nabla f_i:i\in I\}\) 中切换,极限点是这些梯度,取凸包得上式。\(\max\) 函数正则(凸函数的上确界仍"正则",§7.2 正则性分类),故这里是等号而非包含。对比 \(\min\) 函数:\(\min_i f_i=-\max_i(-f_i)\),由于取负破坏正则性,\(\min\) 一般**不正则**,其 \(\partial_C(\min_i f_i)(x)\) 只有上包含 \(\subseteq\text{conv}\{\nabla f_i:i\in I\}\)。这正是 §7.1 来源一的间隙函数 \(g(q)=\min_i\phi_i(q)\)(取最近接触)非正则的根源——也是练习 7.2.3 的理论依据。
本质洞察:\(\max\) 正则而 \(\min\) 不正则,这个"看似对称却不对称"的事实有深刻的几何根源。\(\max\) 是凸运算(凸函数的上确界仍凸),凸性自动带来正则性(§7.2);\(\min\) 是凹运算,破坏凸性进而破坏正则性。在接触力学里,这意味着"取最严格约束"(\(\max\) 型,如约束违反量 \(\max_i(-\phi_i)\))的灵敏度分析是良态的,而"取最近接触"(\(\min\) 型,如间隙 \(\min_i\phi_i\))的灵敏度分析在多接触同距处是病态的(链式法则只给上界)。这就是为什么多点接触的"哪个接触先激活"在数值上敏感——它本质是 \(\min\) 函数的非正则性。
例 5:距离函数 \(d_C(x)=\min_{y\in C}\|x-y\|\) 与投影(接触间隙的抽象)。 设 \(C\) 闭凸,\(d_C\) 是到 \(C\) 的距离(接触间隙函数的抽象——\(\phi(q)\) 本质是构型空间中到"接触流形"的有符号距离)。\(d_C\) 处处 Lipschitz(常数 1)。在 \(C\) **外部**点 \(x\notin C\),设投影 \(P_C(x)\)(\(C\) 上离 \(x\) 最近的点,凸集投影唯一),则 \(d_C\) 在 \(x\) 可微:
在 \(C\) 边界**点 \(x\in\partial C\),\(d_C(x)=0\) 是 \(d_C\) 的极小(\(d_C\ge0\)),故 \(0\in\partial_C d_C(x)\);具体地 \(\partial_C d_C(x)=N_C(x)\cap\mathbb{B}\)(法锥与单位球的交)。**这把 §7.1 的"接触力 ∈ 法锥"与距离函数的广义梯度联系起来:接触间隙 \(\phi\) 在接触发生处(\(\phi=0\))的广义梯度方向就是接触法向(法锥方向),接触力沿此方向。例 5 是 §7.8.2 prox-regularity 的铺垫——当 \(C\) 非凸("L 形"工件),\(P_C\) 在内凹角点多值、\(d_C\) 不可微且非 \(C^1\),广义梯度退化,这正是接触求解器在角点失稳的根源。
Clarke 次微分的运算法则(calculus)¶
要在复杂接触问题里实际使用 Clarke 梯度(如对 \(g(q)=\phi(\text{FK}(q))\) 这种复合函数求导),需要运算法则。这里给出三条最常用的,它们是 §7.7 桥接中"计算接触灵敏度"的工具。
定理 7.2.7(数乘与有限和,T 部分) 设 \(f,g\) 在 \(x\) 局部 Lipschitz。 - 数乘:\(\partial(sf)(x)=s\,\partial f(x)\)(对任意标量 \(s\),含负数——注意 \(s<0\) 时仍成立,因 \(\partial(-f)=-\partial f\),这是 Clarke 梯度对凸分析次微分的一大优势,后者只对非负数乘良好)。 - 和法则(包含式):\(\partial(f+g)(x)\subseteq\partial f(x)+\partial g(x)\)(Minkowski 和)。当 \(f,g\) 中至少一个**正则**(见下)时取等号。
定理 7.2.8(Clarke Chain Rule II,T3) 设 \(F:\mathbb{R}^n\to\mathbb{R}^m\) 局部 Lipschitz(分量 \(F_i\)),\(g:\mathbb{R}^m\to\mathbb{R}\) 局部 Lipschitz。则复合 \(h=g\circ F\) 满足
当 \(g\) 正则且 \(F\) 连续可微时取等号。这是计算接触间隙 \(g(q)=\phi(\text{FK}(q))\)(正运动学复合接触距离)的 Clarke 导数的工具(T3 的接触应用)。
定理 7.2.9(Lebourg 均值定理,T4) 设 \(f\) 在含线段 \([x,y]\) 的开集上局部 Lipschitz。则存在 \(u\in(x,y)\)(开线段上某点)和 \(\zeta\in\partial f(u)\) 使
这是光滑情形中值定理 \(f(y)-f(x)=\langle\nabla f(u),y-x\rangle\) 的非光滑推广,区别是 \(\nabla f(u)\) 换成 \(\partial f(u)\) 中的某个 \(\zeta\)。它在估计 Lipschitz 势函数的能量差时极有用(T4 的接触应用:势能差的界估计)。
运算法则的接触应用示范——逐步计算 \(g(q)=\phi(\text{FK}(q))\) 的广义梯度。 这是 T3(链式法则)在接触里最常见的计算:接触间隙 \(g\) 是"正运动学 FK 把关节角 \(q\) 映射到工作空间位姿、再由接触距离 \(\phi\) 度量"的复合。逐步走一遍:
- Step 1(识别复合结构):\(g=\phi\circ\text{FK}\),其中 \(\text{FK}:\mathbb{R}^{n_q}\to\mathbb{R}^{6}\)(位姿)通常 \(C^\infty\)(光滑,由旋转/平移复合),\(\phi:\mathbb{R}^6\to\mathbb{R}\)(最近距离)一般只 Lipschitz(在棱/角处不可微)。
- Step 2(外层 \(\phi\) 是否正则?):若接触是"面-面"(光滑接触),\(\phi\) 在该处 \(C^1\),正则;若是"角-面"或涉及 \(\min\)(多候选接触点取最近),\(\phi\) 可能非正则(§7.2 例 5、例 4)。
- Step 3(应用链式法则 T3):由于内层 \(\text{FK}\) 连续可微(Jacobian \(J_{FK}=\partial\text{FK}/\partial q\) 存在且连续),T3 给出
即"接触距离在工作空间的广义梯度,经正运动学 Jacobian 转置拉回关节空间"。当 \(\phi\) 在该位姿可微时,\(\partial_C\phi=\{\nabla\phi\}\)(单点),上式退化为 \(\nabla g=J_{FK}^\top\nabla\phi\)(经典链式法则)——这就是接触雅可比 \(J=\nabla g^\top\) 的来源! - Step 4(非正则情形的退化):若 \(\phi\) 非正则(角接触/多候选),T3 只给上包含 \(\partial_C g\subseteq J_{FK}^\top\partial_C\phi\),等号可能不成立。此时接触雅可比"多值",灵敏度分析须用 §7.3 的 Bouligand/limiting 工具(这是专题 4 可微仿真在角接触处的难点根源)。
这个逐步计算把抽象的 T3 落到"接触雅可比从哪来"这一具体问题,是 §7.7 桥接二的预演。
Lebourg 均值定理的接触应用示范——势能差的界。 设接触势 \(V(q)\) 局部 Lipschitz(常数 \(L\),如摩擦耗散势或 barrier 势),要估计两个构型 \(q_1,q_2\) 间的势能差。由 T4,存在 \(u\in(q_1,q_2)\)、\(\zeta\in\partial_C V(u)\) 使 \(V(q_2)-V(q_1)=\langle\zeta,q_2-q_1\rangle\)。结合 \(\|\zeta\|\le L\)(§7.2 定理 7.2.4,Clarke 梯度被 Lipschitz 常数界住):
即势能差被 Lipschitz 常数 \(\times\) 构型距离界住——这是证明接触系统能量有界、Lyapunov 函数良态(§7.4 非光滑 Lyapunov)的基础引理。T4 让我们在 \(V\) 不可微时仍能做这种"中值估计",光滑中值定理在此失效(\(\nabla V(u)\) 在不可微点不存在),而 T4 用 \(\partial_C V(u)\) 中的 \(\zeta\) 补上。
正则性(regularity):Clarke 何时"行为良好"¶
上面的运算法则多是包含式 \(\subseteq\),只在"正则"时取等号。正则性是一个重要概念,也是常见误区的来源。
定义 7.2.10(Clarke 正则) \(f\) 在 \(x\) 处**正则(regular)**,若对所有 \(v\),经典单侧方向导数 \(f'(x;v)=\lim_{t\downarrow0}\frac{f(x+tv)-f(x)}{t}\) 存在,且等于 Clarke 广义方向导数 \(f^\circ(x;v)\)。
正则性意味着"广义方向导数没有比经典方向导数提供更多坏消息"——\(f^\circ\)(取 \(\limsup\) 的悲观值)恰好等于 \(f'\)(老老实实的方向导数)。
哪些函数正则?(系统分类,认知工具 E) - \(C^1\) 函数:正则(\(f^\circ=f'=\langle\nabla f,v\rangle\))。 - 凸函数:正则(这是凸分析次微分与 Clarke 次微分一致的原因)。\(f=|x|\) 在 \(0\) 正则。 - 凸函数的非负组合、上确界(max):正则。\(\max_i f_i\)(\(f_i\) 凸或 \(C^1\))正则。 - 凹函数(如 \(-|x|\)):一般**不正则**!这是最重要的反例。\(f=-|x|\) 在 \(0\):\(f'(0;v)=-|v|\)(经典方向导数存在),但 \(f^\circ(0;v)=|v|\)(\(\limsup\) 取到 \(+1\) 和 \(-1\) 的较大变化)。二者不等(\(-|v|\ne|v|\) 除非 \(v=0\)),故不正则。 - \(\min\) 函数(如接触间隙 \(\min_i\phi_i\)):一般**不正则**(\(\min\) 是 \(\max\) 取负,凹性使其不正则),链式法则只给上包含。
本质洞察:"正则"不是"光滑"。这是中文社区最常见的误用。正则是 \(f^\circ=f'\) 的局部条件——凸函数、\(C^1\) 函数、max 函数都正则但**不一定光滑**(\(|x|\) 正则但在 \(0\) 不可微)。反过来,凹函数(光滑性不缺,但凹)在尖点处不正则。正则性刻画的是"广义方向导数是否如实反映单侧变化",与可微性是两个独立的维度。记住这个反例 \(-|x|\):它正则性的失败,正是 §3 引入 Mordukhovich 次微分的动机(Clarke 在 \(-|x|\) 处丢失信息,Mordukhovich 不丢)。
⚠️ 常见陷阱¶
💡 概念误区:把 Clarke 广义梯度当成唯一的非光滑微分概念
新手想法:"非光滑函数的导数就是 Clarke 广义梯度,没有别的。"
实际上:Clarke ∂ 对所有 Lipschitz 函数都良定义,但**永远是凸集**——这是优点(便于计算最优性)也是缺点(可能丢失信息)。经典反例:\(f(x)=-|x|\) 在 \(0\) 处,Clarke \(\partial f(0)=[-1,+1]\)(凸区间),但真正"有意义的斜率"只有 \(\{-1,+1\}\) 两个值;Clarke 把中间填满,信息被冲淡。用 Mordukhovich limiting 次微分得 \(\{-1,+1\}\),精准保留。
为什么重要:写论文做灵敏度分析(如证明 LCP 解映射的 Lipschitz 性,§7.7)必须用 Mordukhovich(信息精细),工程实现(求最优性、半光滑 Newton)用 Clarke 即可。选错会导致定理证不出或结论过松。这正是 §3 存在的理由。
💡 概念误区:误以为"Clarke 正则 = 光滑" 新手想法:"如果一个函数是 Clarke 正则的,那它应该是光滑(可微)的。" 实际上:正则是 \(f^\circ(x;v)=f'(x;v)\) 的条件,凸函数、\(C^1\) 函数、max 函数都正则但不一定光滑(\(|x|\) 正则但不可微)。反之,凹函数(如 \(-|x|\))通常不正则却"没有更多不可微点"。接触间隙 \(g(q)=\min_i\phi_i(q)\) 是 \(\max\) 取负的形式,一般不正则,链式法则只给上包含 \(\subseteq\)。 为什么重要:若误以为"间隙函数正则"而用等号链式法则,会得到错误的接触梯度,导致灵敏度分析或可微仿真(专题 4)出错。
🧠 思维陷阱:直接用自动微分(autodiff)求不可微函数的"梯度"
新手想法:"代码里有 min/max/abs,我直接 autograd 求梯度就行,框架会处理。"
实际上:autodiff 在不可微点返回的是 \(\partial_B f\)(Bouligand 子微分,§3)中的**某一个**元素(取决于浮点比较走哪个分支),既不是真梯度(不存在)也不是完整的 Clarke 集合。对一般梯度下降,这个"伪梯度"可能让优化在尖点振荡或停在伪驻点;但对半光滑 Newton(§6),取 \(\partial_B\) 的任一元素恰好够用(这是 Newton 比梯度下降"更适合非光滑"的深层原因)。
正确思维:用 autodiff 处理非光滑函数前,先问"我用的算法需要哪种次微分?"梯度下降需要 Clarke 集合的信息(autodiff 不给),慎用;半光滑 Newton 只需 \(\partial_B\) 的一个元素,autodiff 恰好提供。理解这个区别,才能正确选择优化算法。
练习¶
练习 7.2.1(计算题,在草稿纸上完成) 计算下列函数在指定点的 Clarke 广义梯度,每步注明用了 Gradient Formula 还是定义: (a) \(f(x)=\max(x,0)\)(ReLU)在 \(x=0\); (b) \(f(x_1,x_2)=|x_1|+|x_2|\)(\(L_1\) 范数)在 \((0,0)\); (c) \(f(x_1,x_2)=\max(x_1,x_2)\) 在 \(x_1=x_2\); (d) \(f(x)=-|x|\) 在 \(x=0\)(并指出它与 \(|x|\) 的 Clarke 梯度相同这一"信息丢失"现象)。
练习 7.2.2(证明题) 证明:若 \(f\) 在 \(x\) 处可微(经典意义),则 \(\partial f(x)=\{\nabla f(x)\}\)(Clarke 梯度退化为单点)。(提示:用 Gradient Formula,\(f\) 在可微点连续可微的邻域内梯度连续,极限唯一。注意:仅"在 \(x\) 一点可微"还不够保证单点,需 \(f\) 在 \(x\) 邻域 \(C^1\);请讨论"仅在一点可微但邻域不连续可微"的反例,如 \(f(x)=x^2\sin(1/x)\) 在 \(0\),说明此时 Clarke 梯度可能不是单点。)
练习 7.2.3(接触应用,开放思考题) 接触间隙函数 \(g(q)=\min_{i=1,\dots,m}\phi_i(q)\)(取所有接触对中最近的距离,\(\phi_i\) 均 \(C^1\))。(a) 在只有一个 \(\phi_{i^\star}\) 达到最小的"非退化"点,求 \(\partial g(q)\);(b) 在两个间隙相等 \(\phi_1(q)=\phi_2(q)=g(q)\) 的"退化"点(两个接触同时最近),求 \(\partial g(q)\),并说明这对应物理上的什么情形(提示:物体的一条棱同时接近两个面);(c) 讨论 \(g\) 在该退化点是否正则,这对计算接触力的灵敏度(专题 4 可微仿真)有何影响。
§7.3 四种次微分的层级体系:何时 Clarke 不够用 ⭐⭐⭐⭐¶
动机:Clarke 把信息冲淡了,怎么办?¶
§7.2 末尾留下一个刺:\(f(x)=-|x|\) 在 \(0\) 处,Clarke \(\partial f(0)=[-1,+1]\),但"真正有意义的斜率"只有 \(\{-1,+1\}\) 两点。Clarke 把它们之间填满,信息被稀释了。对优化(只要 \(0\in\partial f\) 判最优)这无所谓——\(0\in[-1,1]\) 给出"\(0\) 是 \(-|x|\) 的驻点",确实对(\(0\) 是 \(-|x|\) 的极大点)。但对**灵敏度分析**这是灾难:当你想知道"\(-|x|\) 的极小值如何随参数变化"或"某个解映射对扰动的 Lipschitz 模长是多少"时,Clarke 给出的凸集太大,得到的界太松,甚至证不出 Lipschitz 性。
这在接触力学里是真实痛点。考虑 §7.7 会详述的问题:LCP \(0\le x\perp Mx+q\ge0\) 的解 \(x(q)\) 如何随 \(q\) 变化?我们想证"\(x(q)\) 局部 Lipschitz"(这关系到接触力对扰动是否稳定、控制器是否良态)。这个判据(Mordukhovich 判据 T7)需要计算解映射的**余导数(coderivative),而余导数建立在 limiting 法锥之上——**用 Clarke 的凸化版本会让判据失效(凸化后总是满足某些条件,无法区分 Lipschitz 与非 Lipschitz)。
所以我们需要比 Clarke 更精细(不强行凸化)的次微分。本节系统梳理四种次微分,建立它们的层级关系,并明确每一种的最优适用场景。这是全章理论深度的顶点,也是从"会用接触工具"到"能证接触定理"的分水岭。
本质洞察:四种次微分不是冗余的重复造轮子,而是一个**精度-便利权衡谱**上的四个点。一端是 Fréchet 次微分(最精细但可能空、运算法则弱),另一端是 Clarke 次微分(最粗、永远凸非空、运算法则全)。中间的 limiting(Mordukhovich)和 Bouligand 各占一席。选哪个,取决于你的任务对"精度"和"便利"的相对需求:优化求驻点用 Clarke(要凸要全),灵敏度分析用 Mordukhovich(要精细),半光滑 Newton 用 Bouligand(要非奇异)。理解这个谱,你就能在任何非光滑问题前正确选择工具——这是研究者与工程师的分野。
历史:为什么会有这么多次微分¶
§7.1 的历史已交代:Clarke(1975)走凸化路线图便利,Mordukhovich(1970s 起)走非凸路线图精度,二者并行发展。这里补充逻辑动机。Clarke 次微分的"永远凸"在 1980 年代被发现是把双刃剑:凸性带来运算便利,但在非凸/非正则问题(如 \(-|x|\)、\(\min\) 函数、双层优化、最优控制的值函数)上,凸化丢失的信息恰恰是判断稳定性/灵敏度所必需的。Mordukhovich、Ioffe、Kruger 等人发展了不取凸包的 limiting 次微分,证明了它满足精确(exact,非包含式)的运算法则——代价是失去凸性。Rockafellar–Wets 1998 把这一切统一进变分分析,定义了 Fréchet(regular)与 limiting 次微分的标准记号,本节即按其框架展开。Bouligand 次微分则来自数值分析传统(Qi、Pang 等做半光滑 Newton),是"可微点梯度的极限",最贴近计算。
理论:四种次微分的精确定义¶
设 \(f:\mathbb{R}^n\to\mathbb{R}\) 局部 Lipschitz(仍是基本假设;limiting/Fréchet 对更一般的下半连续函数也有定义,但本章聚焦 Lipschitz 情形以服务接触应用)。我们按"从精细到粗"的顺序定义。
定义 7.3.1(Fréchet / regular 次微分 \(\hat\partial f\)) 向量 \(\xi\) 是 \(f\) 在 \(x\) 的 Fréchet 次梯度,若
所有这样的 \(\xi\) 构成 \(\hat\partial f(x)\)。直觉:\(\xi\) 是一个"从下方一阶贴合"\(f\) 的斜率——\(f(y)\ge f(x)+\langle\xi,y-x\rangle+o(\|y-x\|)\)。这是最严格的"次梯度"要求(局部下方支撑),所以 \(\hat\partial f(x)\) 最小,甚至可能**为空**(如 \(f=-|x|\) 在 \(0\),没有任何线性函数能从下方贴合凹尖点,\(\hat\partial f(0)=\varnothing\))。
定义 7.3.2(limiting / Mordukhovich 次微分 \(\partial_L f\) 或 \(\partial_M f\)) 通过对 Fréchet 次梯度取"序列外极限"得到:
即:在 \(x\) 附近找点列 \(x_k\to x\),在每个 \(x_k\) 取 Fréchet 次梯度 \(\xi_k\),收集所有收敛极限。这"修复"了 Fréchet 次微分可能为空的毛病(即使 \(\hat\partial f(x)=\varnothing\),邻近点的 Fréchet 次梯度极限可能非空)。关键:\(\partial_L f\) 一般不取凸包,可能非凸。
定义 7.3.3(Bouligand 次微分 \(\partial_B f\)) 对局部 Lipschitz \(f\),
其中 \(D_f\) 是 \(f\) 的可微点集(其补是零测,由 Rademacher)。即"可微点梯度的所有极限"。这是最贴近计算的定义(直接用经典梯度的极限),也是 §7.2 动机里的"伪导数三"。\(\partial_B f\) 一般非凸(如 \(\partial_B|{\cdot}|(0)=\{-1,+1\}\))。
定义 7.3.4(Clarke 次微分 \(\partial_C f\),回顾 §7.2) 即 \(\partial_B\) 的凸包(Gradient Formula):
永远凸、非空、紧。这是 §7.2 反复用的那个。
层级关系:四者如何嵌套¶
现在给出本节最重要的结论——四种次微分的包含关系。
定理 7.3.5(次微分层级,局部 Lipschitz 情形) 对局部 Lipschitz \(f\) 在点 \(x\):
并且 \(\partial_B f(x)\subseteq\partial_L f(x)\)(Bouligand 是 limiting 的子集,limiting 还含 Fréchet 极限带来的额外点,但在 Lipschitz 情形二者的凸包都等于 Clarke)。
逐一解读这个链条:
- \(\hat\partial\subseteq\partial_L\):limiting 是 Fréchet 取序列极限,含 Fréchet 自身(取常数列)。极限只会变大。
- \(\partial_L\subseteq\partial_C\):Clarke 是 limiting 取凸包,凸包只会变大。
- \(\partial_C=\text{conv}\,\partial_L=\text{conv}\,\partial_B\):这是 §7.3 最实用的等式——Clarke 次微分恰好是 Mordukhovich(或 Bouligand)次微分的凸包(T8)。这把抽象的 limiting 次微分与可计算的 Clarke 联系起来。
定理 7.3.6(Clarke = conv Mordukhovich,T8) 有限维、局部 Lipschitz 情形:\(\partial_C f(x)=\text{conv}\,\partial_L f(x)\)。
这是 Rockafellar–Wets 1998 §8J + Thm 9.61 的结论。它一句话概括了 Clarke 与 Mordukhovich 的关系:Clarke 是 Mordukhovich 的凸化。Clarke 永远凸(优点:运算便利、最优性条件干净),Mordukhovich 可非凸(优点:信息精细、运算法则精确)。
我们用四个函数把四种次微分一次性算清楚,这是本节的"压舱石"对比表:
| 函数 \(f\) 在 \(x=0\) | \(\hat\partial f(0)\) (Fréchet) | \(\partial_B f(0)\) (Bouligand) | \(\partial_L f(0)\) (limiting) | \(\partial_C f(0)\) (Clarke) |
|---|---|---|---|---|
| \(f=\) 常数 | \(\{0\}\) | \(\{0\}\) | \(\{0\}\) | \(\{0\}\) |
| \(f(x)=\|x\|\)(凸尖点) | \([-1,1]\) | \(\{-1,+1\}\) | \([-1,1]\) | \([-1,1]\) |
| \(f(x)=-\|x\|\)(凹尖点) | \(\varnothing\) | \(\{-1,+1\}\) | \(\{-1,+1\}\) | \([-1,1]\) |
| \(f(x)=\|x\|\) 但看作 \(\min(x,-x)\) | \([-1,1]\) | \(\{-1,+1\}\) | \([-1,1]\) | \([-1,1]\) |
重点看第三行 \(f=-|x|\)(核心反例): - Fréchet \(\hat\partial f(0)=\varnothing\):凹尖点没有下方支撑线,Fréchet 次梯度不存在。 - Bouligand \(\partial_B f(0)=\{-1,+1\}\):可微点(\(x\ne0\))梯度是 \(\mp1\),极限为两点。 - limiting \(\partial_L f(0)=\{-1,+1\}\):等于 Bouligand(此例中 Fréchet 极限不添加新点)。精准保留了"斜率只有 \(\pm1\)"的信息。 - Clarke \(\partial_C f(0)=[-1,+1]\):凸包填满中间。信息被冲淡。
本质洞察:\(f=-|x|\) 这一行就是整个 §3 的灵魂。它展示了 Clarke 与 Mordukhovich 的本质差异:在凹尖点,Mordukhovich 说"斜率是 \(-1\) 或 \(+1\),二选一"(这是对的——左半支斜率 \(+1\),右半支斜率 \(-1\)),Clarke 说"斜率在 \([-1,1]\) 间任意"(这把不存在的中间斜率也算进来了)。当你做灵敏度分析、要回答"这个解对扰动有多敏感"时,多出来的中间斜率会让你的估计无谓地变松,甚至让 Lipschitz 判据失效。这就是"何时 Clarke 不够用"的精确答案:当问题非凸/非正则、且你需要精细的一阶信息(灵敏度、稳定性)时,必须用 Mordukhovich。
集值映射的次微分:余导数(coderivative)¶
接触力学的灵敏度分析(如"LCP 解映射 \(S(q)\) 的 Lipschitz 性")研究的不是标量函数,而是**集值映射** \(S:\mathbb{R}^n\rightrightarrows\mathbb{R}^m\)(一个输入对应一个输出集合)。Mordukhovich 为集值映射定义了对应的"导数"——余导数,这是 §7.7 桥接 LCP 灵敏度的核心工具。
定义 7.3.7(Mordukhovich 余导数 \(D^*S\)) 设 \(S:\mathbb{R}^n\rightrightarrows\mathbb{R}^m\) 的图 \(\text{gph}\,S=\{(x,y):y\in S(x)\}\) 闭。在 \((\bar x,\bar y)\in\text{gph}\,S\) 处的余导数 \(D^*S(\bar x|\bar y):\mathbb{R}^m\rightrightarrows\mathbb{R}^n\) 定义为:\(\xi\in D^*S(\bar x|\bar y)(\eta)\) 当且仅当
其中 \(N\) 是 Mordukhovich(limiting)法锥。直觉:余导数用图的法锥刻画"输出集合如何随输入变化",是雅可比转置 \(J^\top\) 在集值情形的推广(光滑情形 \(S(x)=\{g(x)\}\) 时,\(D^*S(\bar x)(\eta)=\{\nabla g(\bar x)^\top\eta\}\))。
定义 7.3.8(Aubin 性质 / pseudo-Lipschitz) 集值映射 \(S\) 在 \((\bar x,\bar y)\) 处有 Aubin 性质(也叫 pseudo-Lipschitz、Lipschitz-like),若存在邻域 \(U\ni\bar x\)、\(V\ni\bar y\) 和常数 \(\kappa>0\) 使
其中 \(\mathbb{B}\) 是单位球。这是集值映射版的"局部 Lipschitz 连续"——输出集合随输入移动的速度被 \(\kappa\) 控制。\(\kappa\) 的下确界称为 Lipschitz 模长 \(\text{lip}\,S(\bar x|\bar y)\)。
定理 7.3.9(Mordukhovich 判据,T7) 设 \(\text{gph}\,S\) 闭。则 \(S\) 在 \((\bar x,\bar y)\) 有 Aubin 性质,当且仅当余导数在 \(0\) 处只含 \(0\):
且此时 \(\text{lip}\,S(\bar x|\bar y)=\|D^*S(\bar x|\bar y)\|^+\)(余导数的"模长")。
这是 Rockafellar–Wets 1998 Thm 9.40,是 §7.7 证明"LCP 解映射局部 Lipschitz"的核心引擎。为什么必须用 Mordukhovich 法锥而非 Clarke? 因为 Clarke 法锥总是凸的,凸化后 \(D^*S(\cdot)(0)=\{0\}\) 这个判据会"过度满足"(凸锥更容易只含 \(0\)?不——恰恰相反,凸化使法锥更大,判据更难满足或失去等价性),破坏充要性。判据的精确性依赖 limiting 法锥不取凸包。这就是 §3 开头说"Clarke 在灵敏度分析里不够用"的技术兑现。
📌 结论框(速读读者看这里):四种次微分按精度递减排列 \(\hat\partial\subseteq\partial_L\subseteq\partial_C\),且 \(\partial_C=\text{conv}\,\partial_L\)。Clarke 永远凸、便利,用于优化最优性;Mordukhovich 可非凸、精细,用于灵敏度分析(余导数 + Mordukhovich 判据 T7 刻画集值映射的 Lipschitz 性);Bouligand 是可微点梯度极限,用于半光滑 Newton(取其元素保证非奇异,§6)。记住反例 \(-|x|\):Clarke 给 \([-1,1]\),Mordukhovich 给 \(\{-1,+1\}\)。
一个完整的余导数计算:法锥映射 \(N_{\mathbb{R}_+}\)¶
抽象的余导数定义(定义 7.3.7)需要落到一个能亲手算的例子,否则 Mordukhovich 判据(T7)对你只是一句口号。我们计算接触里最基本的法锥映射 \(S(\cdot)=N_{\mathbb{R}_+}(\cdot)\) 的余导数——它是 LCP 解映射余导数的"积木"(LCP = 法锥包含,由这些标量法锥映射的乘积构成)。
设 \(S:\mathbb{R}\rightrightarrows\mathbb{R}\),\(S(x)=N_{\mathbb{R}_+}(x)\),即
它的图 \(\text{gph}\,S=\{(x,y):y\in N_{\mathbb{R}_+}(x)\}\) 是平面上的一个 L 形集合:
这正是 §7.6 命题 7.6.1 里互补条件 \(0\le x\perp -y\ge0\) 的可行点集(互补的几何面孔就是这个 L 形)!现在按定义 7.3.7,余导数 \(\xi\in D^*S(\bar x|\bar y)(\eta)\iff(\xi,-\eta)\in N_{\text{gph}\,S}(\bar x,\bar y)\),需要算 L 形集合在各点的 limiting 法锥。分情形(这是 T7 应用的核心计算):
情形 1:\(\bar x>0,\bar y=0\)(接触分离,间隙为正)。 局部 \(\text{gph}\,S\) 就是 \(x\) 轴(光滑 1 维流形),法锥是垂直方向:\(N_{\text{gph}\,S}(\bar x,0)=\{0\}\times\mathbb{R}\)。于是 \((\xi,-\eta)\in\{0\}\times\mathbb{R}\Rightarrow\xi=0\)(\(\eta\) 任意)。故
情形 2:\(\bar x=0,\bar y<0\)(接触受力,间隙为零)。 局部 \(\text{gph}\,S\) 是 \(y\) 轴,法锥水平:\(N=\mathbb{R}\times\{0\}\)。\((\xi,-\eta)\in\mathbb{R}\times\{0\}\Rightarrow\eta=0\)(\(\xi\) 任意)。故
情形 3:\(\bar x=0,\bar y=0\)(临界点,间隙与力同时为零,"弱激活")。 这是 L 形的**拐角**,最微妙。limiting 法锥是拐角处所有"邻近光滑点法锥的极限"的并:从正 \(x\) 轴一侧逼近得 \(\{0\}\times\mathbb{R}\),从负 \(y\) 轴一侧逼近得 \(\mathbb{R}\times\{0\}\),拐角本身还贡献第三象限方向。结果
应用判据:\(D^*S(0|0)(0)=\{\xi:(\xi,0)\in N_{\text{gph}\,S}(0,0)\}\)。由于 \(\mathbb{R}\times\{0\}\subseteq N\),得 \(\xi\) 可取整个 \(\mathbb{R}\)?——不,需仔细取 limiting 部分;标准结论是在拐角处 \(D^*S(0|0)(0)\) 不止含 \(\{0\}\)(含非零 \(\xi\)),故**判据 \(D^*S(0)=\{0\}\) 在拐角处失败**。
物理解读(这是计算的全部意义): - 情形 1、2(严格激活/严格分离)判据满足 → 解映射在这些点局部 Lipschitz(接触状态明确时,接触力对扰动稳定)。 - 情形 3(弱激活,间隙与力同时为零,恰好"将接触未接触")判据失败 → 解映射在此可能**非 Lipschitz**(接触状态临界时,微小扰动可能让接触突然激活/失活,接触力剧烈跳变)。
这就是 §7.3 开头说"Mordukhovich 判据刻画 LCP 解映射 Lipschitz 性"的具体兑现——它精确地告诉你:接触力的稳定性在"严格激活/分离"时有保证,在"弱激活临界"时可能失稳。这对控制器设计是关键警示:避免让机器人长期处于"恰好将接触"的临界状态(如脚尖虚点地面),因为那里接触力对扰动最敏感。注意全程用 limiting 法锥:若用 Clarke 法锥(凸化),L 形拐角的法锥会被凸化成更大的锥,判据的充要性丧失,得不到这个精确的"临界点失稳"结论——这是 §7.3 反复强调"灵敏度必须用 Mordukhovich"的技术兑现。
强正则性与 Robinson 定理¶
灵敏度分析还有一个更强的概念——强正则性,它刻画的不只是"解 Lipschitz",而是"解唯一且 Lipschitz 可微样"。这是 §7.7 桥接 NMPC 灵敏度(与第五批控制理论相连)的工具。
定义 7.3.10(广义方程与强正则性) 形如 \(0\in f(x)+N_C(x)\) 的关系称**广义方程**(generalized equation),它统一了方程(\(N_C=\{0\}\))、变分不等式、互补问题、KKT 系统。Robinson(1980)称解 \(x^\star\) 处**强正则(strongly regular)**,若把 \(f\) 在 \(x^\star\) 线性化后得到的广义方程,其解映射(关于扰动参数)单值且局部 Lipschitz。
定理 7.3.11(Robinson 强正则性,T9) 广义方程 \(0\in f(x)+N_C(x)\) 在解 \(x^\star\) 强正则,当且仅当其线性化广义方程有单值 Lipschitz 逆。此时 KKT 系统对参数 \(p\) 的依赖是"\(C^1\)-样"(Lipschitz 且方向可微)。
Robinson 1980(Math. Oper. Res.)是灵敏度分析的奠基。Dontchev–Rockafellar 2014(Implicit Functions and Solution Mappings)把强正则性与 Aubin 性质(T7)统一——强正则 ⟹ Aubin,但 Aubin 不要求单值。在接触语境:强正则保证"接触力对扰动唯一且 Lipschitz 依赖"(控制器良态的最强保证),Aubin 只保证"局部 Lipschitz 但可能多值"(仍可用,但需处理多解)。
强正则性在"严格互补"下的具体形态¶
抽象的强正则性需要落到可检验的条件。在最常见的"严格互补(strict complementarity)"情形,强正则性退化为一个**可计算的矩阵非奇异条件**——这是它在工程中真正被使用的形态。考虑带单边约束的 KKT 系统(接触平衡的抽象):
其中 \(L=f(q)-\lambda^\top\phi(q)\) 是 Lagrange 函数,\(\lambda\) 是接触力(乘子)。在解 \((q^\star,\lambda^\star)\) 处,把约束分为:
- 强激活(strongly active):\(\phi_i(q^\star)=0\) 且 \(\lambda_i^\star>0\)(接触受力,间隙为零)——指标集 \(\mathcal{A}^+\)。
- 非激活(inactive):\(\phi_i(q^\star)>0\) 且 \(\lambda_i^\star=0\)(分离,无力)——指标集 \(\mathcal{I}\)。
- 弱激活(weakly active / degenerate):\(\phi_i(q^\star)=0\) 且 \(\lambda_i^\star=0\)(恰好"将接触未受力")——指标集 \(\mathcal{A}^0\)。
严格互补**意味着 \(\mathcal{A}^0=\varnothing\)(没有弱激活约束)。此时局部行为完全由强激活约束决定(非激活约束在邻域内保持非激活,可"冻结"\(\lambda_i=0\))。把强激活约束当作等式约束 \(\phi_{\mathcal{A}^+}(q)=0\),KKT 退化为光滑等式系统,其线性化(隐函数定理)的雅可比是 **KKT 矩阵:
定理(严格互补下强正则 ⟺ KKT 矩阵非奇异):在严格互补假设下,KKT 系统在 \((q^\star,\lambda^\star)\) 强正则,当且仅当 \(\mathcal{K}\) 非奇异。这通常由**二阶充分条件**(\(\nabla_{qq}^2 L\) 在 \(J_{\mathcal{A}^+}\) 的零空间上正定)+ 约束规范 LICQ(\(J_{\mathcal{A}^+}\) 行满秩)保证。
这把抽象的 T9 落到接触工程(认知工具 D): - 严格互补 + 二阶条件 + LICQ ⟹ KKT 矩阵非奇异 ⟹ 强正则 ⟹ 接触力 \(\lambda^\star(p)\) 对参数 \(p\)(如目标位姿、外力)Lipschitz 且方向可微依赖 ⟹ 控制器良态、可做灵敏度反传(CI-MPC,§7.7 桥接五)。 - 弱激活(\(\mathcal{A}^0\ne\varnothing\),违反严格互补)则破坏这一切——它正是 §7.3 余导数计算里"L 形拐角"的情形(间隙与力同时为零),KKT 矩阵的活跃集不确定,强正则性失败,接触力对扰动可能非 Lipschitz。这与那个余导数计算(情形 3 失败)完全呼应,从两个角度(余导数 / KKT 矩阵)指向同一个结论:弱激活临界点是接触灵敏度的病态源。
本质洞察:强正则性、Mordukhovich 判据、KKT 矩阵非奇异,是同一件事(接触灵敏度良态)在三个抽象层次的表述——变分分析层(T9 强正则)、集值分析层(T7 余导数判据)、数值线性代数层(KKT 矩阵非奇异 + 二阶条件 + LICQ)。它们在"严格互补"假设下完全等价,且都在"弱激活"时同步失败。理解这个"三位一体",你就能在任意抽象层次诊断接触灵敏度问题:写论文用 T9/T7,做数值用 KKT 矩阵条件数。这是本章理论与工程缝合得最紧密的一处。
⚠️ 常见陷阱¶
💡 概念误区:误以为 Mordukhovich 次微分是凸集 新手想法:"次微分不都是凸集吗?Clarke 是凸的,Mordukhovich 应该也是。" 实际上:\(\partial_L f(x)\) 是 Fréchet 次梯度的序列**外极限**,一般非凸。正是 Clarke 对它取凸包才得 \(\partial_C f=\text{conv}\,\partial_L f\)。反例 \(f=-|x|\):\(\partial_L f(0)=\{-1,+1\}\)(两个孤立点,非凸),\(\partial_C f(0)=[-1,1]\)(凸包)。 为什么重要:在半光滑 Newton(§6)里,取 \(V\in\partial_B F(x)\)(Bouligand 子微分,也非凸)的元素才能保证 Newton 矩阵非奇异;若误用 Clarke 的凸组合 \(V\in\text{conv}\),则 \(V\) 可能是"奇异的平均"(两个非奇异矩阵的凸组合可以奇异),导致 Newton 步崩溃。这是 §6 选 \(\partial_B\) 而非 \(\partial_C\) 的根本原因。
💡 概念误区:把 Bouligand 子微分的元素当成 Clarke 集合的"代表" 新手想法:"反正 \(\partial_B\subseteq\partial_C\),从 \(\partial_B\) 取一个元素就代表了 Clarke 梯度。" 实际上:\(\partial_B\) 的元素是"选对某个活跃分支后的真实梯度"(极值点),\(\partial_C\) 的内部点是这些极值点的凸组合(不对应任何真实分支)。二者用途不同:\(\partial_B\) 用于 Newton(要真实梯度的非奇异性),\(\partial_C\) 用于最优性(要凸集含 \(0\))。混用会导致:在 Newton 里若用 \(\partial_C\) 内部点会丢非奇异性,在最优性判断里若只用 \(\partial_B\) 会漏判(\(0\) 可能在凸包内但不在 \(\partial_B\) 中,如 \(|x|\) 在 \(0\))。
🧠 思维陷阱:灵敏度分析里图省事用 Clarke 代替 Mordukhovich 新手想法:"Clarke 运算法则全、计算方便,灵敏度分析也用 Clarke 吧。" 实际上:灵敏度分析(如 Mordukhovich 判据 T7 判断 LCP 解映射 Lipschitz)依赖 limiting 法锥的**精确**信息。Clarke 法锥是其凸包,凸化破坏了判据 \(D^*S(0)=\{0\}\) 的充要性——用 Clarke 余导数会得到必要不充分(或充分不必要)的条件,结论不可靠。 正确思维:判断"是什么"(最优性、可行性)可用 Clarke;判断"如何变化"(灵敏度、Lipschitz 模长、解的存在唯一性对扰动的保持)必须用 Mordukhovich。一个口诀:静态问题用 Clarke,动态/参数化问题用 Mordukhovich。
练习¶
练习 7.3.1(计算题,在草稿纸上完成) 对函数 \(f(x)=|x_1|-|x_2|\)(在 \(\mathbb{R}^2\))在原点 \((0,0)\),分别计算 \(\hat\partial f\)、\(\partial_B f\)、\(\partial_L f\)、\(\partial_C f\),并验证层级关系 \(\hat\partial\subseteq\partial_L\subseteq\partial_C\) 与 \(\partial_C=\text{conv}\,\partial_L\)。(提示:\(f\) 在四个象限内部光滑,梯度为 \((\pm1,\mp1)\) 共四种组合;注意 \(-|x_2|\) 的凹性使 Fréchet 次微分可能为空。)
练习 7.3.2(证明题) 证明:若 \(f\) 是凸函数,则四种次微分全部相等 \(\hat\partial f=\partial_L f=\partial_B f=\partial_C f\),且都等于凸分析的次微分。(提示:凸函数处处有下方支撑线,Fréchet 次微分非空且等于凸次微分;凸函数正则,Clarke 不增大。这解释了为什么在凸优化里"次微分"无歧义——四种重合。)
练习 7.3.3(接触应用,研究级开放题) 考虑 LCP \(0\le x\perp Mx+q\ge0\) 的解映射 \(S(q)\)。(a) 当 \(M\) 是 P-matrix(所有主子式正)时,经典结果说解唯一,故 \(S\) 单值;查阅 Mordukhovich 判据 T7,叙述如何用 \(D^*S(\bar q|\bar x)(0)=\{0\}\) 证明 \(S\) 局部 Lipschitz(不必完成全部细节,写出证明骨架即可)。(b) 当 \(M\) 不是 P-matrix(如 Coulomb 摩擦导致的非对称 \(M\),专题 2),解可能多值或不存在(Painlevé);此时 Aubin 性质可能失败,说明这对应物理上的什么现象(接触力对微小扰动剧烈跳变 / 无解)。(c) 讨论:为什么这个分析必须用 Mordukhovich 余导数而非 Clarke?
§7.4 微分包含与 Filippov 解:当右端不连续时"解"是什么 ⭐⭐⭐¶
动机:摩擦让微分方程的右端不连续,经典解消失了¶
前面 §7.2、§7.3 处理的是层次一(静态)非光滑——给不可微函数配导数集合。现在转向层次二(动态):当非光滑进入动力学,使微分方程的**右端不连续**时,连"解"是什么都要重新定义。这是接触力学动态行为(stick-slip 轨迹、滑模)的数学基础。
看一个具体的、最小的例子——干摩擦下的滑块。一个质量为 \(m\) 的滑块在水平面上,受常值外力 \(F\),摩擦系数 \(\mu\),法向力 \(N=mg\)。设位置 \(x\)、速度 \(v=\dot x\)。牛顿方程是
其中 \(\text{sign}(v)\) 是经典符号函数(\(v>0\) 取 \(+1\),\(v<0\) 取 \(-1\),\(v=0\) 处?)。问题立刻来了:这个方程的右端在 \(v=0\) 处不连续(从 \(+\) 侧趋于 \(F-\mu mg\),从 \(-\) 侧趋于 \(F+\mu mg\),二者不等)。
现在假设 \(|F|<\mu mg\)(外力不足以克服最大静摩擦)。物理上我们知道:滑块应该**保持静止**(\(v\equiv0\))。但数学上,经典解(绝对连续的 \(x(t)\) 使方程几乎处处成立)能给出 \(v\equiv0\) 吗?如果 \(v\equiv0\),则 \(\dot v=0\),方程要求 \(0=F-\mu mg\,\text{sign}(0)\),即 \(\text{sign}(0)=F/(\mu mg)\)。但经典 \(\text{sign}(0)\) 通常定义为 \(0\),给出 \(0=F\ne0\),矛盾!经典解理论无法表达"静止"这个最基本的物理事实。
根源在于:经典 \(\text{sign}(0)=0\)(单值)太狭窄,它不允许摩擦力在 \(v=0\) 时取 \([-\mu mg,+\mu mg]\) 中的值来平衡外力 \(F\)。我们需要把右端"加厚"成一个集合——这正是 §7.2 例 2 算出的集值符号函数 \(\text{Sign}(v)\)!把方程改写为
现在在 \(v=0\) 处,右端是集合 \(F-\mu mg[-1,+1]=[F-\mu mg,\,F+\mu mg]\),由于 \(|F|<\mu mg\),这个区间**包含 \(0\)!于是 \(\dot v=0\in\) 右端,\(v\equiv0\) 成为合法解。物理静止得救了。这个"把不连续右端加厚成集值右端"的对象,就是**微分包含(differential inclusion, DI)。
本质洞察:微分包含 \(\dot x\in F(x)\) 不是"模糊版"的微分方程,而是**比微分方程更基本**的对象。微分方程 \(\dot x=f(x)\) 是 DI 在 \(F(x)=\{f(x)\}\) 单值时的特例。当 \(f\) 不连续,强行保持单值会导致解不存在(如上例的静止);把右端加厚成集值,解就回来了。这与 §7.2 的哲学完全一致——"用集合换确定性"在静态是次微分,在动态就是微分包含。接触力学的动态本质上是微分包含,而非微分方程,这一认知转变是理解专题 3、5 的前提。
如果不这样做会怎样:三种处理不连续右端的失败尝试¶
尝试一:在不连续面上"随便定义"右端的值。 比如规定 \(\text{sign}(0)=0\)。失败:如上所示,无法表达静止;更一般地,无论你给 \(\text{sign}(0)\) 赋什么单一值,都会在某些 \(F\) 下与物理矛盾(你赋的值固定了,但物理要求的摩擦力随 \(F\) 变化)。
尝试二:正则化(光滑化)右端。 用 \(\tanh(v/\varepsilon)\) 替代 \(\text{sign}(v)\),得到光滑 ODE,经典解存在唯一。失败:(1) 静止变成"缓慢蠕动"(§7.1 已述);(2) \(\varepsilon\to0\) 时刚性爆炸(练习 7.1.3);(3) 最致命的——正则化解在 \(\varepsilon\to0\) 时收敛到的极限,恰好就是微分包含的 Filippov 解(这是 Filippov 解的合理性来源之一),所以正则化只是"绕远路逼近 Filippov 解",不如直接用 DI。
尝试三:事件驱动(检测 \(v=0\) 时刻,切换方程)。 失败:在滑模/stick-slip 中,轨迹可能"粘"在不连续面 \(v=0\) 上一整段时间(不是瞬间穿过),事件驱动无法处理这种"驻留在切换面上"的情形——它需要的恰恰是 DI 在切换面上的凸组合解(下面的滑模)。
历史:Filippov 1960 的凸化构造¶
A. F. Filippov 从 1960 年起研究右端不连续的微分方程,核心贡献是给出了一个**典范的凸化构造**,把任意(可测、局部有界)的不连续右端 \(f\) 转化为一个集值映射 \(K[f]\),使得"\(\dot x\in K[f](x)\) 的解"成为不连续 ODE 的合理解概念。他 1988 年的专著 Differential Equations with Discontinuous Righthand Sides(Kluwer)是这一理论的根,深刻影响了滑模控制(Utkin)和接触力学(stick-slip、hybrid 系统)。Filippov 构造的精妙在于:它**不依赖于 \(f\) 在不连续面上的具体值**(那些值是零测的,物理上无意义),只看 \(f\) 在不连续面附近的极限行为,取凸包——这与 Clarke Gradient Formula"排除零测集、取可微点极限的凸包"如出一辙,二者确有深刻对偶(下面)。
理论:Filippov 凸化与 Filippov 解¶
定义 7.4.1(Filippov 集值映射 / 凸化算子) 设 \(f:\mathbb{R}^n\to\mathbb{R}^n\) 可测、局部有界(不要求连续)。\(f\) 在 \(x\) 的 Filippov 集值映射定义为
其中 \(B(x,\delta)\) 是半径 \(\delta\) 的球,内层交遍历所有零测集 \(S\)(排除这些"坏点"),\(\overline{\text{conv}}\) 是闭凸包。逐层解读:
- 最内层 \(\{f(y):y\in B(x,\delta)\setminus S\}\):\(x\) 附近(排除零测集 \(S\))所有点的右端值。
- \(\overline{\text{conv}}\)(闭凸包):把这些值的所有凸组合都纳入。这是凸化的核心——它允许"两侧速度场的加权平均",正是滑模的数学机制。
- \(\bigcap_{\mu(S)=0}\)(对所有零测集取交):排除任意零测集的影响,使定义不依赖 \(f\) 在零测集上的值。
- \(\bigcap_{\delta>0}\)(对 \(\delta\) 取交,即 \(\delta\to0\)):聚焦到 \(x\) 的局部行为。
定义 7.4.2(Filippov 解) 不连续 ODE \(\dot x=f(x)\) 的 Filippov 解,是指绝对连续函数 \(x:[0,T]\to\mathbb{R}^n\),使得对几乎所有 \(t\):
即:Filippov 解是凸化后的微分包含 \(\dot x\in K[f](x)\) 的(Carathéodory 意义的)解。
计算 \(K[f]\) 的实用规则:实际中 \(f\) 通常分片连续,由若干光滑区域 \(\mathcal{R}_i\) 拼成,区域间是不连续面(switching surface)。则: - 在 \(\mathcal{R}_i\) 内部(\(f\) 连续点):\(K[f](x)=\{f(x)\}\)(单值,退化为经典)。 - 在两个区域 \(\mathcal{R}_1,\mathcal{R}_2\) 的**分界面**上(点 \(x\)):\(K[f](x)=\text{conv}\{f_1(x),f_2(x)\}=\{(1-\alpha)f_1(x)+\alpha f_2(x):\alpha\in[0,1]\}\),其中 \(f_i\) 是从 \(\mathcal{R}_i\) 一侧的极限。即分界面上的速度场是两侧速度场的**线段**(所有凸组合)。
滑模(sliding mode):解被锁在切换面上¶
Filippov 凸化最重要的动态现象是**滑模**——轨迹不是穿过切换面,而是"滑行"在切换面上一段时间。这是 stick-slip、滑模控制、足式机器人脚底"既不完全粘也不完全滑"等现象的统一数学描述。
设切换面 \(\Sigma=\{x:\sigma(x)=0\}\)(\(\sigma\) 是光滑标量函数,\(\nabla\sigma\ne0\)),把空间分为 \(\sigma<0\)(区域 1,速度场 \(f_1\))和 \(\sigma>0\)(区域 2,速度场 \(f_2\))。在 \(\Sigma\) 上,Filippov 速度是 \(f_\alpha=(1-\alpha)f_1+\alpha f_2\)。关键问题:轨迹会穿过 \(\Sigma\) 还是滑行在 \(\Sigma\) 上?
判据看两侧速度场在 \(\Sigma\) 法向 \(\nabla\sigma\) 上的投影: - 若 \(\langle\nabla\sigma,f_1\rangle>0\) 且 \(\langle\nabla\sigma,f_2\rangle>0\)(两侧都"想穿过去",同向):轨迹**横穿(crossing)\(\Sigma\),不滑模。 - 若 \(\langle\nabla\sigma,f_1\rangle>0\) 且 \(\langle\nabla\sigma,f_2\rangle<0\)(区域 1 想往 \(\sigma>0\) 走、区域 2 想往 \(\sigma<0\) 走,**两侧速度场都指向 \(\Sigma\),互相"挤压"):轨迹被锁在 \(\Sigma\) 上,进入**滑模(sliding)**。
滑模时,存在唯一的 \(\alpha^\star\in(0,1)\) 使 Filippov 速度切于 \(\Sigma\)(法向分量为零):
此 \(\alpha^\star\) 称 Filippov 凸系数,对应的速度 \(f_{\alpha^\star}\) 是**等效动力学(equivalent dynamics)**——轨迹沿 \(\Sigma\) 滑行所遵循的有效速度场。
阶段小结:到这里我们完成了 Filippov 解理论的核心——用凸化算子 \(K[f]\) 把不连续右端加厚为集值,定义了 Filippov 解,并区分了横穿与滑模两种行为。接下来要把这套抽象理论落到接触力学的运行示例(stick-slip 滑块),看 \(\alpha^\star\) 在那里的物理含义。
运行示例回归:摩擦滑块的 stick-slip。 回到动机里的滑块 \(m\dot v\in F-\mu mg\,\text{Sign}(v)\)。切换面是 \(\Sigma=\{v=0\}\)(\(\sigma=v\),\(\nabla\sigma=1\),针对状态 \((x,v)\) 中的 \(v\) 分量)。两侧速度场(指 \(\dot v\)):\(v>0\) 侧 \(f_2=\frac1m(F-\mu mg)\),\(v<0\) 侧 \(f_1=\frac1m(F+\mu mg)\)。 - 若 \(F>\mu mg\):\(f_1,f_2\) 同正(都加速向正),横穿——滑块持续加速滑动,无静止。 - 若 \(|F|<\mu mg\):\(f_1>0\)(从负速度区被推向 \(v=0\))、\(f_2<0\)(从正速度区被推向 \(v=0\)),两侧都指向 \(\Sigma\)——滑模!等效动力学 \(\alpha^\star\) 给出 \(f_{\alpha^\star}=0\),即 \(\dot v=0\),滑块**保持静止(stick)**。这就是静摩擦!Filippov 凸系数 \(\alpha^\star\) 对应的是"摩擦力在 \([-\mu mg,\mu mg]\) 内取的恰好平衡 \(F\) 的那个值"。
这是本章最美的统一之一:宏观的 stick(静摩擦保持静止)= Filippov 解的滑模(轨迹锁在 \(v=0\) 上);宏观的 slip(滑动)= 横穿。Coulomb 摩擦的粘滑切换,在 Filippov 理论里就是横穿与滑模的切换。
完整走一遍:stick-slip 振荡器(传送带上的弹簧滑块)¶
把 Filippov 理论落到一个完整、有丰富动态的经典例子——stick-slip 振荡器,它是地震断层、刹车尖叫、提琴弓弦发声的统一模型,也是 Filippov 解"横穿与滑模交替"的最佳演示。
设定:质量 \(m\) 的滑块由弹簧(刚度 \(k\))连到固定墙,置于以恒定速度 \(v_b>0\) 移动的传送带上。摩擦系数 \(\mu\)、法向力 \(N\),最大静摩擦 \(F_s=\mu N\)。设滑块位置 \(x\)(弹簧自然长度处 \(x=0\)),速度 \(v=\dot x\)。相对速度 \(v_{rel}=v-v_b\) 决定摩擦方向。运动方程:
切换面 \(\Sigma=\{v=v_b\}\)(滑块与传送带同速,相对静止)。这是一个**两阶段极限环**:
阶段一(stick,粘滞):当滑块与传送带同速 \(v=v_b\),若弹簧力 \(|{-kx}|\le\mu N\)(不超过最大静摩擦),滑块**被传送带带着匀速移动**(\(v\equiv v_b\),滑模!)。此阶段是 Filippov 滑模:两侧摩擦力场把轨迹锁在 \(v=v_b\) 上。滑块随传送带前进 \(x\) 增大,弹簧力 \(-kx\)(拉回墙)增大(绝对值)。stick 持续到弹簧力达到最大静摩擦:\(kx=\mu N\),即 \(x=x_{slip}:=\mu N/k\)。
阶段二(slip,滑动):当 \(x>x_{slip}\),弹簧力超过最大静摩擦,滑块开始相对传送带向后滑(\(v<v_b\),\(v_{rel}<0\),摩擦力 \(+\mu N\) 向前)。运动方程变为光滑 ODE:
这是一个**平移的简谐振子**(平衡点在 \(x=\mu N/k=x_{slip}\))。滑块荡出去再荡回来,速度 \(v\) 先减后增,当 \(v\) 重新升到 \(v_b\) 时——回到 stick 阶段。如此 stick→slip→stick 循环,形成 stick-slip 极限环(锯齿形 \(x(t)\)、间歇的 \(v(t)\))。
逐步分析极限环的一个周期(设初始处于 stick,\(x(0)=-x_{slip}\) 即弹簧另一端到最大静摩擦): - Step 1(stick 段):\(v=v_b\),\(x\) 从 \(-x_{slip}\) 线性增到 \(+x_{slip}\),耗时 \(T_{stick}=2x_{slip}/v_b=2\mu N/(kv_b)\)。 - Step 2(slip 起点):\(x=x_{slip}\) 时弹簧力 \(=\mu N\) 恰好克服静摩擦,进入 slip,初速度 \(v=v_b\)。 - Step 3(slip 段):简谐运动绕 \(x_{slip}\),角频率 \(\omega=\sqrt{k/m}\)。滑块荡出(\(x\) 先增后减),\(v\) 降到负值再回升。由能量/对称性,当 \(v\) 回到 \(v_b\) 时 \(x\) 回到某个 \(x<x_{slip}\),重新 stick。 - Step 4(回到 stick):循环重复。
Filippov 视角的关键:stick 段是**滑模**(\(v\equiv v_b\) 锁在切换面),slip 段是**自由流动**(离开切换面)。判据:在 \(\Sigma=\{v=v_b\}\) 上,slip 段结束时两侧 \(\dot v\) 是否都指向 \(\Sigma\)?stick 段成立的条件正是 \(|kx|\le\mu N\)(弹簧力在静摩擦区间内),这等价于 Filippov 滑模判据(两侧摩擦场指向 \(\Sigma\))。离开 stick 的临界 \(x=x_{slip}\),正是滑模判据从"满足"转为"不满足"的边界。
本质洞察:stick-slip 振荡器展示了 Filippov 解的全部精髓——它不是"光滑 ODE 偶尔碰到不连续面",而是**滑模(stick)与自由流动(slip)的交替才构成完整动态**。极限环的存在性、周期、振幅,全部依赖正确处理切换面上的滑模——如果用正则化(\(\tanh\))抹平摩擦,stick 段会退化成"缓慢蠕动",极限环的锯齿形被破坏,定性行为错误。这就是为什么研究 stick-slip(刹车尖叫、地震、乐器发声)必须用 Filippov 解而非正则化——非光滑性在这里不是细节,而是现象本身的成因。这也是 §7.1"非光滑是物理本质而非建模缺陷"在动态层面的最强例证。
Filippov 凸化与 Clarke 梯度的对偶¶
§7.1 历史里提到 Filippov 凸化与 Clarke 梯度"如出一辙"。这里点明这个深刻联系(认知工具 A:双重解读)。考虑势力系统 \(\dot x\in-\partial_C V(x)\),其中 \(V\) 是 Lipschitz 势(如摩擦耗散势 \(V=\mu mg|x|\) 的某种意义)。一方面,\(\partial_C V\) 是 §7.2 的 Clarke 梯度(可微点梯度的凸包);另一方面,\(-\nabla V\) 作为速度场在尖点不连续,其 Filippov 凸化 \(K[-\nabla V]\) 恰好等于 \(-\partial_C V\)。即:
两条看似无关的路(静态的"给函数配导数集合"vs 动态的"给不连续右端配解")在这里交汇:Clarke 梯度的凸包构造 = Filippov 速度场的凸化构造,都是"排除零测集、取邻近值的凸包"。这就是 §7.1 历史脉络里 Clarke 路线与 Filippov 路线的数学统一点(专题 3.1 进阶里提到的"与 Clarke 梯度的 Stampacchia 对偶"即指此)。
存在性与解的性质¶
定理 7.4.3(Filippov 解的存在性) 若 \(f:\mathbb{R}^n\to\mathbb{R}^n\) 可测、局部有界,则微分包含 \(\dot x\in K[f](x)\) 对任意初值 \(x(0)=x_0\) 在某区间 \([0,T]\) 上至少存在一个 Filippov 解(绝对连续)。
存在性的证明思路:\(K[f]\) 由构造保证是**上半连续、非空、紧、凸值**的集值映射,满足微分包含存在性定理(基于集值映射的不动点/选择定理,类似 ODE 的 Peano 定理)的条件。注意:Filippov 解一般不唯一(凸化引入的多值性可能导致多解,如某些 Painlevé 构型)。唯一性需额外条件(如单侧 Lipschitz / 单调性,对应专题 1 的 P-matrix 在动态情形的推广)。
与微分包含的关系:Filippov 解是微分包含 \(\dot x\in F(x)\)(\(F=K[f]\) 上半连续凸值)的解。更一般地,微分包含 \(\dot x\in F(x)\) 可以来自多种"加厚"方式:Filippov 凸化 \(K[f]\) 是一种,Krasovskii 正则化(不排除零测集)是另一种,控制系统 \(\dot x=f(x,u),u\in U\) 写成 \(\dot x\in\{f(x,u):u\in U\}\) 也是。它们共享同一套解理论。本章聚焦 Filippov 凸化,因为它直接对应接触摩擦的物理。
运行示例:从头计算一个二维滑模 Filippov 解(继电系统)¶
前面的 stick-slip 振荡器物理丰富但计算交织在物理里。这里给一个**纯数学、可逐步手算到底**的二维例子,把"判横穿/滑模 → 求凸系数 → 解等效动力学"的完整流程走一遍。它是控制论"继电系统(relay system)"的最小模型,也是练习 7.4.1 的扩展范本(认知工具 A:把抽象定义落到可算实例)。
系统:\(\dot x_1=-\,\text{sign}(x_1)+2x_2\),\(\dot x_2=-x_1\)。切换面 \(\Sigma=\{x_1=0\}\)(\(\sigma=x_1\),\(\nabla\sigma=(1,0)\))。两侧速度场:
- 区域 \(x_1>0\):\(f_2=(-1+2x_2,\ -x_1)\),在 \(\Sigma\) 上(\(x_1=0^+\))取极限 \(f_2|_\Sigma=(-1+2x_2,\ 0)\)。
- 区域 \(x_1<0\):\(f_1=(+1+2x_2,\ -x_1)\),在 \(\Sigma\) 上(\(x_1=0^-\))取极限 \(f_1|_\Sigma=(+1+2x_2,\ 0)\)。
Step 1:写出 \(\Sigma\) 上的 Filippov 集值映射。 由分片连续的实用规则,\(\Sigma\) 上是两侧极限的凸包:
(第一分量在 \(1+2x_2\) 与 \(-1+2x_2\) 间线性插值,第二分量恒为 \(0\)。)
Step 2:判横穿还是滑模。 看两侧速度场在法向 \(\nabla\sigma=(1,0)\) 上的投影(即第一分量的符号):
- \(\langle\nabla\sigma,f_1|_\Sigma\rangle=1+2x_2\);\(\langle\nabla\sigma,f_2|_\Sigma\rangle=-1+2x_2\)。
- 滑模条件(两侧都指向 \(\Sigma\),即 \(f_1\) 法向分量 \(>0\) 且 \(f_2\) 法向分量 \(<0\)):\(1+2x_2>0\) 且 \(-1+2x_2<0\),即 \(-\tfrac12<x_2<\tfrac12\)。
- 在这个 \(x_2\) 区间内,轨迹一旦到达 \(\Sigma\) 就**滑模**;区间外(\(|x_2|>\tfrac12\))两侧同号,横穿。
Step 3:求滑模凸系数 \(\alpha^\star\)(让 Filippov 速度切于 \(\Sigma\))。 令第一分量(法向)为零:
验证 \(\alpha^\star\in(0,1)\):当 \(-\tfrac12<x_2<\tfrac12\) 时 \(\alpha^\star\in(0,1)\) ✓(与 Step 2 滑模区间一致,自洽)。也可直接套 §7.4 公式 \(\alpha^\star=\frac{\langle\nabla\sigma,f_1\rangle}{\langle\nabla\sigma,f_1-f_2\rangle}=\frac{1+2x_2}{(1+2x_2)-(-1+2x_2)}=\frac{1+2x_2}{2}\),结果相同 ✓。
Step 4:解等效动力学(滑模上的约化运动)。 滑模时 \(x_1\equiv0\),代入第二分量方程 \(\dot x_2=-x_1=0\),故 \(x_2\) 在滑模段**保持常值**。即:轨迹滑到 \(\Sigma\) 后,停在当前 \(x_2\) 处(\(x_1=0,x_2=\text{const}\)),这是一个滑模平衡。等效速度 \(f_{\alpha^\star}=(0,0)\)(两分量都为零)。
几何图景:从 \(|x_2|<\tfrac12\) 区域内任一点出发,轨迹螺旋/直线趋向 \(\Sigma=\{x_1=0\}\),触及后被锁住(滑模),停在该 \(x_2\)。这就是继电控制把状态"逼到并锁在"切换面的标准行为——与摩擦滑块"被锁在 \(v=0\)"是同一个 Filippov 机制(练习 7.4.3)。整个计算只用了"取凸包 → 法向投影判据 → 解 \(\alpha^\star\) → 代回求约化动力学"四步,这四步是分析任何 Filippov 滑模系统的通用流程,务必亲手走一遍。
多个切换面相交:凸包从线段升级为多胞形¶
§7.4 的滑模讨论假设单个切换面 \(\Sigma\)(两个区域)。但机器人有**多个接触/摩擦同时切换**(如多足同时触地、多指同时粘滑),对应**多个切换面相交**。此时 Filippov 凸化的几何更丰富,是 Dieci–Lopez 等人(搜索结果中"Sliding Motion in Filippov Differential Systems",SIAM J. Numer. Anal.)研究的难点。
设有两个切换面 \(\Sigma_1=\{\sigma_1=0\}\)、\(\Sigma_2=\{\sigma_2=0\}\),把局部空间分为四个区域,速度场分别为 \(f_{++},f_{+-},f_{-+},f_{--}\)(下标表示 \(\sigma_1,\sigma_2\) 的符号)。在两面的**交线** \(\Sigma_1\cap\Sigma_2\) 上,Filippov 集值映射是四个速度场的凸包:
这是一个**四点凸包(四面体或四边形),而非单面情形的线段(两点凸包)。求滑模等效速度(切于交线,法向分量为零)现在需要解一个**两个方程的线性系统(在 \(\nabla\sigma_1,\nabla\sigma_2\) 两个法向上同时为零),凸系数 \((\alpha_{++},\alpha_{+-},\alpha_{-+},\alpha_{--})\) 满足 \(\sum\alpha=1,\alpha\ge0\) 且两个相切条件——一般有**多解**(凸包维数高于约束数),这导致 Filippov 解在多面交线上**不唯一**!
物理对应(认知工具 D):多接触同时切换时(如四足机器人四脚同时触地的瞬间),系统状态可能有多个一致的演化方向——这正是 Filippov 解多值性的物理体现。工程上的应对:(1) 加入更多物理(如接触顺序的微小时间差打破对称);(2) 用时步法(专题 3)的隐式离散,它通过求解整步互补问题"自动选择"一个一致解,避开 Filippov 多值的显式处理。这解释了为什么多接触仿真比单接触难得多——不只是计算量,而是解概念本身在交线上多值。
微分包含的 Lyapunov 稳定性:非光滑控制的根基¶
微分包含还需要稳定性理论(滑模控制、接触系统的镇定都要证稳定)。经典 Lyapunov 理论(要求 \(V\) 光滑、\(\dot V<0\))在非光滑系统失效,需要推广。
定理 7.4.4(非光滑 Lyapunov 定理,基于 Clarke 梯度) 设微分包含 \(\dot x\in F(x)\)(\(F\) 上半连续凸值),\(V:\mathbb{R}^n\to\mathbb{R}\) 局部 Lipschitz、正定。若沿所有解的"集值导数"
满足 \(\max\dot{\bar V}(x)<0\)(对 \(x\ne0\)),则原点渐近稳定。
这里用了 §7.2 的 Clarke 梯度 \(\partial_C V\)——非光滑 Lyapunov 函数(如 \(V=\|x\|_1\)、\(V=\max_i|x_i|\),在滑模控制中常用)的"导数"是集值的,稳定性要求**集值导数的最大值**(最悲观方向)仍为负。这是 §7.2 Clarke 梯度在动态稳定性分析中的直接应用,也是滑模控制鲁棒性证明的标准工具(Bacciotti–Ceragioli 等人发展)。
接触应用:足式机器人的接触镇定、抓取的力闭合稳定性,常用非光滑 Lyapunov 函数(因为接触约束让光滑 Lyapunov 函数难以构造)。本定理把 §7.2(静态广义梯度)与 §7.4(动态微分包含)缝合成"非光滑系统的稳定性分析"完整工具——这是本章两大层次(静态/动态)协同工作的又一例证。
Filippov 凸化不是唯一选择:与 Krasovskii、Utkin 的对比¶
读到这里你可能会问:把不连续右端"加厚成集值"的方式只有 Filippov 凸化一种吗?答案是否定的——理解这一点对避免接触/滑模建模中的隐蔽错误至关重要(认知工具 B:对比性思维)。这里把三种主流"解概念/正则化"并置,说清它们的边界(像与不像,R7)。
对比一:Filippov 凸化 vs Krasovskii 正则化。 二者都对不连续右端取闭凸包,区别**只在一个交集**:
Krasovskii 不排除零测集 \(S\)——它对所有邻近点(包括不连续面本身那些零测点)取凸包。后果:当 \(f\) 在不连续面上被赋了某个"古怪"的单值(如人为令 \(\text{sign}(0)=5\)),Krasovskii 会把这个孤立值也纳入凸包,而 Filippov 会排除它。物理上 Filippov 更合理——不连续面是零测集,\(f\) 在那里的取值"无物理意义"(你无法在传感器上分辨"速度恰好为零"这个零测事件),应当排除。结论:
且当 \(f\) 在不连续面上的取值"行为良好"(等于某侧极限或落在凸包内)时二者相等。接触摩擦的 \(\text{Sign}\) 满足这一点,故两套理论给出相同的 stick-slip 解——这就是为什么实践中很少需要区分二者。但当你**人为设计**控制律的开关值时(如把 \(\text{sign}(0)\) 设成一个不在 \([-1,1]\) 的值),二者会分叉,此时必须明确用哪个。
对比二:Filippov 解 vs Utkin 等效控制(滑模的"乘积歧义")。 滑模时,Filippov 给等效速度 \(f_{\alpha^\star}\)(凸组合,§7.4 滑模小节)。控制论里 Utkin 用**等效控制(equivalent control):把控制 \(u\) 解出使 \(\dot\sigma=0\),再代回。对**控制仿射**系统 \(\dot x=g(x)+h(x)u\)、\(u=\text{sign}(\sigma)\),二者给出**相同**的滑动动力学。但对**控制非仿射**系统(\(u\) 以乘积/非线性方式进入,如 \(\dot x=g(x)+h(x)\,u\,\phi(x,u)\)),Filippov 凸化(先取 \(u\in[-1,1]\) 再算 \(\dot x\) 集合的凸包)与 Utkin 等效控制(先解 \(u_{eq}\) 再代回)**可能不一致——这就是著名的 Aizerman–Pyatnitskii 歧义。
本质洞察:"把不连续加厚成集值"看似只有一种自然做法,实则是一个**有选择的建模决策**。对接触摩擦(控制仿射、\(\text{Sign}\) 行为良好),Filippov、Krasovskii、Utkin 三者一致,你可以放心混用。但一旦系统是控制非仿射的(如某些气动/液压执行器、含乘性噪声的接触阻抗),三种解概念分叉,必须显式声明用哪个——否则你"证明"的稳定性可能对应一个与仿真器实际行为不同的解。这是 R7 语言精确性在解概念层面的体现:"不连续系统的解"不是一个无歧义的词,写论文时必须标明 Filippov / Krasovskii / Utkin。 接触力学之所以能岁月静好地不区分,是因为 Coulomb 摩擦恰好落在三者一致的"良性"区域。
完整走一遍:两面相交的滑模等效速度(多接触切换的最小模型)¶
§7.4 前面给了两面相交的凸包升级(线段→四面体),但没算等效速度。这里用一个最小可手算的二维例子把它走通,它是"两个接触同时在粘滑边界"的抽象(认知工具 A:把抽象的多面交线落到可算实例)。
设定:二维状态 \(x=(x_1,x_2)\),两个切换面 \(\Sigma_1=\{x_1=0\}\)(\(\sigma_1=x_1\),\(\nabla\sigma_1=(1,0)\))、\(\Sigma_2=\{x_2=0\}\)(\(\sigma_2=x_2\),\(\nabla\sigma_2=(0,1)\)),交于原点。四个象限的速度场取(指向原点的简单设计):
(下标 \(\pm\pm\) 为 \(\sigma_1,\sigma_2\) 的符号;每个场都"指向"两条轴)。在交线(原点)上,Filippov 集值映射是四点凸包 \(\text{conv}\{f_{++},f_{+-},f_{-+},f_{--}\}\),即正方形 \([-1,1]^2\)。
求等效速度:滑模锁在交线(即原点这一点,二维交"线"退化为点;为看清机制,设想 \(x_2\) 仍可演化的三维版,这里取交线为 \(\{x_1=0\}\) 上的滑动)。等效速度 \(f_{eq}=\sum\alpha_{ij}f_{ij}\) 须满足 \(\sum\alpha=1,\alpha\ge0\),且在**两个法向**上分量为零(同时切于 \(\Sigma_1,\Sigma_2\)):
代入四点凸组合:\(f_{eq,1}=-\alpha_{++}-\alpha_{+-}+\alpha_{-+}+\alpha_{--}=0\)、\(f_{eq,2}=-\alpha_{++}+\alpha_{+-}-\alpha_{-+}+\alpha_{--}=0\),配合 \(\sum\alpha=1\)。这是 3 个方程、4 个未知数——欠定!通解是一维仿射族,例如 \(\alpha_{++}=\alpha_{--}=s\)、\(\alpha_{+-}=\alpha_{-+}=\tfrac12-s\)(\(s\in[0,\tfrac12]\) 保证非负)。所有这些 \(\alpha\) 都给出同一个等效速度 \(f_{eq}=(0,0)\),但凸系数本身不唯一。
这说明什么(认知工具 D):等效速度(轨迹的实际走向)唯一(这里 \(=0\),停在原点),但"四个速度场各贡献多少"(凸系数 \(\alpha\))不唯一。物理上,\(\alpha_{ij}\) 对应"四个接触状态各占多少比例",它在交线上不可观测、不唯一——这正是 §7.4 多面交线"Filippov 解多值"的精确机制:多值性出现在凸系数(不可观测的内部分配)层面,而非轨迹(可观测的宏观运动)层面,除非约束数少于凸包维数导致连等效速度也不唯一。对四足同时触地,这意味着"宏观质心轨迹可能确定,但四脚各自承担的冲量分配不唯一"——工程上要靠额外物理(接触刚度差、微小时序差)或隐式时步法的整步求解来挑一个解。
⚠️ 常见陷阱¶
💡 概念误区:以为不连续 ODE 的解可以靠"在不连续面上定义右端值"解决 新手想法:"\(\text{sign}(0)\) 没定义?那我定义 \(\text{sign}(0)=0\) 不就行了,方程就有解了。" 实际上:在零测的不连续面上给右端赋任何单一值,都无法表达物理(如静摩擦需要 \(\text{sign}(0)\) 取依赖外力的值 \(F/(\mu mg)\))。正确做法是 Filippov 凸化——把右端加厚成集值 \(\text{Sign}(0)=[-1,1]\),让解自己"选"合适的值。 为什么重要:滑模控制、stick-slip、足式机器人接触切换全靠 Filippov 解描述;用"赋单值"的错误方法,会得到不存在解或错误轨迹,仿真表现为"卡在切换面附近高频抖振"(chattering),其实是没正确实现滑模。
💡 概念误区:把 Filippov 解的滑模当成"数值抖振"而去消除它 新手想法:"仿真在 \(v=0\) 附近来回跳,这是 bug,我要加阻尼/平滑把它压掉。" 实际上:滑模(轨迹锁在切换面上)是**物理正确的**(对应静摩擦保持静止);数值上表现为抖振是因为离散积分器没有正确处理 Filippov 凸组合(在切换面上应取等效速度 \(f_{\alpha^\star}\),而非在两侧速度间硬切换)。正确的处理是用专门的滑模积分器或时步法(专题 3 的 Moreau–Jean 隐式格式天然处理这点)。 为什么重要:盲目加阻尼/平滑会重新引入 §7.1 的正则化弊病(蠕动、刚性);正确识别"这是物理滑模而非数值 bug",才能选对积分方法。
🧠 思维陷阱:认为微分包含只是"理论玩具",工程上不需要 新手想法:"微分包含太抽象,工程仿真用光滑 ODE + 小步长就够了。" 实际上:现代接触仿真器(Siconos、Moreau–Jean 格式、专题 3)的数学基础**就是**微分包含(及其测度推广 §5)。它们不是"光滑 ODE + 修正",而是直接离散微分包含。理解微分包含,才能理解为什么这些仿真器用"速度-冲量"变量、用隐式格式、为什么它们在 stick-slip 上比正则化方法稳定得多。 正确思维:微分包含是接触动力学的"母语",光滑 ODE 是它的特例(在无接触段)。掌握母语,才能读懂专题 3 的所有设计选择。
练习¶
练习 7.4.1(计算题,在草稿纸上完成) 对二维系统 \(\dot x_1=-\text{sign}(x_1)\),\(\dot x_2=x_1\)(一个典型的滑模例子):(a) 写出切换面 \(\Sigma=\{x_1=0\}\) 上的 Filippov 集值映射 \(K[f]\);(b) 判断从初值 \((1,0)\) 出发的轨迹是横穿还是滑模到达 \(\Sigma\) 后的行为;(c) 若滑模,求等效动力学(\(x_1\equiv0\) 时 \(x_2\) 如何演化)。
练习 7.4.2(接触应用,证明题) 对摩擦滑块 \(m\dot v\in F-\mu mg\,\text{Sign}(v)\),严格证明:当 \(|F|<\mu mg\) 时,\(v(t)\equiv0\)(从 \(v(0)=0\) 出发)是 Filippov 解;当 \(F>\mu mg\) 时,\(v\equiv0\) 不是 Filippov 解(滑块必加速)。(提示:检验 \(\dot v=0\) 是否属于 \(\frac1m(F-\mu mg\,\text{Sign}(0))=\frac1m[F-\mu mg,F+\mu mg]\)。)
练习 7.4.3(开放思考题) 本节证明了"宏观静摩擦 = Filippov 滑模"。请反过来思考:滑模控制(sliding mode control)中,工程师**主动设计**一个不连续控制律 \(u=-k\,\text{sign}(\sigma(x))\) 把系统轨迹"逼"到滑模面 \(\sigma=0\) 上滑行,从而获得鲁棒性。这与摩擦的"被动滑模"在数学上是同一个 Filippov 机制吗?二者的相同点和不同点各是什么?(提示:相同——都是两侧速度场指向切换面导致滑模;不同——摩擦的切换面由物理(\(v=0\))决定,控制的切换面由设计者选(\(\sigma(x)=0\) 可以是任意期望流形)。这正是 R6A 类比的"像与不像"。)
练习 7.4.4(计算题,在草稿纸上完成) 仿照"运行示例:二维滑模 Filippov 解"的四步流程,分析继电系统 \(\dot x_1=-2\,\text{sign}(x_1)+x_2\)、\(\dot x_2=-x_1+1\)。(a) 写出 \(\Sigma=\{x_1=0\}\) 上的 Filippov 集值映射;(b) 求滑模成立的 \(x_2\) 区间;(c) 求滑模凸系数 \(\alpha^\star(x_2)\);(d) 解滑模上的等效动力学(\(x_1\equiv0\) 时 \(x_2\) 如何演化),并指出是否存在滑模平衡点。
练习 7.4.5(对比辨析题,开放性) §7.4 给出了 Filippov、Krasovskii、Utkin 三种"加厚不连续右端"的方式。请构造一个**控制非仿射**的标量系统(如 \(\dot x=a(x)+b(x)\,u\,(1+cu)\),\(u=\text{sign}(\sigma)\)),使 Filippov 凸化的解动力学与 Utkin 等效控制的解动力学**不同**(Aizerman–Pyatnitskii 歧义)。明确写出两者的等效动力学表达式,并讨论:若你在仿真器里用"先解 \(u_{eq}\) 再代回",而在论文里用 Filippov 凸化证稳定,会出现什么不一致?(这道题训练 R7 解概念的精确声明。)
练习 7.4.6(综合应用题,需结合接触) 把"四步滑模流程"应用到接触:考虑一个箱子在斜面上、由切向摩擦决定下滑还是静止。(a) 写出切向运动方程含 \(\text{Sign}(v_t)\) 的微分包含;(b) 用四步流程判定"箱子静止(stick)"对应的斜面倾角条件(即静摩擦判据),并说明它如何对应 Filippov 滑模判据;(c) 当倾角超过临界值,箱子开始下滑(横穿),求等效下滑加速度。验证你的临界倾角与经典"\(\tan\theta_c=\mu\)"一致——这把本章抽象的 Filippov 滑模与中学物理的斜面摩擦缝合起来。
§7.5 测度微分包含与 Moreau 扫动过程:当速度也跳变 ⭐⭐⭐⭐¶
动机:碰撞让速度跳变,连微分包含都不够了¶
§7.4 的 Filippov 解是**绝对连续**的——速度 \(v(t)\) 虽然不光滑,但至少连续(不跳变)。这对 stick-slip(速度连续地从滑变粘)够用。但接触力学还有一个更"硬"的现象——刚性碰撞,它让速度**不连续地跳变**(§7.1 来源三)。此时连 Filippov 解都不够,必须再上一个台阶:测度微分包含。
回到 §7.1 的例子:脚以速度 \(v^-<0\) 撞向刚性地面,完全非弹性碰撞后 \(v^+=0\)。速度在碰撞时刻 \(t^\star\) 跳变,所以 \(v(t)\) 不是绝对连续的(它有跳点),Filippov 解理论(要求绝对连续)不适用。更要命的是加速度:\(\dot v\) 在 \(t^\star\) 处是 Dirac 测度 \((v^+-v^-)\delta_{t^\star}\)(一个有限的动量改变发生在零时间内)。经典的 \(\dot v\in F\)(无论 \(F\) 多大都是有限集合)无法容纳 Dirac。
我们需要把微分包含里的"\(\dot v\)"从"函数"提升为"测度"。即不再写 \(\dot v\in F\),而是写 \(dv\in\ldots\)(\(dv\) 是速度的微分测度,可含 Dirac)。这就是**测度微分包含(measure differential inclusion, MDI)**,由 Moreau 引入以严格描述含碰撞的刚体动力学。它是本章理论深度的另一个顶点,也是专题 3 时步法的直接数学根基。
本质洞察:从"微分方程"到"微分包含"再到"测度微分包含",是一个**解的正则性逐级降低、而数学对象逐级提升**的阶梯。微分方程:解 \(C^1\)(速度可微)。微分包含:解绝对连续(速度连续但不可微,stick-slip)。测度微分包含:解仅有界变差(BV,速度可跳变,碰撞)。每降一级正则性,就需要把导数提升一级(导数 → 集值 → 测度)。接触力学的完整动力学恰好处在最底层——速度是 BV 函数,加速度是测度。专题 3 的时步法之所以以"速度-冲量"为基本变量、用积分(测度)形式而非微分形式,根源就是动力学本质上是 MDI。 这是本章对专题 3 最重要的理论贡献。
如果不这样做会怎样:用有限加速度描述碰撞的失败¶
尝试:把碰撞建模为"很大但有限的加速度"。 即假设碰撞在很短时间 \(\Delta\tau\) 内完成,加速度 \(\approx(v^+-v^-)/\Delta\tau\)(很大但有限)。失败:(1) 这就是 penalty/正则化(§7.1),\(\Delta\tau\to0\) 时加速度 \(\to\infty\),数值刚性爆炸;(2) 它需要知道碰撞的"内部细节"(接触如何在 \(\Delta\tau\) 内演化),而刚体假设下这个细节不存在(碰撞是瞬时的);(3) 多体碰撞时,各碰撞的 \(\Delta\tau\) 如何协调?无法自洽。正确的刚体碰撞模型必须接受"加速度是测度"这一事实,用冲量(测度的积分)而非加速度(测度的密度)作为基本量。
历史:Moreau 1971 的扫动过程¶
Jean-Jacques Moreau 在 1971 年的蒙彼利埃凸分析讨论班("travaux du séminaire d'analyse convexe de Montpellier")提出**扫动过程(sweeping process / processus de rafle),这是测度微分包含的奠基。Moreau 把凸分析(他本人也是凸分析的奠基者之一,"Moreau 包络""Moreau 分解"皆以他命名)直接用于力学,开创了用测度和法锥描述含约束、含碰撞的力学系统的传统。这条线经 Monteiro Marques、Schatzman 等人发展,最终由 Moreau 本人和 Jean 在 1980–90 年代发展出 **Moreau–Jean 时步法(time-stepping)——专题 3 的主角。扫动过程的现代综合见 Brogliato 的 Nonsmooth Mechanics(多版),是接触力学非光滑建模的标准参考。
理论:从有界变差到测度微分包含¶
要谈"速度跳变",先要有合适的函数类。
定义 7.5.1(有界变差 BV 与微分测度) 函数 \(v:[0,T]\to\mathbb{R}^n\) 是**有界变差(bounded variation, BV)的,若其总变差 \(\text{Var}(v)=\sup\sum_i\|v(t_{i+1})-v(t_i)\|\)(上确界遍历所有分割)有限。BV 函数在每点有左极限 \(v^-(t)\) 和右极限 \(v^+(t)\),至多有可数个跳点。BV 函数 \(v\) 诱导一个 \(\mathbb{R}^n\) 值的 **微分测度(differential measure) \(dv\),它满足对任意 \([a,b]\):
\(dv\) 可分解为 \(dv = \dot v\,dt + \sum_k(v^+(t_k)-v^-(t_k))\delta_{t_k} + (\text{Cantor 部分})\),即"绝对连续部分(普通加速度 \(\dot v\))+ 跳跃部分(碰撞冲量 \(\delta\))+ 奇异连续部分(力学中通常无)"。这个分解是 MDI 的关键:它让一个测度同时容纳光滑运动(\(\dot v\,dt\))和碰撞(\(\delta\))。
定义 7.5.2(测度微分包含 MDI,接触动力学形式) 含接触的刚体动力学写为测度微分包含:
配合**速度层面的接触互补条件**(对测度 \(d\Lambda\) 及右速度 \(v^+\))和**碰撞律**。其中 \(dv\) 是速度的微分测度(含碰撞跳跃),\(d\Lambda\) 是接触冲量测度(法向冲量 \(\ge0\)、切向冲量在摩擦锥内)。这个方程在测度意义下成立——对任意时间区间积分后是动量平衡:
碰撞律(restitution):碰撞时刻 \(t_k\),法向右速度与左速度由 Newton 碰撞律联系 \(v_n^+(t_k)=-e\,v_n^-(t_k)\)(\(e\in[0,1]\) 恢复系数,\(e=0\) 完全非弹性、\(e=1\) 完全弹性)。Moreau 给出更一般的"Moreau 碰撞律",用左右速度的中点 \(\frac{v^++ev^-}{1+e}\) 满足约束,保证能量耗散正确。
Moreau 扫动过程:测度微分包含的优雅特例¶
MDI 的一个特别优雅、且直接对应专题 3 时步法的特例是 Moreau 扫动过程。它描述"一个点被一个移动的凸集'扫'着走"——这恰好是接触约束(可行域随构型变化)的抽象。
定义 7.5.3(一阶扫动过程) 设 \(t\mapsto C(t)\) 是一族移动的闭凸集。扫动过程是微分包含
含义:只要 \(v(t)\) 在 \(C(t)\) 内部,\(N_{C(t)}(v)=\{0\}\),故 \(dv=0\)(\(v\) 不动);一旦 \(C(t)\) 移动到要把 \(v\) "推出"边界,法锥 \(N_{C(t)}(v)\) 非零,\(v\) 被"扫"着沿法向移动以保持在 \(C(t)\) 内。这正是接触的本质:物体自由运动(间隙 \(>0\),可行域内部,无接触力)直到撞上约束边界(间隙 \(=0\),可行域边界),约束力(法锥方向)把它"挡住"。
把 §7.1 的"接触力 ∈ 法锥"与扫动过程对照:扫动过程的 \(-dv\in N_{C(t)}(v)\) 就是"速度的改变(含碰撞冲量)由约束法锥提供"——这是 §7.1 三大来源(单边约束 + 碰撞)的统一测度形式。法向力属于 \(\mathbb{R}_+\) 的法锥(Signorini),碰撞冲量也属于法锥(瞬时),扫动过程把二者用同一个 \(N_{C(t)}\) 收纳。
阶段小结:到这里我们建立了测度微分包含与 Moreau 扫动过程,看清接触动力学本质上是"速度被移动的凸约束集扫动"。接下来要做的是把这个连续测度形式离散化——这一步直接产出专题 3 的 Moreau–Jean 时步法,是本章理论落地为算法的关键桥梁。
时间离散:从 MDI 到专题 3 的 Moreau–Jean 时步法¶
现在做本章对专题 3 最直接的贡献:把连续 MDI 离散成可计算的时步法。关键设计原则(来自 MDI 的数学结构):离散测度(冲量),不离散密度(加速度)。
在一个时间步 \([t_k,t_{k+1}]\)(步长 \(h\))上,对 MDI 积分。设 \(v_k\approx v^-(t_k)\)、\(v_{k+1}\approx v^+(t_{k+1})\)。动量平衡的离散:
其中 \(P_{k+1}=\int_{[t_k,t_{k+1}]}d\Lambda\) 是这一步的**接触冲量(impulse),不是接触力——这是 Moreau–Jean 格式的标志性变量选择,**根源就是 MDI 里 \(d\Lambda\) 是测度,其在一步上的积分(冲量)才是有限可算的量。配合冲量层面的互补条件(对右速度 \(v_{k+1}\) 和冲量 \(P_{k+1}\) 写 Signorini + 摩擦),整步成为一个(凸或线性互补)问题,无需检测碰撞时刻、无需区分"碰撞步"与"光滑步"——碰撞作为冲量自然涌现。
这解释了专题 3 的三个核心设计选择(理论-工程桥接,认知工具 D): 1. 为什么用速度-冲量而非位置-加速度? 因为加速度是测度(碰撞时为 Dirac),无法离散;冲量(测度的积分)是有限值,可离散。 2. 为什么用隐式格式(对 \(v_{k+1}\) 写约束)? 因为约束是对右速度 \(v^+\) 的(碰撞后不穿透),隐式才能正确处理碰撞步。显式格式会"先穿透再修正",错误。 3. 为什么不显式检测事件? 因为 MDI 统一处理光滑段和碰撞(都在一个测度方程里),离散后自然包含两者,无需事件检测(这也避免了 §7.1 的 Zeno 问题)。
碰撞律的能量与多体推广:从 Newton 到 Moreau¶
§7.5 给出了单点 Newton 碰撞律 \(v_n^+=-e\,v_n^-\),但多体系统(多个接触同时碰撞,或碰撞通过刚体耦合影响其他关节)需要更细致的处理。这里推导碰撞冲量的求解方式,并说明能量守恒/耗散。
单点碰撞冲量求解。 碰撞瞬时(光滑力的 \(dt\) 项贡献为零,因为时间为零),动量平衡退化为
其中 \(J_n\) 是法向接触雅可比,\(P_n\ge0\) 是法向冲量(标量,单点)。配合碰撞律 \(v_n^+=J_n v^+=-e\,J_n v^-=-e\,v_n^-\)。从动量平衡解出 \(v^+=v^-+M^{-1}J_n^\top P_n\),代入碰撞律:
分母 \(J_n M^{-1}J_n^\top>0\) 是接触点的**有效逆质量**(Delassus 算子的标量版),分子 \(-(1+e)v_n^-\) 在碰撞前 \(v_n^-<0\)(接近)时为正,故 \(P_n>0\)(合法的推力冲量)✓。这就是单点碰撞冲量的闭式解,是时步法在碰撞步的核心计算。
能量分析。 碰撞前后动能变化 \(\Delta T=\tfrac12 v^{+\top}Mv^+-\tfrac12 v^{-\top}Mv^-\)。代入 \(v^+=v^-+M^{-1}J_n^\top P_n\) 并化简,可证
即**碰撞耗散能量**(\(e<1\) 时严格耗散,\(e=1\) 时守恒)。这验证了碰撞律的物理自洽性——刚性碰撞不会凭空产生能量。\(e=0\)(完全非弹性)耗散最多(\(\Delta T=-\tfrac12\frac{(v_n^-)^2}{J_nM^{-1}J_n^\top}\)),对应"碰后贴合不反弹",这是足式机器人落地的常见建模(脚不弹起)。
多点碰撞的 Delassus 算子。 当 \(k\) 个接触同时碰撞,法向雅可比 \(J_n\in\mathbb{R}^{k\times n_v}\),冲量 \(P_n\in\mathbb{R}^k\)。动量平衡 \(M(v^+-v^-)=J_n^\top P_n\) 配合**冲量层互补**(每个接触:\(0\le P_{n,i}\perp v_{n,i}^+ + e_i v_{n,i}^-\ge0\))。消去 \(v^+\) 得关于 \(P_n\) 的 LCP:
Delassus 算子 \(W=J_n M^{-1}J_n^\top\) 是对称 PSD(因为 \(M^{-1}\succ0\)),所以这个**法向碰撞 LCP 是 P-matrix 良态的**(对应凸 QP,§7.6 命题 7.6.1b),唯一可解!这就是为什么**无摩擦多点碰撞总能稳定求解**——它落在 §7.6 的"良态"一侧。一旦加入切向摩擦,\(W\) 被非对称的摩擦耦合污染,回到病态(Painlevé),这与 §7.6 P-matrix 分析完全呼应。
本质洞察:碰撞的本质是一个 LCP,其矩阵是 Delassus 算子 \(W=JM^{-1}J^\top\)。无摩擦时 \(W\) 对称 PSD(良态、凸、唯一解),有摩擦时 \(W\) 失去对称性(病态、可能无解)。这把"碰撞"和"持续接触"统一在同一个数学结构(LCP + Delassus 算子)下——它们的区别仅在于时间尺度(碰撞瞬时、接触持续),数学骨架相同。理解这一点,你就明白为什么时步法能用**同一套**互补求解器处理碰撞步和接触步,无需区分——这是 Moreau–Jean 格式优雅性的深层来源。
Delassus 算子的谱与条件数:为什么有的碰撞"难解"¶
Delassus 算子 \(W=JM^{-1}J^\top\) 不只是"是否 PSD"这么简单——它的**谱(特征值分布)**直接决定碰撞 LCP 的数值难度和能量在多接触间的分配方式。这是把 §7.5 抽象框架与"为什么这个仿真步慢/不稳"挂钩的关键(认知工具 D)。
谱的物理含义。\(W\) 是 \(k\) 个接触点张成的"接触空间"中的有效逆质量矩阵。它的特征值 \(\lambda_i(W)\) 对应接触空间的"主方向逆惯量":
- 大特征值(接触点轻、易动方向):该接触方向上单位冲量产生大速度改变,碰撞响应"灵敏"。
- 小特征值(接触点重、被多刚体连接的方向):单位冲量只产生小速度改变,碰撞响应"迟钝"。
- 条件数 \(\kappa(W)=\lambda_{\max}/\lambda_{\min}\):衡量"最灵敏方向"与"最迟钝方向"的比值。\(\kappa\) 大意味着 LCP 病态——迭代求解器(PGS/投影 Gauss–Seidel,专题 3)收敛慢,因为不同接触点的尺度差异大。
一个干净的两点对称例子。设两个相同质量 \(m\) 的质点用一根刚度无穷的杆(视为刚体)连接,两端各与地面有一个法向接触,两接触雅可比为 \(J_n=\begin{bmatrix}1&0\\0&1\end{bmatrix}\)(解耦)或含耦合项(杆传递)。解耦时 \(W=\tfrac1m I\),特征值都是 \(1/m\),\(\kappa=1\)(完美良态,两点碰撞独立)。一旦杆把两端刚性耦合,\(M\) 出现非对角项,\(W\) 的非对角元非零——一端受冲量会通过杆传到另一端,\(\kappa>1\),两点碰撞**耦合求解**。这解释了为什么"刚性连接的多接触"(如桌子四条腿同时落地)比"独立的多接触"(如散落的四个球同时落地)数值上更难:前者 \(W\) 病态(强耦合),后者 \(W\) 近似对角(弱耦合)。
碰撞冲量在多接触间的传播。多点碰撞 LCP \(0\le P_n\perp WP_n+(1+e)J_nv^-\ge0\) 的解,通过 \(W^{-1}\) 把"碰撞前速度"映射为"各点冲量"。\(W^{-1}\) 的非对角元就是**冲量传播路径**:在 \(i\) 点施加冲量如何影响 \(j\) 点的法向速度。对运动链(如机械臂、足式腿),\(W\) 的稀疏/带状结构反映运动学拓扑——相邻连杆的接触强耦合(\(W\) 对应元大),远端连杆弱耦合。这与专题 1 LCP 求解器利用稀疏性加速、专题 3 时步法的 contact graph 着色(并行 PGS)直接相关:\(W\) 的稀疏结构 = 接触约束图的邻接结构。
切向冲量的测度形式:完整的摩擦 Moreau–Jean NCP¶
前面的多点碰撞只写了法向(Delassus + 法向互补)。完整的接触动力学还有**切向摩擦冲量**,它把 §7.2 的摩擦锥、§7.4 的 Filippov 滑模、§7.5 的测度形式三者缝合成专题 3 时步法的最终方程。这里把它完整写出(这是练习 7.7.2 的理论支撑)。
设法向、切向接触雅可比 \(J_n,J_t\),一步内法向冲量 \(P_n\ge0\)、切向冲量 \(P_t\)。完整的摩擦时步法在一步 \([t_k,t_{k+1}]\) 上是如下**非线性互补问题(NCP)**:
第三行的"最大耗散"是 §7.2 摩擦力 = 耗散势负广义梯度在**冲量层面**的离散版:切向冲量在摩擦圆盘 \(\{\|P_t\|\le\mu P_n\}\) 内取使切向速度耗散最大的方向。它等价于切向 VI(§7.6)\(-J_tv_{k+1}\in N_{\{\|\cdot\|\le\mu P_n\}}(P_t)\),也等价于 §7.4 的 Filippov 滑模条件——stick(粘滞)对应 \(P_t\) 在圆盘内部、\(J_tv_{k+1}=0\);slip(滑动)对应 \(P_t\) 在圆盘边界、方向与 \(J_tv_{k+1}\) 反向。
本质洞察:这一组方程是本章三大主干(替代导数 §7.2、替代解 §7.4/7.5、替代方程 §7.6)的**汇流处**。动量平衡来自 §7.5 测度积分(冲量而非力);法向互补来自 §7.6 法锥包含;切向最大耗散来自 §7.2 广义梯度 + §7.6 VI;而它的 stick/slip 二态正是 §7.4 Filippov 横穿/滑模在离散冲量层的投影。专题 3 的时步法每一步求解的就是这个 NCP——整本《非光滑分析基础》的所有工具,最终都为了让你看懂并能亲手写出这九行方程。 摩擦使其非对称(\(\mu P_n\) 把法向耦进切向约束的边界),这是它比无摩擦碰撞 LCP 难解、可能多解/无解(Painlevé)的根源,与下一小节呼应。
运行示例:两点同时碰撞的 Delassus LCP 手算¶
把 §7.5 的多点碰撞理论落到一个可逐步手算的最小例子——一根均质杆两端同时触地,演示 Delassus 算子如何把"两点碰撞"耦合成一个 \(2\times2\) LCP,并解出冲量分配(认知工具 A)。
设定:一根长 \(2L\)、质量 \(m\)、对中心转动惯量 \(I=\tfrac13 mL^2\) 的均质杆,水平下落(无旋转)以速度 \(v_0<0\)(向下)同时撞击地面,杆两端各有一个法向接触点(点 A 在 \(-L\)、点 B 在 \(+L\))。完全非弹性 \(e=0\)。广义坐标取质心竖直位移 \(y\) 与转角 \(\theta\),\(M=\text{diag}(m,I)\)。
Step 1:写法向接触雅可比。 两端竖直速度 \(=\) 质心竖直速度 \(\pm\) 转动贡献:点 A 竖直速度 \(\dot y - L\dot\theta\),点 B 竖直速度 \(\dot y + L\dot\theta\)。故
Step 2:算 Delassus 算子 \(W=J_nM^{-1}J_n^\top\)。 \(M^{-1}=\text{diag}(1/m,\ 1/I)\),\(I=\tfrac13mL^2\) 故 \(1/I=3/(mL^2)\):
\(W\) 对称 PSD ✓(特征值 \(\tfrac{2}{m},\tfrac{6}{m}>0\),条件数 \(\kappa(W)=3\)——两端通过杆刚性耦合,故非对角元 \(-2/m\ne0\),体现 §7.5"刚性连接多接触耦合")。
Step 3:写碰撞 LCP 并求解。 \(e=0\) 时 LCP 为 \(0\le P_n\perp WP_n+J_nv^-\ge0\),即(设两点都活跃,\(P_n>0\),则 \(WP_n+J_nv^-=0\)):
由对称性 \(P_A=P_B=:P\),代入第一行 \(\tfrac1m(4P-2P)+v_0=0\Rightarrow \tfrac{2P}{m}=-v_0\Rightarrow P=-\tfrac{m v_0}{2}>0\)(因 \(v_0<0\))✓。两端冲量相等且为正,物理合理(对称下落对称受冲量)。
Step 4:验证碰后速度与互补。 \(v^+=v^-+M^{-1}J_n^\top P_n\)。竖直方向:\(\dot y^+=v_0+\tfrac1m(P_A+P_B)=v_0+\tfrac1m(2P)=v_0+\tfrac1m(-mv_0)=0\) ✓(碰后质心静止,\(e=0\) 贴地)。转动:\(\dot\theta^+=0+\tfrac{3}{mL^2}(-LP_A+LP_B)=\tfrac{3}{mL^2}\cdot L(P_B-P_A)=0\) ✓(对称无旋转)。两端碰后竖直速度 \(J_nv^+=0\),与 \(P_n>0\) 满足互补(边界)✓。
本质洞察:这个例子展示了 Delassus 算子的全部作用——它把"两个看似独立的碰撞点"通过质量矩阵 \(M\)(这里是杆的平动 + 转动惯量)耦合成一个 \(2\times2\) LCP,非对角元 \(-2/m\) 量化了"在 A 端施加冲量会通过杆的转动影响 B 端"的耦合强度。若杆变成两个不相连的质点(无转动耦合),\(W\) 退化为对角 \(\tfrac1mI\),两点碰撞完全独立、可分别求解。多接触求解的全部难度,都浓缩在 \(W\) 的非对角结构里——这正是 §7.5 Delassus 谱小节的论点在一个三行手算里的兑现,也是专题 3 时步法为何要整体(而非逐点)求解接触的根本原因。
Painlevé 佯谬:测度解如何化解"无解"¶
§7.6 提到 Coulomb 摩擦下 LCP 可能无解(Painlevé)。这里说明测度微分包含如何化解它——这是 §7.5 测度框架"不可或缺"的最有力证据。
Painlevé 构型:一根刚性杆斜抵在粗糙地面上滑动,在高摩擦系数(\(\mu\) 大)和特定倾角下,经典刚体 + Coulomb + 单边约束的方程组要求"法向力为负"(地面拉杆,物理上不可能)或"法向加速度自相矛盾"。用 LCP 语言:该构型下 LCP 的矩阵非 P-matrix,且 \(q\) 落在"无解锥"内,LCP 无解。物理上,杆"想"穿透地面但又被禁止,经典(绝对连续速度)解不存在。
测度解的化解:MDI 框架允许速度在**没有显式碰撞**的情况下也发生跳变("切向冲击 / impact without collision")。在 Painlevé 构型,正确的解是:杆在某时刻速度**瞬间跳变**(一个切向冲量瞬时改变杆的运动状态),从"滑动"切换到"卡住"或"翘起",从而避开无解构型。这个跳变是测度(Dirac),只有在 §7.5 的 BV/测度框架下才合法——绝对连续解(§7.4 Filippov)无法表达它。Stewart 2000(SIAM Review)严格证明了:用测度微分包含 + 适当的冲击律,Painlevé 构型有良定义的(测度)解,化解了佯谬。
这是本章理论层级"逐级提升"的最强论据:层次一(次微分)处理静态摩擦集值;层次二的微分包含(§7.4)处理 stick-slip 连续切换;但只有层次二的**测度**微分包含(§7.5)能处理 Painlevé 这种"无碰撞却需速度跳变"的极端情形。每一级理论都有其不可替代的物理对应。
高阶扫动过程与状态跳变¶
扫动过程还可推广到含状态跳变的高阶情形(一阶扫动处理速度约束,二阶处理位置约束 + 速度跳变)。二阶扫动过程(second-order sweeping process) 直接对应含单边位置约束的刚体动力学:约束在位置层面 \(\phi(q)\ge0\),速度在碰撞时跳变。这是 Schatzman、Monteiro Marques 等人的工作,是接触力学 MDI 的完整形式。高阶扫动过程还可纳入状态跳变(通过高阶分布),应用于状态约束下的动态优化和含理想二极管的电路(搜索结果中 Acary 等人的工作),与专题 5 的混合系统(显式状态跳变)形成"隐式跳变 vs 显式跳变"的对照。
碰撞律的选择:Newton、Poisson 与 Moreau 三种恢复模型¶
§7.5 前面用了 Newton 碰撞律 \(v_n^+=-e\,v_n^-\),但这只是三种主流碰撞律之一。碰撞律不是 MDI 框架本身规定的,而是补充的本构关系——MDI 给出动量平衡(测度方程),碰撞律告诉你"碰撞后速度如何选取"。理解三者的区别,对正确建模多体碰撞(尤其是同时多点碰撞)至关重要(认知工具 B:对比性思维 + E:系统性分类)。
模型一:Newton 碰撞律(运动学恢复)。最简单:\(v_n^+=-e\,v_n^-\),恢复系数 \(e\in[0,1]\) 直接关联碰前碰后法向速度。优点:直观、易算(§7.5 的闭式冲量公式即基于它)。致命缺陷:多体系统中可能**违反能量守恒**——某些构型下 Newton 律会让系统碰后动能高于碰前("能量泵入"),物理上荒谬。原因是它只看局部法向速度,不顾全局能量。
模型二:Poisson 碰撞律(动力学恢复 / 冲量分相)。把碰撞分两相:压缩相(法向速度从 \(v_n^-\) 到 \(0\),积累压缩冲量 \(P_c\))和恢复相(释放冲量 \(P_r=e\,P_c\))。总冲量 \(P_n=(1+e)P_c\)。优点:以**冲量比**而非速度比定义恢复,在多体碰撞中**不违反能量守恒**(因为恢复相释放的能量受压缩相储存量上界约束)。这是 Stronge 等人推荐的、刚体碰撞理论上更自洽的模型。代价:需追踪压缩/恢复两相,比 Newton 律复杂。
模型三:Moreau 碰撞律(速度层凸投影)。Moreau 把碰后速度定义为对**可行速度锥的加权投影**:\(v^+\) 使 \(\frac{v^++e\,v^-}{1+e}\) 满足约束(落在可行速度集 \(V(q)=\{v:J_nv\ge0\}\) 内)。等价地,\(v^+=\text{prox}_{V}^{M}\big(v^-\big)\) 的某种恢复加权版。优点:(1) 天然多点一致——它对整个接触速度锥投影,自动协调所有同时接触点;(2) 保证能量耗散(投影是非扩张的,\(\|v^+\|_M\le\|v^-\|_M\) 当 \(e=0\));(3) 直接嵌入扫动过程/时步法——它就是 §7.5 扫动过程 \(-dv\in N_{C}(v)\) 的碰撞律版本,与 Moreau–Jean 离散无缝衔接。这是接触仿真器(Siconos)实际采用的模型。
| 碰撞律 | 定义方式 | 多体能量守恒 | 多点一致性 | 主要采用者 |
|---|---|---|---|---|
| Newton | 速度比 \(v_n^+=-ev_n^-\) | 可能违反 | 需逐点协调 | 教学、单点碰撞 |
| Poisson | 冲量比 \(P_r=eP_c\) | 保证 | 较好 | Stronge 刚体碰撞理论 |
| Moreau | 速度锥投影 | 保证(投影非扩张) | 天然一致 | Siconos、时步法 |
Newton's cradle(牛顿摆)的判别例子。五个等质量钢球悬挂相切,从一端拉起一个释放。实验现象:撞击端一球,另一端恰好弹出一球(中间三球不动)。这个看似简单的现象其实是碰撞律的"试金石":
- 若把五球的多点同时碰撞用 Newton 律 + 集中处理(一次解五点 LCP),会得到"多球同时弹出、速度分配不唯一"的非物理解——因为 Newton 律 + Delassus LCP 在这种全对称、零间隙构型下解不唯一(§7.5 Delassus 谱:零间隙刚性链 \(W\) 高度病态)。
- 真实的"一进一出"需要**碰撞按接触刚度/微小间隙的顺序逐对传播**(波动模型),或承认刚体理想化在此构型下不足以确定唯一解。
本质洞察:Newton's cradle 揭示了刚体碰撞理论的一个深刻局限——碰撞律 + 刚体假设在"同时多点碰撞 + 高对称"构型下可能不足以确定唯一物理解,必须引入额外信息(接触刚度、波动、微小时序)。这不是数学框架(MDI)的缺陷,而是"刚体瞬时碰撞"这一理想化本身的信息缺失:真实碰撞有有限持续时间和波传播,刚体把它压缩成零时间,丢掉了决定分配的信息。这与 §7.4 多面交线的 Filippov 多值、§7.5 Delassus 病态是同一现象在碰撞律层面的体现——高对称多接触的解不唯一性,是接触力学的固有难点,不同碰撞律是不同的"补全缺失信息"的方式。工程上:要么接受非唯一(取任一物理解),要么引入软接触(有限刚度,恢复唯一性,§7.8.5 GPU 软接触路线)。
完整走一遍:弹跳球的测度解与 Zeno 现象¶
把 §7.5 的测度框架落到一个完整可算的例子——弹跳球,并直面 Zeno(练习 7.5.3 预告的"比 BV 更坏"的情形)。这是测度解、碰撞律、Zeno 三个概念的集成演示。
设定:球质量 \(m=1\),重力 \(g=10\)(取整便于手算),从高度 \(h_0=5\) 静止落下,地面在 \(y=0\),恢复系数 \(e=0.5\)。自由飞行段是光滑 ODE \(\ddot y=-g\);触地(\(y=0\),\(\dot y<0\))时速度跳变 \(\dot y^+=-e\,\dot y^-\)。
第一次落地:自由落体 \(y(t)=5-\tfrac12\cdot10\cdot t^2\),落地 \(y=0\) 在 \(t_1=1\),落地速度 \(\dot y^-(t_1)=-g t_1=-10\)。碰撞冲量(§7.5 单点公式,\(J_n=1\)、\(M=1\)、\(J_nM^{-1}J_n^\top=1\)):
碰后速度 \(\dot y^+(t_1)=\dot y^-+P_1=-10+15=+5\)(向上弹起,等于 \(-e\dot y^-=0.5\times10=5\) ✓)。速度在 \(t_1\) 从 \(-10\) 跳到 \(+5\),这个跳变在微分测度 \(dv\) 里是 \(\delta_{t_1}\) 项,幅度 \(15\)。
后续弹跳:每次落地速度幅值乘 \(e=0.5\)。第 \(k\) 次弹起速度 \(u_k=5\cdot(0.5)^{k-1}\)(\(u_1=5,u_2=2.5,\dots\))。第 \(k\) 次弹起后到第 \(k+1\) 次落地的飞行时间 \(\Delta t_k=2u_k/g=2\cdot5\cdot(0.5)^{k-1}/10=(0.5)^{k-1}\)(\(\Delta t_1=1,\Delta t_2=0.5,\dots\))。
Zeno 时刻(无穷多次弹跳的总时间):从第一次落地 \(t_1=1\) 起,后续飞行时间总和
故 Zeno 时刻 \(t_\infty=t_1+2=3\)——在有限时间 \(t=3\) 内,球完成了无穷多次弹跳! \(t>3\) 后球静止贴地(\(\dot y\equiv0,y\equiv0\),扫动过程的"被约束集挡住")。
这对解概念意味着什么(练习 7.5.3 的答案): - 速度 \(\dot y(t)\) 在 \([0,3)\) 上是 BV 吗?总变差 \(=\sum_k(\text{每次跳变幅度})=\sum_k(1+e)u_k=\sum_k 1.5\cdot5\cdot(0.5)^{k-1}=1.5\cdot5\cdot2=15<\infty\)。总变差有限,所以 \(\dot y\) 在 \([0,3]\) 上仍是 BV!(跳变幅度按几何级数衰减,求和收敛。) - 但跳点有**无穷多个**(\(t_1,t_2,\dots\) 聚于 \(t_\infty=3\)),这逼近了 BV 的极限——若 \(e=1\)(无耗散),跳变幅度不衰减,总变差发散,\(\dot y\) 不再是 BV,测度解理论也需要进一步推广(或物理上 \(e=1\) 永不停止弹跳,无 Zeno)。
现代时步法如何"越过"Zeno:事件驱动法(专题 5)在 Zeno 点卡死(要检测无穷多次碰撞)。而**时步法(专题 3)以固定步长 \(h\) 推进**,当 \(h>\) 剩余弹跳的时间尺度时,一步内"吸收"了无穷多次微小弹跳——离散互补问题自动给出"贴地静止"的解,无痛越过 \(t_\infty\)。这是时步法相对事件驱动法的又一关键优势,其根源正是 §7.5 的测度框架(碰撞作为冲量在步内累积,无需逐个解析)。
本质洞察:Zeno 现象(有限时间无穷多事件)是接触动力学最反直觉的特征之一,它彻底击溃了"事件驱动 + 重置"的范式(§7.1 陷阱已预警)。但在测度微分包含的视角下,Zeno 不再可怕——只要恢复系数 \(e<1\)(有耗散),速度仍是 BV(总变差因几何衰减而有限),测度解良定义;时步法以固定步长"吸收"Zeno 点附近的无穷多次微小碰撞,自然过渡到静止。这再次印证 §7.5 的核心论点:接受"加速度是测度、速度是 BV",许多经典框架下的"病态"(Zeno、Painlevé)都变成了良定义的常态。 测度框架不是更复杂的麻烦,而是更诚实、更稳健的语言。
⚠️ 常见陷阱¶
💡 概念误区:把碰撞的"加速度"当成有限值 新手想法:"碰撞时加速度很大但有限,仿真时取一个大数就行。" 实际上:刚性碰撞的加速度在数学上是 Dirac 测度(无穷大、零时间、有限积分),不是有限值。把它当有限值就是 penalty 正则化(§7.1),带来刚性和失真。正确的量是**冲量**(加速度测度的积分),它有限可算。 为什么重要:这决定了仿真器的基本变量选择。用加速度的仿真器(显式 ODE 积分器)在碰撞时必然要么穿透、要么刚性爆炸;用冲量的仿真器(Moreau–Jean 时步法)天然正确。理解"加速度是测度",才能理解专题 3 为何那样设计。
💡 概念误区:以为 BV 函数和绝对连续函数差别不大 新手想法:"速度连续或跳变,无所谓,反正都能积分。" 实际上:绝对连续函数的导数是普通函数(可积),微分包含(§4)够用;BV 函数的导数是**测度**(含 Dirac),必须用测度微分包含(§5)。stick-slip(速度连续)用 §4,碰撞(速度跳变)必须用 §5。混淆会导致:用 §4 的 Filippov 解理论处理碰撞,得到"解不存在"(因为碰撞解不是绝对连续的,不在 Filippov 解的函数类里)。 为什么重要:选错解概念,整个分析的函数空间就错了。判断标准:速度是否跳变?跳变(碰撞)→ MDI/BV;不跳变(仅 stick-slip)→ DI/绝对连续。
🧠 思维陷阱:试图用更小的步长"积分穿过"碰撞 新手想法:"碰撞处解有跳变,那我把步长取得极小,总能精确捕捉这个跳变。" 实际上:碰撞是**瞬时**的(零时间内速度跳变),无论步长多小,跳变都发生在"一步之内",无法靠减小步长"展开"它。正确做法是接受跳变、在那一步求解冲量(隐式 + 互补),而非试图"积分穿过"。减小步长只会增加计算量、并不能让显式格式正确处理碰撞。 正确思维:碰撞不是"快速但连续的过程",而是"瞬时跳变"。处理跳变的正确工具是测度(冲量)+ 隐式约束,不是小步长。这是 §5 区别于 §4、专题 3 区别于普通 ODE 积分的核心。
练习¶
练习 7.5.1(计算题,在草稿纸上完成) 一个质量 \(m=1\) 的小球从高度 \(h_0\) 自由落下(重力 \(g\)),撞击刚性地面,恢复系数 \(e\)。(a) 写出包含碰撞的速度微分测度 \(dv\) 在第一次碰撞时刻 \(t_1\) 的分解(绝对连续部分 + Dirac 部分);(b) 用动量平衡(MDI 积分形式)求第一次碰撞的法向冲量 \(P_1\);(c) 当 \(e=0\) 时验证碰后小球速度为零、贴地(对应扫动过程的"被约束集挡住")。
练习 7.5.2(接触应用,推导题) 从连续 MDI \(M\,dv+(Cv+g-\tau)\,dt=J^\top d\Lambda\) 出发,在时间步 \([t_k,t_{k+1}]\)(步长 \(h\))上积分,推导 Moreau–Jean 离散动量平衡 \(M(v_{k+1}-v_k)+h(Cv_k+g_k-\tau_k)=J^\top P_{k+1}\)。明确指出:(a) 哪一项的积分给出冲量 \(P_{k+1}\);(b) 为什么 \(P_{k+1}\)(冲量)有限可算而瞬时接触力 \(\lambda\) 在碰撞步是测度(不可直接离散);(c) 这一推导如何解释专题 3"用速度-冲量为基本变量"的设计。
练习 7.5.3(开放思考题) 本节说"动力学正则性阶梯:微分方程(\(C^1\))→ 微分包含(绝对连续)→ 测度微分包含(BV)"。请思考:是否存在比 BV 更"坏"的情形——速度连有界变差都不是(如在有限时间内无穷次碰撞,总变差发散)?这对应什么物理现象?(提示:Zeno 现象——小球越弹越快地无穷次弹跳,在有限时间 \(t_\infty\) 内完成无穷次碰撞。讨论:\(e<1\) 时小球弹跳的速度幅值如何衰减?无穷次弹跳的总时间是否有限?这是否导致速度不是 BV?现代时步法如何"越过"Zeno 点继续仿真?)
练习 7.5.4(计算题,在草稿纸上完成) 仿照"两点同时碰撞的 Delassus LCP 手算",考虑一根长 \(2L\)、质量 \(m\) 的均质杆,但这次**质心偏置**(质心在距 A 端 \(\tfrac{L}{2}\) 处,两接触点仍在杆的两端)。(a) 重新写法向雅可比 \(J_n\);(b) 算 Delassus 算子 \(W\)(注意此时 \(W\) 的两个对角元不再相等);(c) 求完全非弹性(\(e=0\))水平下落的两端冲量 \(P_A,P_B\),验证它们**不相等**(偏置导致非对称分配);(d) 计算 \(\kappa(W)\) 并与对中情形(\(\kappa=3\))比较,说明质心偏置如何影响碰撞 LCP 的病态度。
练习 7.5.5(对比辨析题,开放性) §7.5 给出了 Newton、Poisson、Moreau 三种碰撞律。请针对一个**两体链式碰撞**(球 1 撞静止的球 2,球 2 再撞静止的球 3,等质量、一维、\(e=1\)):(a) 用 Newton 律逐对计算碰后速度,验证"动量与动能同时守恒"是否唯一确定结果;(b) 解释为什么"集中处理三球同时碰撞"(一次解三点 LCP)会丢失"一进一出"的物理解;(c) 联系 Newton's cradle,讨论刚体瞬时碰撞理想化在高对称构型下的信息缺失,以及软接触(有限刚度)如何恢复唯一性。
练习 7.5.6(推导题,在草稿纸上完成) 写出本节"切向冲量的测度形式"给出的完整摩擦 Moreau–Jean NCP(动量平衡 + Signorini + 最大耗散三式)。(a) 对一个单点接触(一维法向 + 一维切向)把它具体化为标量方程组;(b) 分别写出 stick(\(|P_t|<\mu P_n\)、\(J_tv_{k+1}=0\))与 slip(\(|P_t|=\mu P_n\)、\(P_t\) 与 \(J_tv_{k+1}\) 反向)两种情形下方程组的形态;(c) 说明这个 stick/slip 二分如何对应 §7.4 Filippov 的滑模/横穿,以及它为何使整步问题非对称(联系 §7.6"摩擦破坏 P-matrix")。
§7.6 互补问题的非光滑视角:法锥、变分不等式与半光滑 Newton ⭐⭐⭐¶
动机:专题 1 把 LCP 当组合问题解,但组合数会爆炸¶
专题 1 把 Signorini 条件线性化为 LCP \(0\le z\perp Mz+q\ge0\),并指出"解 LCP = 枚举活跃集(哪些约束 \(z_i=0\)、哪些 \(z_i>0\))"。这在小规模可行,但有一个致命问题:\(n\) 对接触有 \(2^n\) 种活跃集组合。机器人灵巧手抓取、足式机器人多点接触动辄几十个接触对,\(2^{50}\) 的组合数让枚举法彻底失效。
更糟的是,§7.1 已指出 Coulomb 摩擦让 LCP 失去 P-matrix 性质,导致解可能不存在(Painlevé)或多个(专题 2),活跃集枚举可能找不到一致的活跃集(每个候选活跃集都自相矛盾)。
现代求解器(PATH、半光滑 Newton、IPC barrier)如何绕过组合爆炸?答案藏在**互补条件的非光滑视角**里:把 LCP 不看成组合问题,而看成一个**不可微方程** \(\Phi(z)=0\)(用 NCP 函数),然后用半光滑 Newton 法解它。整个组合结构被"溶解"进一个非光滑方程的解析结构中,Newton 的每一步都是连续优化(线性方程组),没有组合枚举。本节用 §7.2、§7.3 的非光滑工具揭示这一机制,把专题 1 的 LCP 与本章的理论闭合。
本质洞察:互补条件 \(0\le a\perp b\ge0\) 有三副面孔——组合面孔(活跃集枚举,专题 1)、几何面孔(法锥包含 / 变分不等式,§7.1 反复出现的"力 ∈ 法锥")、解析面孔(不可微方程 \(\Phi(a,b)=0\),本节)。三副面孔数学等价,但导向完全不同的算法:组合面孔 → pivoting(Lemke 算法,组合数爆炸);几何面孔 → 投影方法(projected Gauss-Seidel);解析面孔 → 半光滑 Newton(PATH,二次收敛,绕过组合爆炸)。理解"同一个互补条件可以从三个视角看",是理解所有接触求解器分野的钥匙——这正是 R6A 多视角理解在接触求解器选型上的兑现。
视角一:互补即法锥包含(几何面孔)¶
回顾 §7.1:Signorini 条件 \(0\le\lambda_n\perp\phi\ge0\) 等价于 \(\lambda_n\in N_{\mathbb{R}_+}(\phi)\)(法向力属于非负轴的法锥)。这不是巧合,而是互补条件的一般几何本质。
命题 7.6.1(互补 = 法锥包含) 对 \(a,b\in\mathbb{R}^n\)(逐分量),
证明(标量情形 \(n=1\),逐分量推广):\(N_{\mathbb{R}_+}(a)=\{0\}\) 若 \(a>0\)、\(=(-\infty,0]\) 若 \(a=0\)、\(=\varnothing\) 若 \(a<0\)。"\(-b\in N_{\mathbb{R}_+}(a)\)"展开:\(a>0\Rightarrow -b=0\Rightarrow b=0\)(且需 \(a\ge0\));\(a=0\Rightarrow -b\le0\Rightarrow b\ge0\)。合起来正是 \(a\ge0,b\ge0,ab=0\)。投影刻画:\(a=\text{proj}_{\mathbb{R}_+}(a-b)=\max(0,a-b)\),逐情形验证等价。\(\blacksquare\)
这个命题把 LCP \(0\le z\perp Mz+q\ge0\) 写成法锥包含 \(-(Mz+q)\in N_{\mathbb{R}^n_+}(z)\),进而是一个**变分不等式**(下面)。投影刻画 \(z=\text{proj}_{\mathbb{R}^n_+}(z-(Mz+q))\) 把 LCP 写成不动点方程,直接导出投影迭代法(projected Gauss-Seidel,许多物理引擎如 ODE、Bullet 的接触求解器内核)。
视角二:互补即变分不等式(VI)¶
定义 7.6.2(变分不等式 VI) 给定闭凸集 \(C\) 和映射 \(F:C\to\mathbb{R}^n\),变分不等式 \(\text{VI}(C,F)\) 是求 \(z^\star\in C\) 使
几何含义:\(-F(z^\star)\) 属于 \(C\) 在 \(z^\star\) 的法锥 \(N_C(z^\star)\)。LCP 是 VI 的特例(取 \(C=\mathbb{R}^n_+\),\(F(z)=Mz+q\)):\(\text{VI}(\mathbb{R}^n_+,Mz+q)\) 就是 LCP。更一般地,接触问题(含摩擦锥约束)是 \(\text{VI}(\mathcal{K},F)\),\(\mathcal{K}\) 是摩擦锥(专题 2)。
VI 视角统一了 §7.1 的所有"力 ∈ 法锥":单边约束是 \(\text{VI}(\mathbb{R}_+,\cdot)\),摩擦是 \(\text{VI}(\text{摩擦圆盘},\cdot)\),整个接触问题是一个大 VI。VI 的解存在性(如 \(F\) 单调 + \(C\) 紧)、唯一性(\(F\) 强单调)理论,直接给出接触问题的适定性条件——而 Coulomb 摩擦破坏单调性(§7.1 洞察),正是接触问题难的根源。这把专题 2 的"摩擦非单调"提升为 VI 适定性的语言。
极大单调算子视角:摩擦律的"半正则"结构¶
VI 的良态性依赖单调性。这里深入一层,用**极大单调算子(maximal monotone operator)**的语言精确刻画摩擦律的单调结构——这解释了为什么"切向摩擦本身单调,但法-切耦合破坏单调",是 §7.1 洞察的精细化。
定义 7.6.2b(单调与极大单调算子) 集值映射 \(T:\mathbb{R}^n\rightrightarrows\mathbb{R}^n\) 单调,若对任意 \((x,u),(y,w)\in\text{gph}\,T\):\(\langle u-w,x-y\rangle\ge0\)。若其图不能再扩大而保持单调,称**极大单调**。凸函数的次微分 \(\partial f\) 是极大单调算子(Rockafellar 经典定理)——这是凸分析与单调算子理论的桥梁。
摩擦律的单调结构(基于 §7.2 例 2/3):固定法向力 \(\lambda_n\),切向摩擦力作为切向速度的(负)函数 \(\lambda_t\in-\mu\lambda_n\,\partial\|\cdot\|(v_t)\)。由于 \(\|\cdot\|\) 是凸函数,其次微分 \(\partial\|\cdot\|\) 是**极大单调**的;故 \(v_t\mapsto-\lambda_t\in\mu\lambda_n\partial\|v_t\|\) 单调。结论:固定法向力时,切向摩擦是极大单调算子——这是良态的(VI 有解、可用单调算子的分裂算法求解)。
更一般地(搜索结果中 set-valued friction 的结构):一般的集值摩擦模型(含 Stribeck、Stiction 等)可写为"Lipschitz 连续函数 + 凸 lsc 函数的次微分",后者在 \(\mathbb{R}^2\) 上是极大单调——所以**固定法向力的摩擦总是极大单调** + Lipschitz 扰动,保持良态。
为什么完整接触问题仍非单调(关键,桥接 §7.1):上面的良态性建立在**固定 \(\lambda_n\)** 之上。但完整接触问题中,法向力 \(\lambda_n\) 本身是未知量,且摩擦圆盘半径 \(\mu\lambda_n\) 依赖 \(\lambda_n\)——这个"约束集依赖于待求变量"的耦合使整个映射**不再单调**(它成为**拟变分不等式(quasi-variational inequality, QVI)**,约束集 \(\mathcal{K}(\lambda_n)\) 随解变化)。这就是 §7.1 洞察"法-切耦合使问题非凸/非单调"的精确机制:
本质洞察:接触问题的"病态"可以精确归因到一处——摩擦圆盘的半径 \(\mu\lambda_n\) 依赖于待求的法向力 \(\lambda_n\)。把这个耦合切断(固定 \(\lambda_n\)),摩擦立刻变成极大单调的良态 VI;耦合上(\(\lambda_n\) 未知),问题升级为 QVI,非单调、可能无解。这解释了现代接触求解器的一大类策略——交替/不动点迭代(如 projected Gauss-Seidel、Staggered projections):固定 \(\lambda_n\) 解切向(单调子问题),再更新 \(\lambda_n\),交替直到收敛。它们本质是把 QVI 拆成一系列单调 VI 子问题。理解极大单调结构,你就理解了这类求解器为何这样设计、以及它们何时(耦合太强时)收敛困难。
LCP 的代数-几何结构:QP-KKT 等价与 P-matrix(专题 1 的理论深化)¶
VI 视角还揭示了 LCP 与二次规划(QP)的深刻联系——这是专题 1 用过、但本章用非光滑语言讲清的核心结构,也是理解"LCP 何时良态"的关键。
命题 7.6.1b(对称 LCP = QP 的 KKT) 当 \(M\) 对称半正定(\(M=M^\top\succeq0\))时,LCP \(0\le z\perp Mz+q\ge0\) 恰好是凸 QP
的 KKT 条件。推导:该 QP 的 Lagrange 函数 \(L=\tfrac12 z^\top Mz+q^\top z-\nu^\top z\)(\(\nu\ge0\) 是 \(z\ge0\) 的乘子),KKT 条件为 \(\nabla_z L=Mz+q-\nu=0\)(即 \(\nu=Mz+q\))、\(\nu\ge0\)、\(z\ge0\)、\(\nu^\top z=0\)。代入 \(\nu=Mz+q\) 得 \(0\le z\perp Mz+q\ge0\)——正是 LCP!
这个等价的意义(认知工具 A,双重解读):对称 LCP 有两副等价面孔——互补问题(找满足互补的 \(z\))和**凸优化**(最小化二次能量)。前者难(组合),后者易(凸 QP 有多项式算法)。这解释了为什么**无摩擦接触**(法向 LCP 对称 PSD,因为它来自能量最小化原理)可以高效求解:它是凸 QP。而**有摩擦接触**的 \(M\) 非对称(切向耦合破坏对称性),LCP 不再对应凸 QP,回到组合难题——这从代数层面解释了 §7.1 洞察"摩擦让接触变难"。
P-matrix 与解的存在唯一性(专题 1/2 反复提及,这里给出本章视角的精确刻画):
定义 7.6.1c(P-matrix) 方阵 \(M\) 是 P-matrix,若其所有主子式(principal minors)为正。等价刻画:对所有 \(z\ne0\),存在指标 \(i\) 使 \(z_i(Mz)_i>0\)。
定理 7.6.1d(P-matrix ⟺ LCP 唯一可解,Murty 经典定理) \(M\) 是 P-matrix,当且仅当 LCP \(0\le z\perp Mz+q\ge0\) 对**所有** \(q\) 有唯一解。此时解映射 \(S(q)\) 单值且(分片线性、全局)Lipschitz——这正是 §7.3 练习 7.3.3 用 Mordukhovich 判据 T7 验证的结论。
为什么 Coulomb 摩擦不是 P-matrix(关键反例,桥接专题 2):无摩擦法向 LCP 的 \(M\) 是 PSD(且常 PD),是 P-matrix,解唯一。但加入 Coulomb 摩擦后,切向与法向耦合产生**非对称**项,且摩擦系数 \(\mu\) 较大时主子式可能变负——\(M\) 不再是 P-matrix。后果:(1) 解可能不唯一(多个一致的接触状态);(2) 解可能不存在(Painlevé 佯谬——经典例子是一根斜放的杆在高摩擦、特定角度下,刚体 + Coulomb + 单边约束的 LCP 无解,物理上对应"理论预测的法向力为负"的悖论,需要测度解或切向冲量来化解,见 §7.5 与 Stewart 2000)。
本质洞察:P-matrix 性质是接触问题"良态"与"病态"的数学分水岭。它的物理对应极其清晰——无摩擦接触良态(P-matrix,凸 QP,唯一解),有摩擦接触病态(非 P-matrix,非凸,可能无解/多解)。整个现代接触求解的技术路线(凸松弛 CCP/SAP 把非凸摩擦"投影"回凸问题、IPC barrier 绕过互补、半光滑 Newton 在 P-matrix 邻域二次收敛)都是在与"摩擦破坏 P-matrix"这一根本困难搏斗。理解了 P-matrix,你就理解了接触力学全部数值困难的源头。
视角三:互补即不可微方程(解析面孔,半光滑 Newton 的入口)¶
前两个视角是几何的。第三个视角——把互补条件压缩成一个**不可微方程**——才是绕过组合爆炸的关键。核心工具是 NCP 函数。
定义 7.6.3(NCP 函数) 函数 \(\psi:\mathbb{R}^2\to\mathbb{R}\) 称 NCP 函数(互补函数),若
即 \(\psi\) 的零点恰好刻画互补条件。有了 NCP 函数,LCP \(0\le z\perp Mz+q\ge0\) 等价于**方程组**
组合结构(活跃集)被编码进 \(\psi\) 的非光滑性,方程 \(\Phi(z)=0\) 是 \(n\) 个方程 \(n\) 个未知数——没有组合枚举了!代价:\(\Phi\) 不可微(\(\psi\) 在某些点不光滑),需要非光滑(半光滑)Newton 法。
最重要的 NCP 函数——Fischer–Burmeister(FB)函数:
验证它是 NCP 函数:\(\psi_{FB}(a,b)=0\iff\sqrt{a^2+b^2}=a+b\)。两边须 \(a+b\ge0\),平方得 \(a^2+b^2=(a+b)^2=a^2+2ab+b^2\),即 \(ab=0\)。配合 \(a+b\ge0\) 且 \(ab=0\),得 \(a,b\) 不同时负、且乘积为零 \(\Rightarrow a\ge0,b\ge0,ab=0\) ✓。
FB 函数的妙处:它在 \((a,b)\ne(0,0)\) 处光滑(\(\sqrt{a^2+b^2}\) 光滑),只在原点 \((0,0)\) 不可微。更重要的是——它强半光滑(下面),这保证了半光滑 Newton 的二次收敛。
最小函数 NCP:另一个常用 NCP 函数是 \(\psi_{\min}(a,b)=\min(a,b)\)(验证:\(\min(a,b)=0\iff a\ge0,b\ge0\) 且至少一个为 \(0\))。它更简单但只半光滑(非强半光滑),收敛阶略低。
半光滑函数与半光滑 Newton¶
要讲清半光滑 Newton 为何收敛,需要 §7.3 的 Bouligand 子微分,并引入半光滑性。
定义 7.6.4(半光滑与强半光滑,Qi–Sun 1993) 局部 Lipschitz 的 \(F:\mathbb{R}^n\to\mathbb{R}^n\) 在 \(x\) 处**半光滑(semismooth)**,若 \(F\) 方向可微,且对所有 \(V\in\partial_C F(x+h)\)(Clarke 广义 Jacobian):
若 \(Vh-F'(x;h)=O(\|h\|^2)\),称**强半光滑(strongly semismooth)**。直觉:半光滑意味着"用 \(x+h\) 处的广义 Jacobian 乘 \(h\),能以高于一阶的精度逼近方向导数"——这正是 Newton 法收敛所需的"局部线性化质量"。
定义 7.6.5(半光滑 Newton 法) 解 \(F(x)=0\) 的半光滑 Newton 迭代:
注意:取的是 Bouligand 子微分 \(\partial_B F\)(§7.3)的元素,不是 Clarke 的凸包 \(\partial_C F\)!这是 §7.3 陷阱里强调的——\(\partial_B\) 的元素是"真实分支的 Jacobian",保证非奇异;\(\partial_C\) 的凸组合可能奇异。
定理 7.6.6(Qi–Sun 半光滑 Newton 收敛,T5) 设 \(F\) 在解 \(x^\star\) 处半光滑,且 \(\partial_B F(x^\star)\)(或 \(\partial_C F(x^\star)\))的所有元素非奇异。则半光滑 Newton 局部**超线性收敛**;若 \(F\) 在 \(x^\star\) 强半光滑,则**二次收敛**。
这是 Qi–Sun 1993(Math. Program. 58:353–367,T5)的核心定理,是所有 NCP/VI 求解器收敛性的理论保证。证明骨架:由半光滑性 \(\|F(x_k)-F(x^\star)-V_k(x_k-x^\star)\|=o(\|x_k-x^\star\|)\)(强半光滑则 \(O(\|\cdot\|^2)\)),结合 \(V_k\) 非奇异(\(\|V_k^{-1}\|\) 有界),代入迭代式得 \(\|x_{k+1}-x^\star\|=o(\|x_k-x^\star\|)\)(超线性)或 \(O(\|x_k-x^\star\|^2)\)(二次)。这与光滑 Newton 的收敛证明结构相同,只是把"可微 + Jacobian 连续"换成"半光滑 + \(\partial_B\) 非奇异"。
定理 7.6.7(FB 函数强半光滑,T6) Fischer–Burmeister 函数 \(\psi_{FB}\) 在 \(\mathbb{R}^2\) 上处处强半光滑;其向量/锥推广(SOC、SDC 上)由 Sun–Sun 2005(Math. Program. 103:575–581,T6)证明强半光滑。
T6 是 T5 的"燃料":因为 FB 强半光滑,所以基于 FB 的半光滑 Newton 二次收敛。这就是 PATH 求解器(Dirkse–Ferris)、KNITRO、Drake 接触求解器的理论内核——把接触 NCP 用 FB 改写为 \(\Phi(z)=0\),半光滑 Newton 二次收敛求解,全程无组合枚举。
FB 函数的广义 Jacobian:半光滑 Newton 的具体装配¶
要真正实现半光滑 Newton,必须能算出 \(\Phi(z)=0\) 的广义 Jacobian 元素 \(V\in\partial_B\Phi(z)\)。对逐分量定义的 \(\Phi_i(z)=\psi_{FB}(z_i,(Mz+q)_i)\),链式法则给出 Jacobian 的第 \(i\) 行。设 \(a=z_i\)、\(b=(Mz+q)_i\)、\(r=\sqrt{a^2+b^2}\)。
情形 A:\((a,b)\ne(0,0)\)(光滑点)。 FB 可微,偏导
第 \(i\) 行(对变量 \(z\) 求导,\(\partial b/\partial z=M_{i,:}\) 是 \(M\) 的第 \(i\) 行,\(\partial a/\partial z=e_i^\top\)):
情形 B:\((a,b)=(0,0)\)(不可微点,对应 \(z_i\) 和 \((Mz+q)_i\) 同时为零,"弱激活"接触)。 FB 在原点不可微,取 Bouligand 子微分的元素:\(\partial_B\psi_{FB}(0,0)=\{(\gamma_a-1,\gamma_b-1):(\gamma_a,\gamma_b)\in\partial_B\|\cdot\|(0,0)\}\),其中 \(\partial_B\|\cdot\|(0,0)\) 是单位圆周(任意单位向量 \((\gamma_a,\gamma_b)\),\(\gamma_a^2+\gamma_b^2=1\))。实现时**取任一单位向量**(如 \((\gamma_a,\gamma_b)=(1,0)\) 或归一化的随机方向),得
关键:这里取 \(\partial_B\) 的**一个元素**(一个单位方向),而非凸包平均——这正是 §7.3、§7.6 陷阱强调的。autodiff 在原点恰好返回这样一个元素(取决于浮点比较),所以 autodiff + 半光滑 Newton 自然兼容。
完整走一遍:标量 LCP 的半光滑 Newton 迭代¶
把上面装配成完整迭代,走一个最小的标量例子 \(0\le z\perp z-1\ge0\)(即 \(M=1,q=-1\),解显然是 \(z^\star=1\),此时 \(z=1>0\)、\(Mz+q=0\),互补满足)。用 FB:\(\Phi(z)=\psi_{FB}(z,z-1)=\sqrt{z^2+(z-1)^2}-(z+(z-1))=\sqrt{2z^2-2z+1}-(2z-1)\)。
迭代公式:\(z_{k+1}=z_k-\Phi(z_k)/V_k\),\(V_k=\Phi'(z_k)\)(标量,光滑点导数)。
初值 \(z_0=3\)(远离解): - \(r_0=\sqrt{2\cdot9-6+1}=\sqrt{13}\approx3.606\);\(\Phi(z_0)=3.606-5=-1.394\);\(\Phi'(z_0)=5/3.606-2=-0.613\)。 - \(z_1=3-(-1.394)/(-0.613)=3-2.274=0.726\)。
\(z_1=0.726\): - \(r_1=\sqrt{2\cdot0.527-1.452+1}=\sqrt{0.602}\approx0.776\);\(\Phi(z_1)=0.776-0.452=0.324\);\(\Phi'(z_1)=0.452/0.776-2=-1.418\)。 - \(z_2=0.726-0.324/(-1.418)=0.726+0.229=0.955\)。
\(z_2=0.955\): - \(r_2=\sqrt{2\cdot0.912-1.910+1}=\sqrt{0.914}\approx0.956\);\(\Phi(z_2)=0.956-0.910=0.046\);\(\Phi'(z_2)\approx0.910/0.956-2=-1.048\)。 - \(z_3=0.955-0.046/(-1.048)=0.955+0.044=0.999\)。
\(z_3=0.999\):\(\Phi(z_3)\approx0.001\),\(z_4\approx1.0000\)。
观察误差序列 \(|z_k-1|\):\(2.0\to0.274\to0.045\to0.001\to\sim10^{-6}\)。每步误差大致平方(\(0.274^2\approx0.075\sim0.045\),\(0.045^2\approx0.002\sim0.001\))——这就是 T5/T6 保证的**二次收敛**的数值体现!全程无活跃集枚举,纯 Newton 迭代。这个手算例子让你亲眼看到"FB + 半光滑 Newton 二次收敛"不是抽象定理,而是可验证的数值事实(累积项目 verify_semismooth_newton.py 把它推广到 \(n=50\))。
阶段小结:到这里我们用三个视角(法锥、VI、不可微方程)重看了互补条件,深化了 LCP 的 P-matrix 良态性分析,并沿"NCP 函数 → 广义 Jacobian 装配 → 半光滑 Newton 二次收敛"的链条(含一个手算迭代)解释了现代接触求解器如何绕过组合爆炸。接下来 §7.7 把本章所有工具系统地映射到接触力学全章的具体技术,完成知识闭环。
对比:互补的三个视角导向三类求解器¶
用一张系统分类表(认知工具 E)总结,让你在面对接触求解器时能"按视角归类":
| 视角 | 数学形式 | 导向的算法 | 代表求解器 | 优劣 |
|---|---|---|---|---|
| 组合面孔 | 活跃集枚举 | Pivoting(Lemke) | 经典 LCP 求解器 | 小规模精确;\(2^n\) 爆炸,仅 P-matrix 保证 |
| 几何面孔 | 法锥/VI + 投影 | Projected Gauss-Seidel | ODE、Bullet、PGS | 简单、并行;收敛慢、精度低 |
| 解析面孔 | NCP 函数方程 \(\Phi=0\) | 半光滑 Newton | PATH、Drake、KNITRO | 二次收敛、大规模;需 \(\partial_B\) 非奇异 |
| (去互补) | barrier 内罚 | 投影 Newton | IPC(专题 4/进阶 2.5) | 无穿透、Hessian SPD;引入参数 \(\hat d\) |
最后一行"去互补"(IPC barrier)是本章进阶部分(与原文 2.5 节呼应)的方向——它干脆**不写互补条件**,用 barrier 把单边约束 \(d\ge0\) 替换为内罚 \(-(d-\hat d)^2\log(d/\hat d)\),从而避开互补的非光滑性,换来 Newton Hessian 半正定、全局收敛(专题 4 与进阶资源详述)。这是 2020 年后接触仿真"从互补转向 barrier"范式转变的核心(原文档前沿地图的主线)。
为什么摩擦破坏 P-matrix 性质:非对称化的代数根源¶
§7.5 反复说"无摩擦碰撞 LCP 良态(\(W\) 对称 PSD),加摩擦后病态"。这里从代数上说清**摩擦究竟如何破坏 P-matrix 性质**——这是接触求解一切困难(多解、无解、Newton 失效)的代数总根源,值得单独剖析(认知工具 C:本质洞察)。
无摩擦:对称即良态。 无摩擦时接触 LCP 的矩阵就是法向 Delassus 算子 \(W_n=J_nM^{-1}J_n^\top\)。它**对称**(\(W_n^\top=W_n\),因 \(M^{-1}\) 对称)且 PSD。对称 PSD 矩阵是 P0-matrix,对应**凸 QP**(§7.6 命题 7.6.1b:LCP \(\leftrightarrow\) QP-KKT),故解存在、(在严格互补下)唯一。这是无摩擦接触"永远能解"的代数保证。
有摩擦:耦合即非对称。 加入 Coulomb 摩擦后,切向约束的边界 \(\|P_t\|\le\mu P_n\) 把法向冲量 \(P_n\) 乘进了切向约束——这是一个**非对称耦合**:法向影响切向(通过 \(\mu P_n\) 缩放摩擦锥),但切向不以同样方式影响法向。线性化(如取定滑动方向后的"线性化摩擦锥")后,接触 LCP 的矩阵变成
其中 \(-\mu D\) 项(摩擦把法向耦进切向方程)只出现在下三角,使 \(M_{\text{fric}}\ne M_{\text{fric}}^\top\)。非对称矩阵不再对应任何 QP,P-matrix 性质可能丢失(取决于 \(\mu\) 大小与构型)。
后果的精确刻画: - \(\mu\) 小:\(M_{\text{fric}}\) 虽非对称但仍是 P-matrix(特征值实部为正),LCP 单解、半光滑 Newton 收敛。 - \(\mu\) 大 + 特定构型:\(M_{\text{fric}}\) 失去 P-matrix 性,LCP 可能**多解**(接触模式不唯一)或**无解**(Painlevé,§7.5)。这正是 Painlevé 佯谬在代数层的表现——不是数值误差,而是矩阵本身越过了 P-matrix 边界。
本质洞察:接触求解的全部代数困难,可归结为一句话——摩擦把对称 PSD 的法向 Delassus 算子,非对称化成可能非 P-matrix 的摩擦矩阵。对称 ↔ 凸 QP ↔ 良态;非对称 ↔ 无 QP 对应 ↔ 可能病态。这条"对称性 → 凸性 → 良态性"的链条,把 §7.2(摩擦的集值来源)、§7.5(Delassus 算子、Painlevé)、§7.6(P-matrix、QP 等价)三节的所有结论统一到一个代数事实上。理解它,你面对任何接触求解器就有了总纲:先问"有没有摩擦"(决定对称性),再问"\(\mu\) 多大、构型如何"(决定是否越过 P-matrix 边界)——这两问基本能预判一个接触问题好不好解。这也是为什么凸松弛(专题 2 的 CCP/SAP)和 barrier(IPC)这两条现代路线,本质上都是在"恢复某种对称性/凸性"以绕开非对称摩擦矩阵的病态。
⚠️ 常见陷阱¶
💡 概念误区:以为 NCP 函数把问题"光滑化"了 新手想法:"用 FB 函数把互补写成方程 \(\Phi(z)=0\),这下光滑可微了,普通 Newton 就行。" 实际上:NCP 函数把**组合**非光滑转化为**解析**非光滑——\(\Phi\) 仍不可微(FB 在原点不可微),只是非光滑的"类型"变了(从离散的活跃集切换变成连续的不可微点)。必须用**半光滑** Newton(取 \(\partial_B\) 元素),不是普通 Newton(需要可微)。 为什么重要:用普通 Newton 解 \(\Phi(z)=0\),在不可微点 Jacobian 无定义,迭代会崩溃或停滞。理解"NCP 函数转化而非消除非光滑",才会正确使用半光滑 Newton。
💡 概念误区:半光滑 Newton 里用 Clarke 广义 Jacobian 的凸组合 新手想法:"\(\partial_C F=\text{conv}\,\partial_B F\) 信息更全,Newton 步用 \(\partial_C\) 里的元素更稳。" 实际上:必须用 \(\partial_B F\)(Bouligand)的元素,不能用 \(\partial_C\) 的凸组合。原因(§7.3 已述):\(\partial_B\) 的元素是真实分支 Jacobian,定理 T5 保证非奇异;\(\partial_C\) 的凸组合是"平均",两个非奇异矩阵的凸组合可以奇异,导致 Newton 矩阵不可逆、迭代崩溃。 为什么重要:这是半光滑 Newton 实现的关键细节。autodiff 在不可微点恰好返回 \(\partial_B\) 的一个元素(§7.2 陷阱),所以"autodiff + 半光滑 Newton"恰好兼容——这也是为什么 autodiff 对 Newton 够用、对梯度下降危险。
🧠 思维陷阱:以为所有接触问题都能用半光滑 Newton 二次收敛求解 新手想法:"FB + 半光滑 Newton 二次收敛,那接触问题都这么解就行。" 实际上:二次收敛的前提是 \(\partial_B F(x^\star)\) 非奇异(T5)。当 Coulomb 摩擦导致 LCP 非 P-matrix(专题 2 的 Painlevé 构型),\(\partial_B\) 可能奇异(摩擦锥顶点),Newton 失去非奇异性保证,可能不收敛或收敛到非解点。这正是为什么 Coulomb 摩擦的接触求解至今是研究难题,也是 IPC barrier(去互补)兴起的动机。 正确思维:半光滑 Newton 的二次收敛是"良态"(P-matrix / 强正则)下的保证;遇到摩擦锥顶点、Painlevé 构型等"病态",需要正则化、凸松弛(专题 2 的 CCP/SAP)或换用 barrier 方法(IPC)。先判断问题良态性,再选算法。
练习¶
练习 7.6.1(推导题,在草稿纸上完成) (a) 验证最小函数 \(\psi_{\min}(a,b)=\min(a,b)\) 是 NCP 函数;(b) 计算 \(\psi_{\min}\) 在 \((0,0)\) 和在 \(a=b>0\)(对角线,\(\min\) 的不可微面)处的 Bouligand 子微分 \(\partial_B\psi_{\min}\) 和 Clarke 次微分 \(\partial_C\psi_{\min}\);(c) 说明为什么半光滑 Newton 在 \(a=b\) 处取 \(\partial_B\) 的元素(即 \((1,0)\) 或 \((0,1)\),对应"选哪个分支活跃")而非凸组合 \((\frac12,\frac12)\)。
练习 7.6.2(证明题) 证明 Fischer–Burmeister 函数 \(\psi_{FB}(a,b)=\sqrt{a^2+b^2}-(a+b)\) 在 \((a,b)\ne(0,0)\) 处光滑,并计算其梯度 \(\nabla\psi_{FB}=\left(\frac{a}{\sqrt{a^2+b^2}}-1,\ \frac{b}{\sqrt{a^2+b^2}}-1\right)\)。再用 §7.2 Gradient Formula 求 \(\partial_C\psi_{FB}(0,0)\)(提示:\(\nabla\psi_{FB}\) 沿不同方向 \((a,b)\to0\) 的极限是单位圆上点减 \((1,1)\),取凸包)。这一计算是验证 FB 半光滑性(T6)的第一步。
练习 7.6.3(跨视角综合题,开放性) 对同一个标量互补条件 \(0\le a\perp b\ge0\),分别写出它的三副面孔:(a) 组合面孔(列出活跃集情形);(b) 几何面孔(法锥包含 + 投影方程);(c) 解析面孔(FB 方程)。然后讨论:若有 \(n=30\) 个接触对,三种面孔分别导向的算法各自的计算复杂度量级是多少?为什么解析面孔(半光滑 Newton)在大规模时胜出?这道题帮你把本节三视角与专题 1 的活跃集方法、物理引擎的 PGS、PATH 求解器在脑中连成一张图。
练习 7.6.4(证明题) 本节指出"摩擦把对称 PSD 的法向 Delassus 算子非对称化"。(a) 验证无摩擦法向 Delassus 算子 \(W_n=J_nM^{-1}J_n^\top\) 对称且 PSD;(b) 取一个最小的单点滑动摩擦接触(一维法向 + 一维切向,给定滑动方向),写出线性化后的 \(2\times2\) 摩擦矩阵 \(M_{\text{fric}}\),验证它含一个只在下三角的 \(-\mu D\) 项故非对称;(c) 求一个临界摩擦系数 \(\mu_c\),使 \(\mu>\mu_c\) 时 \(M_{\text{fric}}\) 不再是 P-matrix(提示:检查 \(2\times2\) P-matrix 判据——两个主子式均正),并解释这与 Painlevé 佯谬的关系。
§7.7 桥接:本章如何为接触力学全章提供数学根基 ⭐⭐¶
动机:每个工具都欠着一笔"债"¶
本章前六节建立了非光滑分析的工具箱:Clarke 广义梯度、四种次微分、微分包含、测度微分包含、互补的非光滑视角。但工具只有用起来才有意义。本节系统地"还债"——把每个工具映射到接触力学全章(专题 1–6)的一个具体技术,明确指出"那里用过但没证的东西,这里用本章工具补证"。这是 R14 跨章知识桥接的集中兑现,也是把零散工具收束成"知识树"的关键一步。
本章在接触力学全章中的定位是**理论天花板**:专题 1–6 教你**用**非光滑工具(写 LCP、用 FB 函数、求 saltation、调 Aubin 连续性),但**只用不证**;本章把这些工具系统化,给出它们的严格证明与统一框架。一句话——不学本章仍可做工程;学了本章才能做研究。
桥接一:为专题 1(互补/Signorini)补证解映射的 Lipschitz 性¶
专题 1 用了什么:写出 LCP \(0\le z\perp Mz+q\ge0\),断言"\(M\) 是 P-matrix 时解唯一且连续依赖 \(q\)"。 专题 1 没证什么:为什么解映射 \(S(q)\) 局部 Lipschitz?P-matrix 之外(如 Coulomb 摩擦的非对称 \(M\))会怎样?
本章如何补证:用 §7.3 的 Mordukhovich 判据(T7)。LCP 解映射 \(S(q)\) 的 Aubin 性质(局部 Lipschitz)等价于余导数判据 \(D^*S(\bar q|\bar z)(0)=\{0\}\)。当 \(M\) 是 P-matrix,可计算余导数(用 \(N_{\mathbb{R}^n_+}\) 的 limiting 法锥)验证判据满足,从而 \(S\) 单值 Lipschitz;结合 Robinson 强正则性(T9),还能得到"\(C^1\)-样"依赖。当 \(M\) 非 P-matrix(摩擦),判据可能失败,对应解多值/不存在(Painlevé)——这就从非光滑分析层面解释了专题 2"Coulomb 摩擦不是 P-matrix"的后果。§7.6 的命题 7.6.1(互补 = 法锥包含)是把 LCP 翻译成广义方程、从而能用 T7/T9 的桥梁。
桥接二:为专题 2(摩擦锥)补证摩擦力的广义梯度结构¶
专题 2 用了什么:摩擦力 \(F_t\in\mu\|F_n\|\cdot\text{Sign}(v_t)\),二阶锥几何,最大耗散原理。 专题 2 没证什么:为什么 \(\text{Sign}(v_t)\) 在 \(v_t=0\) 处是 \([-1,1]\)(一维)或圆盘(二维)?这个"集值"从哪来?
本章如何补证:用 §7.2 的 Clarke 广义梯度。摩擦力是耗散势 \(\mu\lambda_n\|v_t\|\) 的负广义梯度,\(\partial_C(\mu\lambda_n\|\cdot\|)(0)\) 经 Gradient Formula 算出正是半径 \(\mu\lambda_n\) 的圆盘(§7.2 例 3)。stick-slip 的数学根源 = \(\partial_C|\cdot|\) 在尖点张成区间(§7.2 例 2)。最大耗散原理则是 §7.6 的 VI 表述 \(-v_t\in N_{\text{摩擦圆盘}}(\lambda_t)\)。专题 2 的"摩擦非单调"在本章是"VI 的 \(F\) 非单调"(§7.6),它解释了为什么接触 VI 适定性差。
桥接三:为专题 3(时步法)补证"为何用速度-冲量、隐式格式"¶
专题 3 用了什么:Moreau–Jean θ-scheme,以速度-冲量为变量,隐式离散,碰撞作为冲量涌现。 专题 3 没证什么:为什么不能用位置-加速度 + 显式格式?为什么碰撞不需要事件检测?
本章如何补证:用 §7.5 的测度微分包含。接触动力学本质是 MDI \(M\,dv+\ldots=J^\top d\Lambda\),其中 \(dv\) 是测度(碰撞时含 Dirac)、加速度不是有限值。所以**必须离散冲量(测度的积分)而非加速度(测度的密度)——这就是速度-冲量变量的根源(§7.5 已详细推导 Moreau–Jean 离散)。约束作用于右速度 \(v^+\),故需隐式。MDI 统一处理光滑段与碰撞,离散后自然涵盖两者,无需事件检测(也避开 Zeno)。§7.5 是专题 3 全部设计选择的数学解释。** Filippov 解(§7.4)则解释了专题 3 在 stick-slip 段的滑模行为。
桥接四:为专题 5(混合系统/Saltation)补证 saltation 矩阵的非光滑本质¶
专题 5 用了什么:saltation 矩阵 \(\Xi\) 描述接触事件(触地)瞬间状态雅可比的跳变,用于 Salted Kalman Filter、HiLQR-MPC。 专题 5 没证什么:saltation 矩阵的严格数学地位是什么?它是"导数"吗?在什么意义下?
本章如何补证:用 §7.3 的 Bouligand 导数(B-导数)。轨迹关于初值的灵敏度在接触事件处不可微(因为触地时刻本身依赖初值),但它是 Bouligand 可微**的——saltation 矩阵 \(\Xi\) 正是这个 B-导数("选对活跃分支后的 Jacobian",§7.3 定义 7.3.3 的精神)。Burden 等 2016(SIADS,原文档 T 部分提及)把 saltation 严格升级为 B-导数。这解释了为什么 saltation 矩阵"像导数但又在事件处跳变"——它是非光滑(分片光滑)映射的 B-导数。§7.3 的 \(\partial_B\) 与 B-导数是专题 5 saltation 理论的数学根基。**
桥接五:为专题 4/6(可微仿真、CI-MPC)补证可微性与灵敏度¶
专题 4/6 用了什么:可微接触仿真(对接触过程求梯度,用于学习/优化);CI-MPC 把接触作为优化变量。 专题 4/6 没证什么:接触过程"可微"是什么意思(接触明明非光滑)?IPC barrier 为何 Newton 友好?
本章如何补证: - 可微性:接触仿真的"梯度"实际是 §7.2/§7.3 的广义梯度/B-导数。autodiff 返回的是 \(\partial_B\) 的元素(§7.2 陷阱),对 Newton 够用、对梯度下降需谨慎。Le Lidec–Carpentier 等的解析可微仿真(原文档前沿)本质是计算接触 LCP/NCP 解映射的 B-导数。 - IPC barrier 的 Newton 友好性:IPC 用 barrier \(-(d-\hat d)^2\log(d/\hat d)\) 替代互补条件(§7.6 对比表"去互补"),它在可行域内光滑凸、Hessian 半正定(原文档 T12),所以投影 Newton 全局收敛,与 LCP 的 pivot 切换形成对比。本章 §7.6 的"互补三视角 + 去互补"为 IPC 提供了定位——它是规避互补非光滑性的第四条路。 - 灵敏度:CI-MPC 对接触轨迹的灵敏度依赖 §7.3 的 Robinson 强正则性(T9),它桥接 NMPC 的灵敏度分析(与第五批控制理论相连)。
桥接六:为第五批(控制理论)补证滑模控制与非光滑镇定的合法性¶
第五批用了什么:滑模控制(sliding mode control, SMC)设计不连续控制律 \(u=-k\,\text{sign}(\sigma(x))\) 把轨迹逼到滑模面 \(\sigma=0\) 上并锁住,获得对匹配不确定性的鲁棒性;非光滑系统的镇定常用 \(V=\|x\|_1\)、\(V=\max_i|x_i|\) 等非光滑 Lyapunov 函数。
第五批没证什么:(1) 不连续控制律 \(u=-k\,\text{sign}(\sigma)\) 让闭环右端不连续,"闭环解"在什么意义下存在?(2) 用非光滑 \(V\) 证稳定时,"\(\dot V\)"是什么(\(V\) 不可微)?
本章如何补证: - 闭环解的合法性:闭环 \(\dot x=g(x)-k\,h(x)\,\text{sign}(\sigma(x))\) 右端不连续,其解就是 §7.4 的 Filippov 解。SMC 的"滑动阶段"= Filippov 滑模(轨迹锁在 \(\Sigma=\{\sigma=0\}\),§7.4 滑模判据),等效控制 \(u_{eq}\) = Filippov 凸系数 \(\alpha^\star\) 对应的有效控制。这与摩擦的被动滑模是同一个 Filippov 机制(练习 7.4.3 已点明),区别仅在切换面是设计者选的(\(\sigma(x)=0\) 任意期望流形)还是物理给的(\(v=0\))。对控制非仿射系统,还须注意 §7.4 提到的 Aizerman–Pyatnitskii 歧义——SMC 的等效控制法与 Filippov 凸化可能分叉,论文须声明用哪个。 - 非光滑 Lyapunov 的合法性:用 \(V=\|x\|_1\) 证稳定时,"\(\dot V\)"是 §7.4 定理 7.4.4 的**集值导数** \(\dot{\bar V}=\{\langle\xi,w\rangle:\xi\in\partial_C V(x),w\in F(x)\}\),稳定性要求其**最大值**为负。这正是 §7.2 Clarke 梯度(静态)+ §7.4 微分包含(动态)的缝合。
接触-控制的合流:足式机器人的接触镇定同时是"接触"(§7.5 测度动力学)和"控制"(§7.4 滑模/非光滑 Lyapunov)问题——这就是为什么本章把这两条线(接触的非光滑、控制的非光滑)用**同一套 Filippov/Clarke 工具**统一。第五批的滑模控制器作用在第三批时步法仿真的接触系统上时,闭环是一个**带不连续控制的测度微分包含**——目前严格理论(解的存在唯一)仍是活跃研究方向(专题 6 进阶提及)。
完整走一遍:从一个工程声明到本章定理的"还债"全链路¶
桥接表是静态的对照,这里动态地演示**一次完整的"还债"**——拿一个真实论文里常见的声明,一步步追溯它依赖本章哪些定理,每一步都"补上专题里欠的证明"。这是认知工具 D(理论-工程桥接)的集中演练,也是练习 7.7.3 的范例答案。
工程声明(取自一篇假想的"可微接触 MPC"论文摘要):"我们的接触感知 MPC 求解器二次收敛,接触力对参考轨迹 Lipschitz 连续,因而闭环鲁棒稳定,且全栈对策略参数可微。" 这一句话埋了**四个理论债**,逐一还:
债 1:「二次收敛」。求解器内核是半光滑 Newton 解接触 NCP(§7.6)。还债链:声称二次收敛 → 须 NCP 函数(FB)强半光滑(§7.6 T6,Sun–Sun 2005)+ 解处广义 Jacobian 的 \(\partial_B\) 元素非奇异(§7.6 T5,Qi–Sun 1993)。风险点:摩擦锥顶点(\(P_n=0\) 边界)处 \(\partial_B\) 可能奇异,二次收敛失效——论文须声明"在严格互补构型下"或加全局化(line search)。
债 2:「接触力 Lipschitz 连续」。这是接触解映射 \(S(p)\)(参数 \(p\) = 参考轨迹)的灵敏度。还债链:声称 Lipschitz → 须 Aubin 性质 → 余导数判据 \(D^*S(0)=\{0\}\)(§7.3 T7,Mordukhovich 判据,必须用 limiting 法锥而非 Clarke)→ 在 P-matrix/强正则构型成立。风险点:Coulomb 摩擦非 P-matrix,Painlevé 构型下判据失败,Lipschitz 不成立——论文须限定构型或承认局部失效。
债 3:「闭环鲁棒稳定」。MPC 闭环含接触切换,是非光滑系统。还债链:声称稳定 → 须非光滑 Lyapunov(§7.4 T4.4)集值导数最大值为负 + 闭环解为 Filippov 解(§7.4)。若用滑模控制成分,等效控制须与 Filippov 凸化一致(§7.4 Aizerman–Pyatnitskii,控制仿射时自动满足)。
债 4:「全栈可微」。还债链:接触"梯度"= §7.2/§7.3 的广义梯度/B-导数,autodiff 实际返回 \(\partial_B\) 元素(§7.2 陷阱)——对 Newton 够用,对梯度下降在尖点可能给"错误下降方向"。风险点(也是审稿高频被打回点,§7.8.5):GPU 仿真常把"部分物理层可微"写成"全栈可微",须明确声明可微的物理层(如"MPM 可微、刚体 AD 在 roadmap")。
本质洞察:一句 30 字的工程声明,背后是 §7.2、§7.3、§7.4、§7.6 四节、六个定理(T4.4/T5/T6/T7/T9 + Filippov 解理论)的支撑,每个声明都对应一个"风险点"(摩擦顶点、非 P-matrix、控制非仿射、部分可微)。这就是"学了本章才能做研究"的具体含义——不学本章,你只能写"实验上 work";学了本章,你能在投稿前自己审出这四个风险点,要么补证、要么诚实限定适用范围。这种"从声明倒推定理、从定理识别风险"的能力,是审稿人和资深研究者的核心素养,也是本章桥接节的终极目标。
桥接全景表¶
把上述桥接汇成一张总表(这是原文档"与其他批次/专题的桥梁"和"核心定理清单"的教学化整合),它就是本章的"知识树主干":
| 接触力学技术(出处) | 用过但没证的东西 | 本章补证工具 | 关键定理 |
|---|---|---|---|
| LCP/Signorini(专题 1) | 解映射 Lipschitz 依赖、P-matrix 之外的行为 | Mordukhovich 判据 + 法锥包含(§7.3, §7.6) | T7, T9 |
| 摩擦锥(专题 2) | \(\text{Sign}(v_t)\) 集值的来源、最大耗散 | Clarke 广义梯度 + VI(§7.2, §7.6) | T1, T2, T3 |
| 时步法(专题 3) | 速度-冲量变量、隐式、无事件检测 | 测度微分包含 + Moreau 扫动(§7.5) | — (MDI 框架) |
| 混合系统/Saltation(专题 5) | saltation 矩阵的导数地位 | Bouligand 导数(§7.3) | (Burden 2016) |
| 可微仿真(专题 4) | 接触"可微"的含义、IPC Newton 友好 | 广义梯度/B-导数 + barrier(§7.2, §7.6) | T11, T12 |
| CI-MPC(专题 6) | 接触轨迹灵敏度、NMPC 良态 | Robinson 强正则性(§7.3) | T9 |
| 半光滑 Newton(专题 2/求解器) | FB 为何二次收敛 | 半光滑性 + Qi–Sun(§7.6) | T5, T6 |
概念预告:本章工具在机器人中的"长相"¶
最后给一张"概念预告表"(整合原文档同名表),让你知道本章每个抽象工具在真实机器人系统里以什么形式出现——这是认知工具 D(理论-工程桥接)的集中体现:
| 抽象工具(本章节) | 在机器人中的"长相" |
|---|---|
| Clarke 广义梯度 \(\partial_C f\)(§7.2) | Coulomb 摩擦律在 \(v_t=0\) 处的力集合 \([-\mu N,+\mu N]\) |
| 四种次微分层级(§7.3) | 选 Clarke 还是 Mordukhovich:工程实现 vs 论文灵敏度分析 |
| Mordukhovich 余导数 \(D^*S\)(§7.3) | 证明接触力对关节扰动的 Lipschitz 依赖(impedance 控制良态) |
| Bouligand 导数(§7.3) | Hopping robot 触地瞬间的状态雅可比跳变(saltation 矩阵 \(\Xi\)) |
| 微分包含 + Filippov 解(§7.4) | 足式机器人脚底的 stick-slip 切换、滑模控制 |
| 测度微分包含(§7.5) | 落地冲击的速度跳变;时步法的冲量变量 |
| Moreau 扫动过程(§7.5) | 物体被接触约束"挡住"——自由运动直到撞上可行域边界 |
| Delassus 算子 \(W=JM^{-1}J^\top\)(§7.5) | 多点碰撞冲量的耦合矩阵;其条件数 = 仿真步病态度 |
| 三种碰撞律(§7.5) | 仿真器恢复模型选型:Newton(教学)/ Poisson / Moreau(Siconos) |
| 互补的三视角(§7.6) | LCP 求解器选型:pivoting / PGS / 半光滑 Newton |
| Fischer–Burmeister + 半光滑 Newton(§7.6) | PATH/KNITRO/Drake 所有 NCP 求解器的收敛保证 |
| 去互补 barrier(§7.6 对比表) | 可微四足/灵巧手 CIO 的 IPC 表达 |
⚠️ 常见陷阱¶
💡 概念误区:以为"理论根基"对工程实践可有可无 新手想法:"专题 1–6 已经能跑仿真、做优化了,本章的证明只是锦上添花。" 实际上:本章的工具在**两类时刻**变得不可或缺——(1) 仿真/优化出现反常(发散、无解、穿透)需要诊断时(要靠 §7.5 判断"是不是测度处理错了"、§7.6 判断"是不是 Painlevé 无解");(2) 写论文需要证明收敛性/稳定性/灵敏度时(要靠 T5/T6/T7/T9)。前者是"调试的理论",后者是"发表的理论"。 为什么重要:缺了本章,你只能在工程问题面前"试错"(调参数、改步长),无法定位根本原因;面对审稿质疑只能"实验上 work",给不出理论保证。
🧠 思维陷阱:把本章工具孤立记忆,不连成知识树 新手想法:"Clarke 梯度、Filippov 解、Moreau 扫动……一个个记住就行。" 实际上:本章工具的价值在于它们的**连接**——它们共同服务于一个目标(给接触的非光滑性配上严格数学),且彼此关联(Clarke 梯度与 Filippov 凸化对偶 §7.4,limiting 次微分支撑余导数 §7.3,MDI 是 DI 的测度推广 §7.5)。孤立记忆会让你"见树不见林",遇到新问题不知道调用哪个工具。 正确思维:记住本章的"知识树"——根是"接触非光滑",三大主干是"替代导数(§2,3)、替代解(§4,5)、替代方程(§6)",桥接(§7)是把主干接到专题 1–6 的果实。带着这棵树,任何接触问题你都能定位到对应工具。
练习¶
练习 7.7.1(综合诊断题,开放性) 你在仿真一个灵巧手抓取,遇到三个现象:(a) 手指在物体表面"缓慢滑移"无法夹稳;(b) 某些抓取构型下求解器报"无解";(c) 物体被抓起瞬间,估计的物体速度有不连续跳变。请分别指出每个现象对应本章哪个理论(提示:a→正则化摩擦/static friction 缺失 §7.1/§7.4;b→Painlevé/非 P-matrix §7.6;c→碰撞测度/saltation §7.5/§7.3),并说明用哪个工具诊断。
练习 7.7.2(跨章综合题,需综合专题 1+2+3) 手动组装一个最小的"接触仿真一步"的数学流程:给定当前构型 \(q_k\)、速度 \(v_k\),用专题 1 的 Signorini(§7.6 命题 7.6.1 写成法锥)+ 专题 2 的摩擦锥(§7.2 广义梯度)+ 专题 3 的 Moreau–Jean 离散(§7.5),写出求解 \(v_{k+1}\) 和接触冲量 \(P_{k+1}\) 的完整方程组(含动量平衡、Signorini 互补、摩擦锥约束)。指出这个方程组用本章 §7.6 哪个视角(NCP 函数 / VI / barrier)求解最高效。
练习 7.7.3(研究路线开放题) 假设你要写一篇"新型可微接触求解器"的论文。请列出你需要从本章引用哪些定理来支撑以下声明:(a)"我的求解器二次收敛";(b)"接触力对扰动 Lipschitz 连续,故控制器稳定";(c)"我的方法无穿透";(d)"接触梯度(用于反向传播)是良定义的"。对每个声明,写出引用的定理编号(T1–T12)和对应本章小节。这道题让你把本章从"学习材料"转化为"研究工具库"。
练习 7.7.4(跨章综合题,需综合专题 3 + 第五批控制理论) 桥接六指出"滑模控制器接到接触时步法仿真上,闭环是带不连续控制的测度微分包含"。请针对一个最小例子——单腿跳跃机器人(一维,腿端与地面 Signorini 接触,控制律为滑模 \(u=-k\,\text{sign}(\dot y-\dot y_{ref})\))——分析:(a) 自由飞行段、接触段、触地碰撞瞬间分别对应本章哪个数学对象(ODE / DI / MDI)?(b) 滑模控制的切换面与接触切换面(\(\phi=0\))相交时,会不会出现 §7.4 多面交线的等效动力学多值?(c) 要证这个闭环稳定,你需要组合本章哪几个定理(提示:碰撞步用 §7.5 能量耗散,接触段用 §7.3 强正则,控制用 §7.4 非光滑 Lyapunov)?
练习 7.7.5(论文审稿模拟题,开放性) 把"完整走一遍:从一个工程声明到本章定理"的方法反向运用:你作为审稿人,收到一篇声称"用 GPU 可微仿真训练的接触策略,全栈可微且接触力 Lipschitz 连续保证策略梯度无偏"的论文。请列出你会基于本章提出的**三个质疑**(提示:全栈可微 vs 部分可微 §7.8.5;Lipschitz 须 P-matrix/强正则 §7.3,Coulomb 摩擦未必满足;autodiff 返回 \(\partial_B\) 元素对梯度下降在尖点可能有偏 §7.2),并对每个质疑指出作者应补充什么证明或限定。
本章常见误解汇总¶
下表汇总本章贯穿的核心误解与正确理解,是复习时的"查错清单"。这些误解大多源于"用光滑世界的直觉去理解非光滑对象"。
| 误解 | 正确理解 | 出处 |
|---|---|---|
| 非光滑 = 不连续 | 非光滑核心是 Lipschitz 但不可微(连续不可导);不连续是更进一步的层次 | §7.1 |
| 光滑化(penalty/正则化)是无害近似 | 光滑化改变问题数学类型,把非光滑转化为数值刚性/物理失真,非光滑性守恒 | §7.1 |
| Clarke 广义梯度是唯一的非光滑导数 | 有四种次微分;Clarke 永远凸(便利但丢信息),Mordukhovich 可非凸(精细) | §7.2, §7.3 |
| Clarke 正则 = 光滑 | 正则是 \(f^\circ=f'\);凸函数、max 函数都正则但不光滑;凹函数光滑但不正则 | §7.2 |
| Mordukhovich 次微分是凸集 | limiting 次微分一般非凸;Clarke 是它的凸包 | §7.3 |
| 半光滑 Newton 用 Clarke 凸 Jacobian | 必须用 Bouligand \(\partial_B\) 的元素(真实分支,非奇异);凸组合可能奇异 | §7.3, §7.6 |
| 不连续 ODE 靠"在切换面定义右端值"解决 | 必须 Filippov 凸化为集值右端,让解自己"选"合适的值 | §7.4 |
| 滑模/stick-slip 抖振是数值 bug 要消除 | 滑模是物理正确的(静摩擦);抖振是离散没处理好凸组合 | §7.4 |
| 碰撞加速度是"很大的有限值" | 刚性碰撞加速度是 Dirac 测度;基本量是冲量(测度的积分) | §7.5 |
| 减小步长能"积分穿过"碰撞 | 碰撞瞬时,无论步长多小都在一步内;须用冲量 + 隐式约束 | §7.5 |
| Filippov 凸化是唯一的"加厚"方式 | 还有 Krasovskii、Utkin;控制仿射且 Sign 良性时三者一致,非仿射时分叉 | §7.4 |
| 碰撞律只有 Newton 一种 | Newton/Poisson/Moreau 三种;Newton 多体可能违反能量守恒,Moreau 多点天然一致 | §7.5 |
| 多点碰撞冲量分配总是唯一的 | 高对称/刚性耦合下解可能不唯一(凸系数自由度);唯一的是等效速度/质心轨迹 | §7.4, §7.5 |
| Delassus 算子只判"是否 PSD" | 其条件数 \(\kappa(W)\) 决定碰撞 LCP 病态度与 PGS 收敛速度;非对角元 = 接触耦合 | §7.5 |
| NCP 函数把互补问题"光滑化"了 | NCP 函数把组合非光滑转为解析非光滑,仍需半光滑 Newton | §7.6 |
| 所有接触都能半光滑 Newton 二次收敛 | 需 \(\partial_B\) 非奇异;Coulomb 摩擦/Painlevé 下可能失败 | §7.6 |
本章小结¶
本章从一个核心信念出发——接触力学的全部数学困难,源于光滑性在接触、摩擦、碰撞上系统失效——构建了非光滑分析的完整工具箱。回顾这棵知识树:根是"非光滑的三大物理来源"(§7.1),三大主干是"替代导数"(Clarke 广义梯度 §7.2、四种次微分 §7.3)、"替代解"(微分包含/Filippov §7.4、测度微分包含/Moreau §7.5)、"替代方程"(互补的非光滑视角 §7.6),桥接(§7.7)把主干接到接触力学全章。
核心收获可浓缩为三句话:
- 用集合换确定性:光滑世界每点一个导数(向量),非光滑世界每点一个导数集合(次微分)。Clarke 广义梯度、Filippov 凸化、法锥,都是这个思想的化身。
- 正则性逐级降低、对象逐级提升:微分方程(解 \(C^1\))→ 微分包含(解绝对连续)→ 测度微分包含(解 BV)。接触动力学处于最底层,加速度是测度——这是时步法用速度-冲量的根源。
- 同一个互补条件有三副面孔:组合(活跃集)、几何(法锥/VI)、解析(NCP 方程)。三者等价但导向不同算法,半光滑 Newton(解析面孔)绕过组合爆炸。
- 多接触/高对称构型的解可能不唯一:从 §7.4 多面交线的 Filippov 多值、§7.5 Delassus 病态、到 Newton's cradle 的碰撞分配歧义,是同一现象的不同侧面——刚体瞬时理想化在高对称下信息不足。唯一确定的是宏观可观测量(等效速度、质心轨迹),不唯一的是内部分配(凸系数、逐点冲量)。工程上靠额外物理(刚度差、时序、软接触)或整步隐式求解补全。
- "加厚不连续"和"碰撞恢复"都是有选择的建模决策:Filippov/Krasovskii/Utkin 是三种凸化、Newton/Poisson/Moreau 是三种碰撞律。Coulomb 摩擦恰好落在各自的"良性一致区",故实践少区分;但写论文/做非仿射控制时必须显式声明用哪个(R7 解概念精确性)。
符号表¶
本章新引入的数学符号及含义:
| 符号 | 含义 | 首次出现 |
|---|---|---|
| \(\phi(q)\) | 接触间隙函数(有符号距离) | §7.1 |
| \(\lambda_n,\lambda_t\) | 法向接触力、切向摩擦力 | §7.1 |
| \(\text{Sign}(s)\) | 集值符号函数(\(s=0\) 时取 \([-1,1]\)) | §7.1 |
| \(N_C(x)\) | 集合 \(C\) 在 \(x\) 的法锥 | §7.1 |
| \(\mathcal{K}_\mu\) | 摩擦锥 \(\{\|\lambda_t\|\le\mu\lambda_n\}\) | §7.1 |
| \(f^\circ(x;v)\) | Clarke 广义方向导数 | §7.2 |
| \(\partial_C f(x)\) 或 \(\partial f(x)\) | Clarke 广义梯度(次微分) | §7.2 |
| \(f'(x;v)\) | 经典(单侧)方向导数 | §7.2 |
| \(\Omega_f\) / \(D_f\) | \(f\) 的不可微点集 / 可微点集 | §7.2 |
| \(\text{conv}\,S\) | 集合 \(S\) 的凸包 | §7.2 |
| \(\hat\partial f(x)\) | Fréchet(regular)次微分 | §7.3 |
| \(\partial_L f(x)\) / \(\partial_M f\) | limiting(Mordukhovich)次微分 | §7.3 |
| \(\partial_B f(x)\) | Bouligand 子微分(可微点梯度极限) | §7.3 |
| $D^*S(\bar x | \bar y)$ | Mordukhovich 余导数 |
| \(\text{gph}\,S\) | 集值映射 \(S\) 的图 | §7.3 |
| \(\text{lip}\,S\) | Aubin 性质的 Lipschitz 模长 | §7.3 |
| \(\mathbb{B}\) | 单位球 | §7.3 |
| \(K[f](x)\) | Filippov 集值映射(凸化算子) | §7.4 |
| \(K_{\text{Kras}}[f]\) | Krasovskii 正则化(不排除零测集的凸包) | §7.4 |
| \(\Sigma\) | 切换面 \(\{\sigma(x)=0\}\) | §7.4 |
| \(\alpha^\star\) | Filippov 凸系数(滑模等效动力学) | §7.4 |
| \(u_{eq}\) | Utkin 等效控制 | §7.4 |
| \(\dot{\bar V}(x)\) | 非光滑 Lyapunov 函数的集值导数 | §7.4 |
| \(dv\) | 速度的微分测度(含 Dirac) | §7.5 |
| \(\delta_{t^\star}\) | \(t^\star\) 处的 Dirac 测度 | §7.5 |
| \(d\Lambda\) / \(P_{k+1}\) | 接触冲量测度 / 一步的接触冲量 | §7.5 |
| \(e\) | 碰撞恢复系数(restitution) | §7.5 |
| \(C(t)\) | 移动的凸约束集(扫动过程) | §7.5 |
| \(W=J_nM^{-1}J_n^\top\) | Delassus 算子(接触空间有效逆质量) | §7.5 |
| \(P_n,P_t\) | 法向、切向接触冲量 | §7.5 |
| \(P_c,P_r\) | Poisson 碰撞律的压缩、恢复冲量 | §7.5 |
| \(\kappa(W)\) | Delassus 算子条件数(碰撞 LCP 病态度) | §7.5 |
| \(\text{VI}(C,F)\) | 变分不等式 | §7.6 |
| \(\psi_{FB}(a,b)\) | Fischer–Burmeister NCP 函数 | §7.6 |
| \(\psi_{\min}(a,b)\) | 最小函数 NCP 函数 | §7.6 |
| \(\Phi(z)\) | NCP 函数构造的非光滑方程组 | §7.6 |
| \(\hat d\) | IPC barrier 的支撑距离参数 | §7.6 |
术语中英对照表¶
本章术语首次出现时已标注中英对照(R7),这里汇总成查阅表。阅读英文文献(Clarke、Rockafellar–Wets、Filippov、Brogliato、Facchinei–Pang)时按此对照,避免"同一概念在中英文里以为是两个东西"的常见混淆。
| 中文术语 | 英文术语 | 一句话辨析 | 对应节 |
|---|---|---|---|
| 非光滑分析 | nonsmooth analysis | 研究 Lipschitz 但不可微对象的微分学 | §7.1 |
| 广义梯度 / 次微分 | generalized gradient / subdifferential | Clarke 语境下二者同义,均指导数集合 | §7.2 |
| 广义方向导数 | generalized directional derivative | \(f^\circ(x;v)\),基点游走的 limsup,自动凸 | §7.2 |
| 凸包 | convex hull | \(\text{conv}\),所有凸组合构成的最小凸集 | §7.2 |
| Fréchet(正则)次微分 | Fréchet (regular) subdifferential | \(\hat\partial\),层级最小、最"紧" | §7.3 |
| limiting 次微分 | limiting (Mordukhovich) subdifferential | \(\partial_L\),一般非凸,运算法则精确 | §7.3 |
| Bouligand 子微分 | Bouligand subdifferential / B-subdifferential | \(\partial_B\),可微点梯度极限(不取凸包) | §7.3 |
| 余导数 | coderivative | \(D^*S\),集值映射的"对偶导数" | §7.3 |
| Aubin 性质 / 类 Lipschitz | Aubin property / Lipschitz-like | 集值映射的局部 Lipschitz 推广 | §7.3 |
| 强正则性 | strong regularity | Robinson 意义,线性化逆单值 Lipschitz | §7.3 |
| 半光滑 | semismooth | 方向导数存在且 Jacobian 极限相容 | §7.6 |
| 微分包含 | differential inclusion (DI) | \(\dot x\in F(x)\),比微分方程更基本 | §7.4 |
| Filippov 解 | Filippov solution | 凸化后微分包含的绝对连续解 | §7.4 |
| 滑模 | sliding mode | 轨迹被锁在切换面上滑行 | §7.4 |
| 等效控制 / 等效动力学 | equivalent control / dynamics | 滑模上的有效(约化)动力学 | §7.4 |
| 横穿 | crossing | 轨迹穿过切换面而不滑模 | §7.4 |
| 测度微分包含 | measure differential inclusion (MDI) | \(dv\in\ldots\),速度可跳变(BV) | §7.5 |
| 有界变差 | bounded variation (BV) | 总变差有限,至多可数跳点 | §7.5 |
| 微分测度 | differential measure | BV 函数诱导的测度(含 Dirac) | §7.5 |
| 扫动过程 | sweeping process | 点被移动凸集"扫"着走 | §7.5 |
| 恢复系数 | coefficient of restitution | \(e\in[0,1]\),碰撞弹性程度 | §7.5 |
| 冲量 | impulse | 力测度在一步上的积分(有限可算) | §7.5 |
| Delassus 算子 | Delassus operator | \(JM^{-1}J^\top\),接触空间有效逆质量 | §7.5 |
| 互补问题 | complementarity problem (LCP/NCP) | \(0\le a\perp b\ge0\) 的求解问题 | §7.6 |
| 变分不等式 | variational inequality (VI) | \(\langle F(x^\star),x-x^\star\rangle\ge0\) | §7.6 |
| NCP 函数 | NCP function | 零点刻画互补的函数(如 FB) | §7.6 |
| 内罚 / 障碍函数 | barrier function | IPC 用于"去互补"的内点罚 | §7.6 |
| 近似正则集 | prox-regular set | 投影单值、\(d_C\) 局部 \(C^1\) 的集合 | §7.8.2 |
| Moreau–Yosida 正则化 | Moreau–Yosida regularization | 非光滑函数的光滑下逼近 | §7.8.3 |
| 近端算子 | proximal operator | \(\text{prox}_{\lambda f}\),投影的推广 | §7.8.3 |
| 软阈值算子 | soft-thresholding operator | $ | x |
| Huber 函数 | Huber function | $ | x |
| 弱凸 | weakly convex | 加抛物线后凸;曲率有下界 \(-\rho\) | §7.8.4 |
| 随机平滑 | randomized smoothing | 高斯卷积光滑化,梯度可零阶采样估计 | §7.8.4 |
| Painlevé 佯谬 | Painlevé paradox | 高摩擦构型下经典刚体方程无解 | §7.5 |
| 横穿 vs 滑模 | crossing vs sliding | 切换面行为二分(同向穿过 / 被锁滑行) | §7.4 |
使用提示:上表的"一句话辨析"只为唤起记忆,不能替代正文定义——尤其 limiting 次微分(非凸)与 Clarke(凸包)、Filippov(排除零测集)与 Krasovskii(不排除)这几对易混术语,务必回正文核对精确定义后再用于论文写作。读英文文献时,注意同一中文译名在不同学派文献里可能对应不同英文(如"次微分"在凸分析、Clarke、Mordukhovich 三套体系含义不同),这是 R7 术语一致性在跨语言、跨学派阅读中最易踩的坑。
定理速查表¶
本章核心定理/公式及一句话说明(编号 T1–T12 与原文档核心定理清单对齐):
| 定理/公式 | 一句话说明 | 对应节 |
|---|---|---|
| T1 Rademacher 定理 | 局部 Lipschitz 函数几乎处处可微(Gradient Formula 的立足石) | §7.2 |
| T2 Clarke Gradient Formula | \(\partial_C f(x)=\text{conv}\{\lim\nabla f(x_k)\}\),计算广义梯度的实用公式 | §7.2 |
| T3 Clarke Chain Rule II | 复合函数广义梯度的(上包含式)链式法则,\(g\) 正则时取等 | §7.2 |
| T4 Lebourg 均值定理 | \(f(y)-f(x)=\langle\zeta,y-x\rangle\),\(\zeta\in\partial_C f(u)\),Lipschitz 版中值定理 | §7.2 |
| 定义 7.2.1 广义方向导数 | \(f^\circ(x;v)=\limsup\frac{f(y+tv)-f(y)}{t}\),自动凸(基点游走的功劳) | §7.2 |
| T8 Clarke = conv(Mordukhovich) | \(\partial_C f=\text{conv}\,\partial_L f\),Clarke 是 limiting 的凸化 | §7.3 |
| 定理 7.3.5 次微分层级 | \(\hat\partial\subseteq\partial_L\subseteq\partial_C\),精度递减 | §7.3 |
| T7 Mordukhovich 判据 | \(S\) Aubin(局部 Lipschitz)\(\iff D^*S(0)=\{0\}\),解映射稳定性的充要刻画 | §7.3 |
| T9 Robinson 强正则性 | 广义方程强正则 \(\iff\) 线性化逆单值 Lipschitz,KKT 对参数 \(C^1\)-样依赖 | §7.3 |
| 定义 7.4.1 Filippov 凸化 | \(K[f]\) 把不连续右端加厚为上半连续凸值映射 | §7.4 |
| Filippov 凸系数 | \(\alpha^\star=\frac{\langle\nabla\sigma,f_1\rangle}{\langle\nabla\sigma,f_1-f_2\rangle}\),滑模等效动力学 | §7.4 |
| 定理 7.4.4 非光滑 Lyapunov | 集值导数 \(\max\dot{\bar V}<0\Rightarrow\) 渐近稳定(滑模控制根基) | §7.4 |
| Filippov ⊇ 关系 | \(K_{\text{Fil}}\subseteq K_{\text{Kras}}\);控制非仿射时与 Utkin 分叉(Aizerman–Pyatnitskii) | §7.4 |
| 定义 7.5.2 测度微分包含 | \(M\,dv+(\ldots)dt=J^\top d\Lambda\),接触动力学的测度形式 | §7.5 |
| 扫动过程 | \(-dv\in N_{C(t)}(v)\),点被移动凸集"扫"着走 | §7.5 |
| Delassus 碰撞 LCP | \(0\le P_n\perp WP_n+(1+e)J_nv^-\ge0\),\(W\) 对称 PSD(无摩擦良态) | §7.5 |
| 碰撞能量耗散 | \(\Delta T=-\tfrac12(1-e^2)\frac{(v_n^-)^2}{J_nM^{-1}J_n^\top}\le0\) | §7.5 |
| 命题 7.6.1 互补=法锥包含 | \(0\le a\perp b\ge0\iff -b\in N_{\mathbb{R}_+}(a)\iff a=\text{proj}_{\mathbb{R}_+}(a-b)\) | §7.6 |
| FB 函数 | \(\psi_{FB}=\sqrt{a^2+b^2}-(a+b)\),零点刻画互补、强半光滑 | §7.6 |
| T5 Qi–Sun 半光滑 Newton | 半光滑 + \(\partial_B\) 非奇异 ⇒ 超线性;强半光滑 ⇒ 二次收敛 | §7.6 |
| T6 Sun–Sun FB 强半光滑 | FB 处处强半光滑(含 SOC/SDC 锥推广),保证 Newton 二次收敛 | §7.6 |
知识点总表¶
| 编号 | 知识点 | 核心要点 | 对应节 | 难度 |
|---|---|---|---|---|
| 7.1 | 非光滑的三大来源 | 单边约束/摩擦(层次一,集值)+ 碰撞(层次二,测度);非光滑守恒 | §7.1 | ⭐⭐ |
| 7.2 | Clarke 广义梯度 | \(f^\circ\) 自动凸→\(\partial_C\) 凸紧非空;Gradient Formula;摩擦力=耗散势负梯度 | §7.2 | ⭐⭐⭐ |
| 7.3 | 四种次微分层级 | \(\hat\partial\subseteq\partial_L\subseteq\partial_C\);Clarke=conv(Mord);余导数+Mord 判据 | §7.3 | ⭐⭐⭐⭐ |
| 7.4 | 微分包含与 Filippov 解 | 不连续右端凸化为集值;滑模=stick;Filippov 与 Clarke 对偶 | §7.4 | ⭐⭐⭐ |
| 7.5 | 测度微分包含 | 速度 BV、加速度测度;Moreau 扫动;时步法用冲量的根源 | §7.5 | ⭐⭐⭐⭐ |
| 7.6 | 互补的非光滑视角 | 三副面孔(组合/几何/解析);FB+半光滑 Newton 绕过组合爆炸 | §7.6 | ⭐⭐⭐ |
| 7.7 | 桥接全章 | 每个工具补证专题 1–6 的一个技术;知识树主干接果实 | §7.7 | ⭐⭐ |
| 7.8 | 现代非光滑前沿 | 五锥层级、prox-regular、Moreau–Yosida、随机非光滑、去互补范式 | §7.8 | ⭐⭐⭐⭐ |
§7.8 进阶专题:现代非光滑分析与接触前沿(档位 4 选学)⭐⭐⭐⭐¶
本节是档位 4 的延伸,把本章的经典理论推进到 2020–2026 年的研究前沿。第一遍学习可跳过;有志于 T-RO / TOG / Math Program 论文的读者建议精读。这里只勾勒思想脉络与文献入口,不展开全部证明。
7.8.1 切锥、法锥与正规锥的完整层级¶
§7.3 用到 limiting 法锥。完整的变分分析有**五个锥**,它们的层级是 §7.3 次微分层级的"对偶版本"(次微分是锥在 epigraph 上的投影)。设 \(C\subseteq\mathbb{R}^n\) 闭,\(\bar x\in C\):
- Bouligand(contingent)切锥 \(T_C(\bar x)\):所有"切方向"\(v=\lim\frac{x_k-\bar x}{t_k}\)(\(x_k\in C\to\bar x\),\(t_k\downarrow0\))。一般非凸。
- Clarke 切锥 \(T^{Cl}_C(\bar x)\):永远凸,\(T^{Cl}\subseteq T\)。
- Fréchet(regular)法锥 \(\hat N_C(\bar x)\)、Mordukhovich 法锥 \(N_C(\bar x)\)、Clarke 法锥 \(N^{Cl}_C=\text{conv}\,N_C\)。层级 \(\hat N\subseteq N\subseteq N^{Cl}\)。
核心结论:在 Clarke 正则集(如 \(C^1\) 流形、凸集)上,所有锥取等。在非正则点(如非凸集的角点)严格包含。一个干净反例:\(C=\{(x,y):y=|x|\}\)(V 形),在原点 \(T_C=C\)(V 形非凸),而 \(T^{Cl}_C=\{0\}\)(只含原点)。这解释了为什么**多面体的角点、棱边**处接触约束的处理特别棘手——切锥非凸,投影不唯一。
运行示例:凸角 vs 凹角的五锥对比。 接触约束集的"角"分两种,数值性质截然不同(认知工具 B)。
- 凸角(外角,如方块的角):可行域 \(C=\{(x,y):x\ge0,\ y\ge0\}\)(第一象限),考察原点。切锥 \(T_C(0)=C\)(第一象限,凸!);Fréchet 法锥 \(\hat N_C(0)=\{(a,b):a\le0,b\le0\}\)(第三象限,凸);三个法锥取等 \(\hat N=N=N^{Cl}\)。该点 Clarke 正则,投影 \(P_C\) 唯一(投影到第一象限就是把负分量截零),penalty 梯度良定义。这是大多数凸接触约束的情形——好处理。
- 凹角(内角/reentrant,如 L 形工件的内凹角):可行域 \(C=\mathbb{R}^2\setminus\{x>0,y>0\}\)(去掉第一象限开集,即"L 形"区域),考察原点。切锥 \(T_C(0)=\mathbb{R}^2\setminus\{x>0,y>0\}\)(非凸!是个 270° 的扇形);Fréchet 法锥 \(\hat N_C(0)=\{0\}\)(退化,只有零向量是正则法向);而 Mordukhovich 法锥 \(N_C(0)\) 含两条坐标半轴方向(非凸)。该点非正则,\(\hat N\subsetneq N\),投影 \(P_C\) 多值——原点附近沿对角线 \((t,t)\)(\(t>0\))的点到 \(C\) 的投影既可投到 \(x\) 轴也可投到 \(y\) 轴(等距),不唯一。距离函数 \(d_C\) 在此非 \(C^1\),penalty 梯度未定义。
本质洞察:凸角与凹角在五锥层级上的差异(凸角处切锥凸、法锥取等、正则;凹角处切锥非凸、\(\hat N\) 退化、不正则)精确预言了工程数值行为:凸角接触稳定(投影唯一、penalty 光滑),凹角接触病态(投影多值、Newton 在该点发散)。这就是为什么 CAD 模型里的内凹角(机械臂抓 L 形零件、足踩台阶内棱)是接触仿真的老大难——不是算法 bug,而是**约束集在该点的变分几何本质非正则**。对策(§7.8.2):圆角化(把凹角磨成 prox-regular 的光滑过渡)或换 IPC barrier(用距离的光滑函数避开投影多值)。五锥层级不是抽象游戏,它是诊断"这个接触构型为何难解"的精密仪器。
7.8.2 prox-regular 集与投影的唯一性¶
接触约束集 \(K=\{q:\phi(q)\ge0\}\) 在"角点/边缘"是否光滑,直接决定 Signorini 投影解的唯一性。关键概念是 prox-regularity(Poliquin–Rockafellar–Thibault 2000,Trans. AMS 352:5231–5249):
定义:\(C\) 在 \(\bar x\) 处 prox-regular,若存在 \(r>0\) 使 \(\langle v,x'-x\rangle\le\frac{r}{2}\|x'-x\|^2\) 对所有 \(v\in N_C(x)\)、\(\|v\|\le\varepsilon\) 成立。等价刻画(T10):\(C\) prox-regular \(\iff\) 距离函数 \(d_C\) 在邻域 \(C^1\)、且投影 \(P_C\) 单值局部 Lipschitz。
接触应用:凸约束集处处 prox-regular,投影唯一(penalty 梯度 \(\|q-P_C(q)\|^2\) 良定义);非凸约束集(如 "L 形"工件)的内凹角点不 prox-regular,\(P_C\) 多值、\(d_C\) 非 \(C^1\),penalty 梯度未定义,Newton 发散。工程对策:局部几何 smoothing(圆角化)或换用 IPC barrier。这是原文档陷阱 3 的理论根。
运行示例:prox-regular 半径 = 曲率半径。 prox-regularity 的常数 \(r\) 有干净的几何意义——它就是"能从外面无障碍滚动的最大球半径"(认知工具 A)。看圆盘外部 \(C=\{x\in\mathbb{R}^2:\|x\|\ge R\}\)(半径 \(R\) 的孔,物体在孔外,对应"绕过圆柱障碍"的可行域):
- 凸侧(孔内边界,物体在圆盘 \(\|x\|\le R\) 内):边界向内弯,处处 prox-regular,\(r=\infty\)(投影永远唯一,圆是凸的)。
- 凹侧(孔外边界,物体在 \(\|x\|\ge R\) 外):边界向外弯(从物体看是凹的)。投影到圆周:\(P_C(x)=R\,x/\|x\|\) 对 \(\|x\|<R\) 的内部点——但**圆心 \(x=0\) 处投影多值**(到整个圆周等距)!prox-regular 半径 \(r=R\):只有当探测点离边界小于 \(R\)(即 \(\|x\|>0\) 且在曲率半径内)时投影才唯一,超过则多值。曲率越大(\(R\) 越小),prox-regular 半径越小,越容易投影失效。
这把抽象的 prox-regularity 常数 \(r\) 锚定到可测量的几何量(曲率半径):接触约束面的局部曲率半径就是它的 prox-regular 半径,决定了 penalty/投影方法在多远范围内可靠。尖锐特征(小曲率半径、棱、角)prox-regular 半径小甚至为零,这是它们数值棘手的几何根源——与 §7.8.1 凹角分析、§7.1 正则化弊病完全一致,是同一现象的微分几何刻画。
7.8.3 Moreau–Yosida 正则化与近端算子¶
连接非光滑与光滑的桥梁是 Moreau–Yosida 正则化:对 Lipschitz/凸函数 \(f\),
\(f_\lambda\) 是 \(f\) 的光滑下逼近(\(C^1\),梯度 \(\nabla f_\lambda=\frac1\lambda(x-\text{prox}_{\lambda f}(x))\)),\(\lambda\to0\) 时 \(f_\lambda\to f\)。在 prox-regular 集上 \(\text{prox}=\text{proj}\)。这套理论(Bauschke–Combettes 2017 的算子主线)是 ADMM、forward-backward splitting、以及 IPC 求解的算法基础——它让非光滑问题可以用"光滑化 + 近端步"迭代求解,且收敛可证。近端算子是 §7.6 投影方法的推广(投影是示性函数的 prox)。
运行示例:\(f(x)=|x|\) 的 Moreau–Yosida 正则化就是 Huber 函数。 这个例子把抽象的 prox 落到一个你或许已经认识的对象,并直接连回 §7.1 的摩擦正则化(认知工具 A + B)。逐步算:
- Step 1:算 prox。 \(\text{prox}_{\lambda|\cdot|}(x)=\arg\min_y\{|y|+\frac1{2\lambda}(x-y)^2\}\)。对 \(y\) 求(次)导并令零:\(0\in\text{Sign}(y)+\frac1\lambda(y-x)\),解出**软阈值算子(soft-thresholding)** \(\text{prox}_{\lambda|\cdot|}(x)=\text{sign}(x)\max(|x|-\lambda,0)\)。
- Step 2:代回算 \(f_\lambda\)。 分两段:\(|x|\le\lambda\) 时 prox \(=0\),\(f_\lambda(x)=0+\frac1{2\lambda}x^2=\frac{x^2}{2\lambda}\)(抛物线);\(|x|>\lambda\) 时 prox \(=x-\lambda\,\text{sign}(x)\),代入得 \(f_\lambda(x)=|x|-\frac\lambda2\)(平移的绝对值)。合起来:
这**正是 Huber 函数**(统计鲁棒回归、视觉里程计抗外点常用)!它在 \(|x|\le\lambda\) 内是光滑抛物线、外部是线性,\(C^1\) 拼接。
- Step 3:算梯度,连回摩擦。 \(\nabla f_\lambda(x)=\frac1\lambda(x-\text{prox})=\begin{cases}x/\lambda,&|x|\le\lambda\\ \text{sign}(x),&|x|>\lambda\end{cases}\),即**饱和函数(saturation)**——在 \([-\lambda,\lambda]\) 内线性、外部饱和到 \(\pm1\)。
本质洞察:\(|x|\) 的 Moreau–Yosida 梯度(饱和函数)与 §7.1 用 \(\tanh(v/\varepsilon)\) 正则化摩擦的形状几乎一样!这揭示了一个深刻统一:§7.1 那个"看似临时的工程 hack"(用饱和/tanh 光滑化 \(\text{Sign}\)),其实就是对摩擦耗散势做 Moreau–Yosida 正则化的梯度——它有严格的变分来源(prox),不是随意捏造。\(\lambda\)(或 \(\varepsilon\))就是正则化参数:\(\lambda\to0\) 恢复真实非光滑摩擦(饱和斜率 \(\to\infty\),回到 §7.1 的刚性爆炸),\(\lambda\) 大则光滑但失真(蠕动)。这把 §7.1(朴素正则化)、§7.2(Clarke 梯度)、§7.6(prox/投影)、§7.8.3(Moreau–Yosida)在一个 \(|x|\) 的例子上全部缝合——同一个非光滑对象,从四个角度看是同一件事。这正是本章"知识树"枝叶相连的最佳缩影:你以为学了四个工具,其实是一个思想的四个侧面。
7.8.4 随机非光滑优化与 contact-rich policy gradient¶
当接触进入学习(RL、可微仿真),出现**随机非光滑优化(SNSO)**:目标含接触(非光滑、可能 weakly-convex),且用随机次梯度(采样估计)。Davis–Drusvyatskiy 2019(Found. Comput. Math.)证明了 weakly-convex 随机次梯度法的收敛。这为 contact-rich policy gradient(在接触环境学策略)提供理论保证。它与 Pang–Tedrake 的 CQDC randomized smoothing(专题 6 进阶)统一了"随机平滑"与"解析平滑"——前者用采样估计广义梯度,后者用 barrier/正则化解析地光滑接触。这是 §7.4 Filippov 凸化、§7.6 barrier 在"学习"维度的延伸。
弱凸(weakly-convex)是什么、为什么接触目标是弱凸。 函数 \(f\) 称 \(\rho\)-弱凸,若 \(f(x)+\frac\rho2\|x\|^2\) 凸(即"加一个抛物线就凸")。它比凸宽(允许有限的非凸"凹陷"),又比一般非凸窄(曲率有下界 \(-\rho\))。接触相关目标(如"末端到目标的距离,经过一次接触")通常恰好弱凸——接触引入的非光滑/非凸是"有界的"(一次接触切换贡献有限曲率),不是任意病态。这就是为什么 Davis–Drusvyatskiy 的弱凸理论恰好适配接触学习:它捕捉了"接触让问题非凸但不至于无法优化"这一物理直觉。
随机平滑(randomized smoothing)的机制。 对非光滑 \(f\),定义平滑版 \(f_\sigma(x)=\mathbb{E}_{u\sim\mathcal N(0,I)}[f(x+\sigma u)]\)(对随机扰动取期望)。关键性质:\(f_\sigma\) 光滑(高斯卷积把尖点抹圆),且其梯度有无偏采样估计 \(\nabla f_\sigma(x)=\mathbb{E}[\frac{u}{\sigma}f(x+\sigma u)]\)(零阶梯度估计,无需 \(f\) 可微)。这正是 Pang–Tedrake CQDC 在接触 MPC 里用"采样多个接触模式取平均"来获得可用梯度的理论基础——采样平滑等价于对接触非光滑做高斯卷积。
本质洞察:随机平滑(§7.8.4)与 Moreau–Yosida 解析平滑(§7.8.3)是"光滑化非光滑接触"的两条平行路线——前者用高斯卷积(采样期望),后者用 inf-卷积(prox)。二者都把尖点抹圆、都引入一个平滑参数(\(\sigma\) vs \(\lambda\))、都在参数 \(\to0\) 时恢复真非光滑。它们的工程分工:随机平滑不需要梯度信息(零阶,适合黑盒仿真器 + RL),Moreau–Yosida 需要 prox/投影(一阶,适合白盒可微仿真器)。这再次印证本章主线——"非光滑守恒",你总要在某处付出代价:要么正面求解(精确、慢),要么平滑(快、近似),而平滑又分采样(黑盒)与解析(白盒)两支。理解这个分类,你就能为任何 contact-rich 学习任务选对平滑策略。
7.8.5 去互补范式与 GPU 可微仿真的数学断层¶
2020 年后接触仿真的范式转变(原文档前沿地图主线)可用本章语言精确描述:
- 从互补到 barrier:经典路线写 LCP/NCP(§7.6 组合/解析面孔),组合爆炸 + 摩擦锥顶点 Jacobian 奇异(半光滑 Newton 失效)。IPC(Li et al. 2020,TOG 39(4) Art.49)改用 barrier \(b(d)=-(d-\hat d)^2\log(d/\hat d)\) 的内罚(§7.6 去互补),\(d\to0^+\) 时 \(b\to\infty\) 保证无穿透(T11),Hessian SPD 保证 Newton 全局收敛(T12)。这是 §7.6 对比表第四行的展开。
- 从 CPU 硬接触到 GPU 软接触 + AD:MJX(JAX 重写 MuJoCo)、MJWarp(NVIDIA Warp kernel)、Newton(GPU 原生可微)、Genesis(Taichi 多物理)代表 GPU 大规模可微仿真。**数学断层**在于:传统 Siconos 的 LCP-硬接触是 §7.5 的精确 MDI 离散(精度优先);GPU 软接触是正则化/barrier(§7.1 光滑化,可微优先)。二者在"精度-速度-可微性"上 trade-off,本章 §7.1 的"非光滑守恒"恰好解释了 GPU 软接触为何快(光滑化避开非光滑求解)却失真(引入近似)。
- 从对称化绕开非对称摩擦:现代凸接触模型(Drake 的 SAP、Anitescu 的凸松弛)放弃精确 Coulomb,改用**凸近似**——本质是用一个对称 PSD 的代理矩阵替换 §7.6"摩擦非对称化"产生的非 P-matrix 矩阵。代价是摩擦略微"软化"(slip 时有微小法向耦合误差),换来的是 §7.5 Delassus 良态性 + 全局收敛 + 可微。这条路线与 barrier、随机平滑并列,是"恢复对称/凸性以绕开摩擦病态"的第三种工程哲学。
本质洞察:接触仿真的"范式之争"(互补 vs barrier、硬接触 vs 软接触、CPU 精确 vs GPU 可微)本质上是 §7.1"非光滑守恒律"在工程上的不同选择——你要么正面求解非光滑(互补/MDI,精确但慢且难微分),要么光滑化它(barrier/正则化,快且可微但有近似)。没有免费的午餐:非光滑性不会消失,只会在"精度"或"速度/可微性"之间转移。理解这一点,你就能在面对任何新仿真器时,立刻判断它在这个权衡谱上的位置,以及它适合什么任务。
练习¶
练习 7.8.1(开放思考题) 用 §7.8.1 的五锥层级解释:为什么一个方块的"面接触"(平面对平面)比"棱接触"(棱对平面)、"点接触"(角对平面)在数值上更稳定?(提示:考虑接触约束集在这三种情形的正则性——面接触约束集光滑,棱/角接触约束集在该处的切锥/法锥是否非凸?投影是否唯一?)
练习 7.8.2(研究级综合题) 选一个你熟悉的接触仿真器(MuJoCo / Drake / IPC / Genesis 之一),用本章语言回答:(a) 它正面求解非光滑还是光滑化?(b) 若光滑化,用的是 penalty、正则化摩擦还是 barrier?(c) 它的接触求解对应 §7.6 哪个视角?(d) 它可微吗?若可微,梯度是 §7.2/§7.3 哪种广义导数?(e) 在"非光滑守恒"权衡谱上,它牺牲了精度还是速度/可微性?
练习 7.8.3(计算题,在草稿纸上完成) 仿照"\(|x|\) 的 Moreau–Yosida = Huber"的推导,计算二维欧氏范数 \(f(v_t)=\|v_t\|\)(对应二维摩擦耗散势)的 Moreau–Yosida 正则化 \(f_\lambda\) 与 prox。(a) 写出 \(\text{prox}_{\lambda\|\cdot\|}(v_t)\)(提示:是向量软阈值,把模长收缩 \(\lambda\)、方向不变);(b) 写出 \(f_\lambda(v_t)\) 的分段表达(球内抛物面、球外锥面);(c) 算 \(\nabla f_\lambda(v_t)\),验证它在 \(\|v_t\|\le\lambda\) 内线性、外部饱和到单位球面——这正是二维"正则化摩擦力"的形状,对应 §7.2 例 3 摩擦圆盘的光滑版。
练习 7.8.4(综合辨析题,开放性) §7.8.3 指出"§7.1 的 tanh 正则化摩擦 = 摩擦耗散势的 Moreau–Yosida 梯度"。请据此回答:(a) 既然正则化有严格变分来源(prox),为什么本章 §7.1 仍把它列为"假装光滑的失败"?(提示:变分来源不等于物理正确——\(\lambda>0\) 时静摩擦变蠕动,定性行为错);(b) Moreau–Yosida 正则化与 IPC barrier(§7.6 去互补)都是"光滑化非光滑",二者在"是否保持可行性(无穿透)"上有何本质区别?(提示:barrier 是内罚 \(d\to0\) 时 \(\to\infty\) 严格不可穿透;Moreau–Yosida/penalty 是外罚,允许有限穿透);(c) 为什么现代可微仿真(§7.8.5)更偏好 barrier 而非朴素 Moreau–Yosida penalty?
练习 7.8.5(计算题,在草稿纸上完成) 仿照 §7.8.1"凸角 vs 凹角的五锥对比",考虑三维情形:(a) 立方体的一个**外顶点**(三面相交的凸角),求其切锥与法锥,验证 Clarke 正则、投影唯一;(b) 一个 L 形台阶的**内凹棱**(reentrant edge),定性说明其切锥为何非凸、Fréchet 法锥为何退化、投影为何多值;(c) 结合 §7.8.2 prox-regular 半径 = 曲率半径,解释为什么把内凹棱"倒圆角"(给一个有限曲率半径 \(R\))能恢复投影唯一性,以及 \(R\) 取多大才能让 penalty 方法在你的接触检测精度下可靠。这道题把五锥层级、prox-regularity、工程圆角化三者串成一条诊断-对策链。
累积项目:本章新增模块¶
数学方向累积项目:「非光滑接触求解器最小实现」。本项目贯穿接触力学全章,每学完一个专题给求解器加一个模块。代码保存在独立目录
contact_solver_mini/。
本章(专题 7)新增模块:nonsmooth_toolkit.py —— 非光滑分析的可视化与数值验证
理论教学中代码仅用于**验证推导结论**(占比 < 15%),不承担讲解功能。本章的累积模块包含三个验证脚本,每个对应本章一个核心结论:
-
verify_clarke_gradient.py:数值验证 Clarke Gradient Formula。对 \(f(x)=|x|\)、\(f(v_t)=\mu\lambda_n\|v_t\|\)(二维),在尖点附近密集采样可微点的梯度,画出梯度的极限点集,可视化"取凸包得到 \([-\mu\lambda_n,\mu\lambda_n]\) 圆盘"。验证目标:§7.2 例 2、例 3 的广义梯度计算。 -
verify_filippov_stickslip.py:数值验证摩擦滑块的 Filippov 滑模。实现微分包含 \(m\dot v\in F-\mu mg\,\text{Sign}(v)\) 的滑模感知积分器(在 \(v=0\) 处取等效速度 \(\dot v=0\) 而非两侧硬切换),对比朴素积分器(在 \(v=0\) 抖振)。验证目标:§7.4 stick-slip = 滑模,以及"抖振是数值伪影、滑模是物理正确"。 -
verify_semismooth_newton.py:实现 FB 函数的半光滑 Newton 解一个 \(n=50\) 的 LCP,实测收敛阶(画 \(\log\|\Phi(z_k)\|\) 对迭代次数,验证二次收敛的斜率)。对比 P-matrix(收敛)与非 P-matrix(可能停滞)。验证目标:§7.6 T5/T6 的二次收敛,以及陷阱"非 P-matrix 下失效"。 -
verify_delassus_impact.py:实现 §7.5"两点同时碰撞"手算例子的数值版。构造均质杆的 \(M=\text{diag}(m,I)\)、法向雅可比 \(J_n\),组装 Delassus 算子 \(W=J_nM^{-1}J_n^\top\),解碰撞 LCP 求两端冲量;扫描质心偏置与质量比,画 \(W\) 的条件数 \(\kappa(W)\) 随构型的变化,并验证碰后能量耗散 \(\Delta T\le0\)。验证目标:§7.5 Delassus 算子的对称 PSD、条件数与病态、碰撞能量耗散公式。 -
verify_moreau_yosida_huber.py:数值验证"\(|x|\) 的 Moreau–Yosida 正则化 = Huber 函数"。对一系列 \(\lambda\) 画出 \(f_\lambda(x)\)(应是 Huber 形)与 \(\nabla f_\lambda\)(应是饱和函数),并叠加 \(\tanh(x/\varepsilon)\) 对比,直观看到"§7.1 的 tanh 正则化摩擦 ≈ 摩擦势的 Moreau–Yosida 梯度"。\(\lambda\to0\) 时观察饱和斜率发散(刚性爆炸的数值再现)。验证目标:§7.8.3 Moreau–Yosida = Huber、正则化的变分来源、\(\lambda\to0\) 的刚性。
与前序模块的衔接:专题 1 的模块实现了 LCP 的活跃集枚举(组合面孔);专题 2 实现了摩擦锥投影(几何面孔);本章的 verify_semismooth_newton.py 实现解析面孔(半光滑 Newton),三者共同构成 §7.6 对比表的"三视角求解器对照",让你在同一个 LCP 上亲手比较三种算法的复杂度与收敛性。新增的 verify_delassus_impact.py 与 verify_moreau_yosida_huber.py 则分别打通"碰撞=Delassus LCP"(§7.5)与"正则化=Moreau–Yosida"(§7.8.3)两条理论线,让本章的五个核心结论(Clarke 梯度、Filippov 滑模、半光滑 Newton、Delassus 碰撞、Moreau–Yosida 平滑)都有可运行的数值验证。项目进度:完成本模块后,求解器具备了"三视角"求解能力 + 碰撞/平滑验证,下一步(若学专题 3)将加入时步法主循环,把单步求解器组装成完整仿真器。
本质洞察(累积项目的设计哲学):理论教学的累积项目刻意保持代码占比 < 15%——这五个脚本不承担"讲解"功能(讲解全在正文的推导里),它们只做一件事:把纸上的定理变成屏幕上可验证的数值事实。当你亲眼看到 Newton 迭代误差逐步平方(二次收敛)、Delassus 矩阵随构型变病态(条件数飙升)、Moreau–Yosida 极限恢复尖点(饱和斜率发散),抽象定理就从"相信"变成"看见"。这正是理论教学中代码的正确定位——验证而非讲解,让推导落地为可触摸的现象,与编程教学中"代码即主角"形成鲜明对比(R8 五步展开的理论侧)。
延伸阅读¶
本章是接触力学的理论天花板,延伸阅读按"教材→关键论文→中文资源→开源代码→博客"分类,并标注难度(★ 越多越难)与定位。
核心教材¶
| 资源 | 年份 | 难度 | 定位与真实评价 |
|---|---|---|---|
| Clarke Optimization and Nonsmooth Analysis(Wiley → SIAM Classics Vol.5) | 1983/1990 | ★★★★☆ | 非光滑分析开山教材;Ch.2(Generalized Gradients)是所有现代书的共同起点,必精读 §2.1–2.5;本章 §7.2 即以此为蓝本。中文社区最常误用的就是把这里的 generalized gradient 当成唯一定义(本章 §7.3 纠正) |
| Rockafellar & Wets Variational Analysis(Springer Grundlehren 317) | 1998 | ★★★★★ | 变分分析"圣经",近 1000 页百科全书;不是用来线性读的,按"Ch.6 锥→Ch.8 subgradient→Ch.9 Aubin+Mordukhovich→Ch.10 calculus"路径选读;本章 §7.3、§7.5 的 limiting 次微分、余导数、判据 T7/T8 均出自此。作者 PDF 合法开放 |
| Mordukhovich Variational Analysis and Generalized Differentiation I+II(Grundlehren 330/331) | 2006 | ★★★★★ | Mordukhovich 学派全集;比 R-W 更 Banach 抽象;只有写论文需引 coderivative 的人才需要 |
| Filippov Differential Equations with Discontinuous Righthand Sides(Kluwer) | 1988 | ★★★★☆ | 滑模与微分包含的根(本章 §7.4);俄罗斯学派风格、字密;中文无译本但影响所有控制工程师 |
| Brogliato Nonsmooth Mechanics: Models, Dynamics and Control(Springer,多版) | 1999/2016 | ★★★★☆ | 非光滑力学的标准参考;把 §7.5 的 MDI、扫动过程、碰撞律系统化,接触力学读者的"力学侧圣经" |
| Acary & Brogliato Numerical Methods for Nonsmooth Dynamical Systems(Springer LNACM 35) | 2008 | ★★★★☆ | Moreau–Jean 时步法的权威;本章 §7.5 到专题 3 的桥;Siconos 求解器的理论手册 |
| Facchinei & Pang Finite-Dimensional VI and Complementarity Problems I+II(Springer) | 2003 | ★★★★☆ | VI/LCP/半光滑 Newton 的标准引用源;本章 §7.6 的 VI、NCP 函数、半光滑 Newton 出自此;Vol.II Ch.7–9 写接触求解器必读 |
| Scholtes Introduction to Piecewise Differentiable Equations(Springer Briefs) | 2012 | ★★★☆☆ | 仅 133 页;PC¹ 映射、分片线性 Newton 的教学最佳;本章 §7.3 Bouligand 导数的精简入门 |
| Bauschke–Combettes Convex Analysis and Monotone Operator Theory(2nd ed) | 2017 | ★★★★☆ | 凸+单调算子权威;Ch.23–28 近端/forward-backward 对应本章 §7.8.3,对 IPC/ADMM 直接相关 |
关键论文(按本章定理对应)¶
| 论文 | 年份 | 对应本章 | 真实评价 |
|---|---|---|---|
| Clarke "Generalized gradients and applications" Trans. AMS | 1975 | §7.2 (T2,T3,T4) | 广义梯度的原始论文 |
| Qi & Sun "A nonsmooth version of Newton's method" Math. Program. 58:353–367 | 1993 | §7.6 (T5) | 15 页;半光滑 Newton 收敛理论基石,必啃 |
| Sun & Sun "Strong semismoothness of FB SDC/SOC" Math. Program. 103:575–581 | 2005 | §7.6 (T6) | 7 页短文;FB 强半光滑,Löwner 算子技巧 |
| Robinson "Strongly regular generalized equations" Math. Oper. Res. 5(1):43–62 | 1980 | §7.3 (T9) | 灵敏度分析奠基;strong regularity 定义 |
| Poliquin–Rockafellar–Thibault "Local differentiability of distance functions" Trans. AMS 352 | 2000 | §7.8.2 (T10) | prox-regular 集与投影唯一性 |
| Moreau "Sweeping process" 蒙彼利埃讨论班讲义 | 1971 | §7.5 | 扫动过程奠基 |
| Burden–Sastry–Koditschek–Revzen "Event-Selected Vector Field Discontinuities Yield Piecewise-Differentiable Flows" SIADS 15(2) | 2016 | §7.3, §7.7 | saltation 矩阵的 B-导数严格推广(桥接专题 5) |
| Li et al. "Incremental Potential Contact" ACM TOG 39(4) Art.49 | 2020 | §7.6, §7.8.5 (T11,T12) | IPC 奠基;barrier 标准形式;SIGGRAPH 最佳论文级影响 |
| Davis–Drusvyatskiy "Stochastic subgradient method converges..." Found. Comput. Math. | 2019 | §7.8.4 | weakly-convex 随机次梯度收敛,contact-rich RL 理论 |
| Stewart "Rigid-body dynamics with friction and impact" SIAM Review | 2000 | §7.1, §7.6 | Painlevé 佯谬、测度解的经典综述 |
| Stronge Impact Mechanics(Cambridge Univ. Press,2nd ed) | 2018 | §7.5(碰撞律) | 碰撞力学权威;Newton/Poisson/能量恢复系数的系统比较,多体能量守恒的标准参考 |
| Glocker "Energetic consistency conditions for standard impacts" Multibody Syst. Dyn. | 2013 | §7.5(碰撞律) | 严格刻画三种恢复系数的能量一致性,论证 Newton 律多体可违反能量守恒 |
| Dieci & Lopez "Sliding motion in Filippov differential systems" SIAM J. Numer. Anal. | 2009 | §7.4(多面交线) | 多切换面相交处 Filippov 滑模的数值理论,等效速度多值性 |
| Brogliato "Nonsmooth mechanics" 综述系列 Multibody Syst. Dyn. / Annu. Rev. | 多年 | §7.5(扫动过程) | Moreau 扫动过程、MDI、碰撞律的现代综合,接触力学非光滑建模的力学侧主线 |
| Cabannes/Acary et al. on second-order sweeping & circuits | 多年 | §7.5(高阶扫动) | 二阶扫动过程、含理想二极管电路的状态跳变,隐式跳变与专题 5 显式跳变的对照 |
中文社区资源¶
- 方浩 / 高会军《非光滑分析与优化》(哈工大讲义,网上流传 PDF)——Clarke + Mordukhovich 中文最优入门,对应本章 §7.2、§7.3。
- 清华大学王书宁《变分分析与最优化》(讲义)。
- 知乎专栏 @李敏辰、@Chenfanfu Jiang:IPC 中文技术笔记(对应 §7.8.5)。
- B 站"太极图形 Taichi Graphics"官方频道:DiffTaichi → Genesis 的中文复盘。
- 中国工业与应用数学学会(CSIAM)"非光滑优化"专委会年会录像。
开源代码库¶
- Siconos:
siconos/siconos(CPU 非光滑参考实现,§7.5 MDI/扫动的工程化)。 - PATH 求解器:半光滑 Newton 解 NCP/MCP 的标准实现(§7.6 T5/T6)。
- IPC 参考实现:
ipc-sim/IPC、ipc-sim/ipc-toolkit(§7.6 去互补、§7.8.5)。 - Drake:
RobotLocomotion/drake(Castro 的 SAP convex contact,§7.6 VI/凸松弛)。 - Dojo.jl:
dojo-sim/Dojo.jl(Julia 解析可微刚体,§7.7 可微仿真)。 - ContactBench:
Simple-Robotics/ContactBench(7–8 种接触求解器系统比较,§7.6 对比表的实测入口)。
重要博客 / 课程¶
- Rockafellar 华盛顿大学 Math 516 课件(个人主页含 Variational Analysis 全书 PDF)。
- Boris Mordukhovich (Wayne State) 夏校 Variational Analysis and Applications。
- Danny Kaufman SIGGRAPH 2022 Course Contact and Friction Simulation(124 页)。
- Russ Tedrake MIT 6.8210 Underactuated Robotics(2024 版含 Contact-Implicit 章)。
physicsbasedanimation.com(Kaufman 小组策划周读)。
本章与后续章节的关系¶
本章是接触力学全章的理论根基,与各专题的关系如下表。它既是"先修"(为后续提供数学语言),也是"后证"(在你学过后续工程内容后,回头给它们补严格证明)——所以本章可以**第一遍速读建立框架、学完专题 1–6 后再回头精读补证**。
| 后续/相关章节 | 与本章的关系 | 本章哪个知识点为其铺垫 |
|---|---|---|
| 专题 1(互补/Signorini) | 本章 §7.6 把 LCP 重写为法锥/VI/NCP 方程;§7.3 补证解映射 Lipschitz | 7.3(Mord 判据 T7)、7.6(命题 7.6.1) |
| 专题 2(摩擦锥) | 本章 §7.2 补证摩擦力=耗散势负广义梯度,stick-slip 的尖点根源 | 7.2(Clarke 梯度、例 2/3) |
| 专题 3(时步法) | 本章 §7.5 是其全部设计选择(速度-冲量、隐式、无事件检测)的数学解释;Delassus 谱解释碰撞 LCP 病态、三种碰撞律解释恢复模型选型 | 7.5(MDI、Delassus、碰撞律、Moreau–Jean 离散) |
| 专题 4(可微接触仿真) | 本章 §7.2/§7.3 解释"接触可微"的含义;§7.6 解释 IPC Newton 友好 | 7.2/7.3(广义梯度/B-导数)、7.6(barrier) |
| 专题 5(混合系统/Saltation) | 本章 §7.3 的 Bouligand 导数是 saltation 矩阵的严格数学地位 | 7.3(\(\partial_B\)、B-导数) |
| 专题 6(CI-MPC) | 本章 §7.3 的 Robinson 强正则性桥接接触轨迹灵敏度与 NMPC 良态 | 7.3(强正则性 T9) |
| 第五批(控制理论) | 本章 §7.3(T9)桥接 NMPC 灵敏度;Filippov 解(§7.4)是滑模控制根基;§7.7 桥接六补证滑模控制律的解合法性与非光滑 Lyapunov 镇定 | 7.3(T9)、7.4(Filippov/滑模/Lyapunov)、7.7(桥接六) |
| 第二批(凸分析) | 本章 §7.2/§7.3 把凸次微分推广到非凸 Lipschitz;T8 给出"凸 Clarke⊂limiting"的非凸路径 | 7.2(凸相容)、7.3(T8) |
🔧 故障排查手册¶
本章是理论章节,"故障"主要是**理解/分析层面**的(用错工具、证错定理)和**与下游仿真/优化对接时**的诊断。下表给出 7 个高频场景的结构化排查。
场景 1:算出的"广义梯度"不是凸集,怀疑算错了¶
| 项目 | 内容 |
|---|---|
| 症状 | 计算某 Lipschitz 函数的"广义梯度",结果是离散点集(如 \(\{-1,+1\}\))或非凸集,与"Clarke 梯度应凸"矛盾 |
| 可能原因 | (1) 你算的其实是 Bouligand 子微分 \(\partial_B\)(可微点梯度极限,非凸),不是 Clarke \(\partial_C\);(2) 忘了取凸包这一步 |
| 排查步骤 | ① 检查是否套用了 Gradient Formula 的**凸包**外壳 \(\text{conv}\{\cdots\}\)(§7.2 T2);② 若只收集了极限梯度而没取凸包,得到的是 \(\partial_B\);③ 确认你需要的是 \(\partial_B\)(半光滑 Newton)还是 \(\partial_C\)(最优性/凸)——见 §7.3 区分 |
| 相关章节 | §7.2(Gradient Formula)、§7.3(\(\partial_B\) vs \(\partial_C\) 层级) |
场景 2:灵敏度分析证不出 Lipschitz 性,判据总不满足¶
| 项目 | 内容 |
|---|---|
| 症状 | 想证 LCP/接触解映射局部 Lipschitz,套 Mordukhovich 判据 \(D^*S(0)=\{0\}\) 却总得到非零解,或判据无法判定 |
| 可能原因 | (1) 误用了 Clarke 法锥(凸化)而非 limiting 法锥,破坏判据充要性;(2) 问题本身确实非 Lipschitz(如 Coulomb 摩擦非 P-matrix,Painlevé 构型) |
| 排查步骤 | ① 确认余导数用的是 Mordukhovich(limiting)法锥而非 Clarke(§7.3 强调);② 检查矩阵 \(M\) 是否 P-matrix(P-matrix → 单值 Lipschitz;非 P-matrix → 可能失败);③ 若非 P-matrix,灵敏度本就可能不存在——这是物理事实(接触力对扰动剧变),非证明技巧问题 |
| 相关章节 | §7.3(T7 Mordukhovich 判据、T9 强正则性)、§7.6(P-matrix 与互补) |
场景 3:仿真在切换面(\(v_t=0\))附近高频抖振(chattering)¶
| 项目 | 内容 |
|---|---|
| 症状 | 摩擦/接触仿真中,物体本应静止(stick)或平稳滑行,速度却在 \(v=0\) 附近高频来回跳 |
| 可能原因 | (1) 积分器在切换面两侧速度场间**硬切换**,没取 Filippov 等效速度(滑模);(2) 误把物理滑模当数值 bug 去加阻尼 |
| 排查步骤 | ① 确认这是物理滑模(两侧速度场都指向切换面,§7.4 滑模判据)还是真数值问题;② 若是滑模,改用滑模感知积分器(在切换面取等效速度 \(f_{\alpha^\star}\))或隐式时步法(专题 3 Moreau–Jean 天然处理);③ **不要**盲目加阻尼/正则化(会引入蠕动,§7.1) |
| 相关章节 | §7.4(Filippov 滑模、等效动力学)、§7.5(Moreau–Jean 隐式)、§7.1(正则化弊病) |
场景 4:碰撞仿真穿透地面,或减小步长仍无改善¶
| 项目 | 内容 |
|---|---|
| 症状 | 物体落地后穿透地面一段才被"拉回",或越减小步长穿透越轻但永不消失、计算量爆炸 |
| 可能原因 | (1) 用了显式积分器 + 位置-加速度变量,把碰撞当有限加速度处理(§7.5 误区);(2) 约束作用于当前速度而非右速度 \(v^+\)(应隐式) |
| 排查步骤 | ① 确认积分器是否用**速度-冲量**变量(而非位置-加速度);② 确认约束是否对右速度 \(v^+\) 隐式施加(§7.5);③ 若用显式 + 加速度,无论步长多小都会穿透——换 Moreau–Jean 时步法(专题 3);④ 检查是否需要 CCD(连续碰撞检测)保证步内不穿透(IPC 路线,§7.8.5) |
| 相关章节 | §7.5(MDI、冲量、隐式)、专题 3(时步法)、§7.8.5(IPC/CCD) |
场景 5:半光滑 Newton 不收敛或收敛到非解点¶
| 项目 | 内容 |
|---|---|
| 症状 | 用 FB + 半光滑 Newton 解接触 NCP,迭代停滞、振荡,或收敛到 \(\Phi(z)\ne0\) 的点 |
| 可能原因 | (1) Newton 步用了 Clarke 凸组合 Jacobian(可能奇异)而非 \(\partial_B\) 元素;(2) \(\partial_B F(x^\star)\) 在解处奇异(摩擦锥顶点、非 P-matrix);(3) 无全局化(line search) |
| 排查步骤 | ① 确认 \(V_k\) 取自 \(\partial_B F\)(Bouligand,§7.6 定义 7.6.5)而非 \(\text{conv}\);② 检查问题是否 P-matrix/强正则(T5 收敛前提);③ 若 \(\partial_B\) 奇异(摩擦顶点),加正则化、用凸松弛(专题 2 CCP/SAP)或换 barrier(IPC);④ 加 line search(用 FB merit 函数 \(\frac12\|\Phi\|^2\))保证全局收敛 |
| 相关章节 | §7.6(T5/T6、\(\partial_B\) 选取)、§7.3(\(\partial_B\) 非奇异)、专题 2(凸松弛) |
场景 6:多接触同时碰撞时求解器给出"不唯一"或随机抖动的冲量分配¶
| 项目 | 内容 |
|---|---|
| 症状 | 多点同时触地(如桌子四腿、四足同时落地),每次仿真各接触点的冲量分配不同,但质心轨迹基本一致;或求解器在不同接触点间"反复横跳"分配冲量 |
| 可能原因 | (1) Delassus 算子 \(W=J_nM^{-1}J_n^\top\) 病态(刚性耦合多接触,\(\kappa(W)\) 大),PGS 迭代收敛慢且对初值敏感;(2) 物理上冲量分配本就在凸系数层面不唯一(§7.4 多面交线、§7.5 多点碰撞),只有等效速度/质心轨迹唯一 |
| 排查步骤 | ① 计算 \(W\) 的条件数 \(\kappa(W)\)——若 \(\kappa\) 大,是刚性耦合导致的病态(§7.5 Delassus 谱);② 区分"分配不唯一是物理事实(凸系数自由度)还是数值噪声"——检查质心轨迹是否一致(一致则是前者,正常);③ 若需确定性分配,引入微小接触刚度差或时序差打破对称,或用整步隐式互补(专题 3)替代逐点 PGS;④ **不要**强行让分配"唯一化"而违背物理 |
| 相关章节 | §7.5(Delassus 谱与条件数、多点碰撞 LCP)、§7.4(多面交线 Filippov 多值)、专题 3(整步求解) |
场景 7:滑模控制器接到接触仿真上后闭环行为与理论预测不符¶
| 项目 | 内容 |
|---|---|
| 症状 | 设计的滑模控制律在理论(连续 Filippov 模型)上稳定,接到时步法接触仿真后却抖振、漂移或稳定性变差 |
| 可能原因 | (1) 控制器是控制非仿射的,Filippov 凸化与等效控制法分叉(§7.4 Aizerman–Pyatnitskii 歧义),理论用的解概念与仿真器实际求解的解不一致;(2) 时步法的离散滑模(冲量层 stick/slip)与连续 Filippov 滑模在步长 \(h\) 下有 \(O(h)\) 偏差;(3) 控制切换面与接触切换面交互产生多切换面,等效动力学多值 |
| 排查步骤 | ① 确认控制律是否控制仿射——若非仿射,明确理论用 Filippov 还是 Utkin 等效控制,并与仿真器实现对齐(§7.4 对比);② 减小步长 \(h\) 看抖振是否随之减小(是则为离散偏差,用滑模感知积分器);③ 检查控制切换面与接触切换面是否相交(多面交线 → 等效动力学可能多值,§7.4);④ 用非光滑 Lyapunov 集值导数(§7.4 T4.4)重新验证离散闭环的稳定性 |
| 相关章节 | §7.4(Filippov vs Utkin、多面交线、非光滑 Lyapunov)、§7.7 桥接六、专题 3(离散滑模) |
研究实践建议¶
给新手的建议¶
- 先建框架,再补证明:本章 §7.3、§7.5 是博士论文级深度。第一遍学习,把这两节当"结论框"读(记住 \(\hat\partial\subseteq\partial_L\subseteq\partial_C\)、"加速度是测度"),别陷进证明。先用 §7.1→§7.6→§7.7 建立"非光滑来源—工具—应用"的框架,等遇到具体研究问题再回头精读证明。
- 亲手算五个运行示例:\(|x|\) 的 Clarke 梯度(§7.2)、二维继电系统的 Filippov 滑模四步流程(§7.4)、FB 函数的半光滑 Newton(§7.6)、两点碰撞的 Delassus LCP(§7.5)、\(|x|\) 的 Moreau–Yosida = Huber(§7.8.3)。这五个例子分别打通三大主干(导数/解/方程)+ 碰撞 + 平滑,每个都能在草稿纸上算到底,算一遍胜过读十遍。
- 分清两个层次:反复自问"我面对的是函数不可微(层次一,用次微分)还是方程的解跳变(层次二,用 DI/MDI)?"这个判断决定一切工具选择。
- 从工程现象倒推理论:每次仿真出问题(穿透、抖振、不收敛),别急着调参数,先用本章故障排查手册(7 个场景)定位"这是哪个非光滑现象、对应哪个理论"。这种"现象→理论"的反向训练,比正向学习更能内化本章。
- 掌握"四步滑模流程"作为通用套路:分析任何 Filippov 滑模系统(摩擦、继电控制、stick-slip),都用同一套路——取凸包 → 法向投影判横穿/滑模 → 解凸系数 \(\alpha^\star\) → 代回求约化动力学(§7.4 运行示例)。把这四步练成肌肉记忆,遇到任何不连续右端系统都不慌。
给有经验者的建议¶
- Clarke 与 Mordukhovich 的选择是研究品味的体现:工程实现、求最优性用 Clarke(凸、便利);灵敏度分析、稳定性证明、双层优化用 Mordukhovich(精细、精确运算法则)。误用 Clarke 做灵敏度是审稿常见被打回点(§7.3 反复强调)。
- 写接触论文的"理论检查清单":声称"收敛"→ 引 T5/T6 并验证 \(\partial_B\) 非奇异;声称"Lipschitz 依赖/稳定"→ 引 T7/T9;声称"无穿透"→ 引 T11(barrier)或证明冲量层互补;声称"可微"→ 明确是 §7.2/§7.3 哪种广义导数,且声明可微范围(GPU 仿真常见"声称全栈可微实则部分可微"的被打回点,见下)。
- GPU 可微仿真的"可微范围"必须明确声明:Genesis 当前仅 MPM+Tool Solver 可微、刚体 AD 在 roadmap;MJWarp Alpha 期不支持 AD;Isaac Lab 基于 PhysX 5 不可微。把"GPU+AD"写成"全栈可微"是审稿常见被打回点(原文档陷阱 5)。写实验请明确可微的物理层。
- 关注"去互补"范式:2020 后接触仿真从互补转向 barrier(IPC)、从 CPU 硬接触转向 GPU 软接触+AD。若做接触求解器研究,先用 §7.6/§7.8.5 把你的方法定位在"互补 vs barrier、精确 vs 可微"的权衡谱上,再讲贡献。ContactBench 是公平对比的实测入口。
- 碰撞律与解的唯一性须显式声明:写多体碰撞论文时,明确用 Newton / Poisson / Moreau 哪种恢复模型(§7.5)——Newton 律多体可能违反能量守恒,是审稿可质疑点。遇到高对称多接触(Newton's cradle 类),不要假装解唯一;如实声明"等效速度/质心轨迹唯一、逐点冲量分配不唯一",或引入软接触恢复唯一性。把"解不唯一"当 bug 去强行消除,是对接触固有难点的误解。
- 诊断病态先看 Delassus 谱:接触求解器收敛慢时,先算 Delassus 算子 \(W=JM^{-1}J^\top\) 的条件数 \(\kappa(W)\)(§7.5)——\(\kappa\) 大说明是刚性耦合多接触导致的内在病态,应改用整步隐式或预条件,而非盲目减小步长。\(W\) 的稀疏结构即接触约束图,可指导并行 PGS 的图着色。
- 正则化要追到变分来源:若用 penalty/光滑摩擦,明确它对应哪个势的 Moreau–Yosida 正则化(§7.8.3),从而知道正则化参数 \(\lambda\) 的物理含义与 \(\lambda\to0\) 的极限行为。把"调一个光滑参数"理解为"做一次 Moreau–Yosida 逼近",能让你预判数值刚性何时爆炸(饱和斜率 \(\sim1/\lambda\))。
版本信息速查¶
本章涉及的工具/库/框架版本(截至 2026 年中):
| 工具/库 | 版本/状态 | 与本章关系 |
|---|---|---|
| Siconos | 活跃维护 | §7.5 MDI/扫动的 CPU 参考实现 |
| PATH Solver | 稳定 | §7.6 半光滑 Newton 解 NCP/MCP 标准 |
| Drake | 活跃(SAP convex contact) | §7.6 VI/凸松弛接触 |
| IPC / ipc-toolkit | 活跃 | §7.6/§7.8.5 去互补 barrier |
| Dojo.jl | 活跃(Julia) | §7.7 解析可微刚体 |
| ContactBench | 活跃(Simple-Robotics) | §7.6 接触求解器对比基准 |
| MJX | 稳定(JAX,可微) | §7.8.5 GPU 可微仿真 |
| MJWarp | Alpha(Warp,首版无 AD) | §7.8.5 GPU 高吞吐,AD 在 Newton 补全 |
| Genesis | 开源(Taichi,MPM 可微,刚体 AD roadmap) | §7.8.5 多物理可微仿真 |
说明:GPU 可微仿真框架(MJWarp、Newton、Genesis)2025–2026 处于快速演进期,"是否可微""可微哪些物理层"随版本变化大,使用前务必查阅当时的官方文档与 release note,不要依赖本表的快照。
结语:学完本章,你就打通了接触力学全章(专题 1–6)的理论-实现-工程闭环。再看那棵知识树——根是接触的非光滑(§7.1),主干是替代导数(§7.2/7.3)、替代解(§7.4/7.5)、替代方程(§7.6),桥接(§7.7)把主干接到六个专题的果实,进阶(§7.8)伸向 2026 年的前沿。不学本章仍可做工程;学了本章才能做研究——因为你现在不仅会用接触工具,更能证明它们为何成立、何时失效、如何推广。这正是从算法工程师走向研究者的分水岭。