PBD再推演

根据高斯最小二乘约束法则,我再一次推演一下PBD, 推演过程中所有向量都是列向量,梯度的求解也是列优先。

由高斯最小二乘约束法则,我们可以假设物体是一个满足一定约束的运动,用数学的形式如下:
$$
\begin{matrix}
\mathbf{x}^{n+1} = \min{\frac{1}{2h^2}\Delta\mathbf{x}^T\mathbf{M}\Delta \mathbf{x}} \
s.t. \quad C(\mathbf{x}^{n+1})=0
\end{matrix}
$$
因为$C(\mathbf{x}^{n+1})=0$是非线性的,所以需要用泰勒公式线性化,得到:
$$C(\mathbf{x}^{n+1})= C(\mathbf{x}^n) + \nabla^{T}C(x^n) \Delta \mathbf{x}$$

然后,我们使用拉格朗日乘子法来求解约束:
$$L(\Delta\mathbf{x},\lambda) = \frac{1}{2h^2}\Delta\mathbf{x}^T\mathbf{M}\Delta \mathbf{x} + \lambda \cdot (C(\mathbf{x}^n) + \nabla^{T}C(\mathbf{x}^n) \Delta \mathbf{x})$$

分别对$\Delta\mathbf{x},\lambda$求梯度得到:
$$\frac{\partial L}{\partial \Delta\mathbf{x}} = \frac{\mathbf{M}}{h^2}\Delta \mathbf{x} + \nabla C(\mathbf{x}^n) \lambda= 0$$
$$\frac{\partial L}{\partial \lambda} = C(\mathbf{x}^n) + \nabla^{T}C(x^n) \Delta \mathbf{x} = 0$$
化成矩阵表示的形式:
$$
\begin{bmatrix}
\frac{\mathbf{M}}{h^2} & \nabla C\\
\nabla^{T} C & 0
\end{bmatrix}
\begin{bmatrix}
\Delta \mathbf{x} \\
\lambda
\end{bmatrix} =
\begin{bmatrix}
\mathbf{0} \\
-C(\mathbf{x}^{n})
\end{bmatrix}
$$
对矩阵$\mathbf{M}$的Schur complement(舒尔补)可以得到
$$\lambda = \frac{h^2 C(\mathbf{x}^{n})}{\nabla^{T}C\mathbf{M}^{-1}\nabla C}$$
将$\lambda$代入到$\frac{\partial L}{\partial \Delta\mathbf{x}}$ 中可以得到:
$$\Delta \mathbf{x} = -\mathbf{M}^{-1} \nabla C(x^n) \lambda$$

文章目录
,