在pbd中,我們將約束條件線性化,然後用高斯賽德爾的迭代方式沿著各個約束梯度方向下降,來進行物理模擬。實際上這種做法,站在最最佳化的角度來看,是在解決這樣一個問題。

minimize    \frac{1}{2}  \Delta x^{t}M \Delta x

s.t. C_{i}(x+\Delta x) =0,i\in N

如上面所示這是一個帶約束的2次規劃問題,M是質量矩陣,一般就是個對角矩陣,

\Delta x

是我們要最佳化的變數。

通常,這種帶約束條件的二次規劃問題,當約束條件不是線性的時候,我們可以泰勒展開,近似成線性的約束條件,這樣方變最後整合成一個線性方程組求解的問題。在pbd的情況裡,約束條件中間有個加法(

x+\Delta x

),也是類似的線性化處理。

所以我們把約束線性化近似

C_{i}(x+\Delta x) \approx Ci(x)+∇Ci(x) \Delta x

Ci(x)+∇Ci(x) \Delta x = 0

最後可以匯出

∇Ci(x) \Delta x = -Ci(x)

好了,由於我們有許多的約束,現在我們可以把這些約束堆成矩陣了

J= [∇C1(x) ,∇C2(x) ......∇Cn(x)]

J\in R^{m*n}

,n為約束個數,m是梯度的維度

b= [-C1(x),-C2(x).....-Cn(x)]

矩陣化後得到

J \Delta x = b

所以這個二次規劃問題最後變成下面的表示。

minimize    \frac{1}{2}  \Delta x^{t}M \Delta x

s.t.J \Delta x = b

那麼用拉格朗日乘子法可以輕鬆的代入上面問題了

我們構建一個新的函式,求它的極值就可以了:

f(\Delta x,\lambda) =   \frac{1}{2}  \Delta x^{t}M \Delta x + \lambda^{t}(J\Delta x-b)

要求

f(x,\lambda)

的極值,那麼就需要

                                        \frac{∂f}{∂\Delta x} = 0

並且

\frac{∂f}{∂\lambda} = 0

那麼得到下面方程組

\frac{∂f}{∂\Delta x} 是 M \Delta x =- J^{t} \lambda

\frac{∂f}{∂\lambda} 是 J \Delta x = b

將第二個方程變形代入第一個方程求解

\lambda

,可以得到

 M J^{-1}b =-J^{t}  \lambda

這樣是不對的,因為

J

幾乎一定不可逆,所以只能變形第一個方程,得到

 \Delta x =- M^{-1}J^{t} \lambda

 \Delta x

代入第二個公式,可以得到

  (- J M^{-1} J^{t})\lambda = b

用拉格朗日乘子法,求解出

\lambda

,也就可以去解出

\Delta x

。那麼現在求解

\lambda

已經被變成了一個求解線性方程組的問題。求解線性方程組首先要搞清楚這個線性方程組有沒有解。

顯然,當

  (- J M^{-1} J^{t})

滿秩的時候

\lambda

有唯一解。但是上文提到

:J= [∇C1(x) ,∇C2(x) ......∇Cn(x)]

,也就是說

J

是由約束的梯度堆砌成的矩陣,而在物理模擬中約束的個數,梯度的維數都無法保證,彼此之間是否線性相關也無法保證。那就是說J的秩無法保證,導致

  (- J M^{-1} J^{t})

的秩也無法保證。 所以這個方程組可能有唯一解,可能沒有解,可能有無限多個解。

然而PDB用迭代法在無視了上訴問題的情況下直接進行求解,那麼就會帶來一些問題。

1。高斯賽德爾迭代法:

假設有方程組 :

f1(x,y) = 0

f2(x,y) = 0

使用高斯賽德爾方法求解,第一步代入f1,解會在f1函式的解空間中,第二步代入f2,解會在函式f2的解空間中。(可以畫圖看看,懶得畫了。)

也就是說用高斯賽德爾方法解會在解空間之間來回跳躍,然後慢慢的靠近共同的解空間。

2。雅克比迭代法:

同樣是上面的方程組,雅克比迭代法代入f1,計算出到f1解空間的向量,代入f2,計算出另一個到解空間f2的向量,然後向著兩個向量的合向量前進,尋找f1和f2的相交解空間。這樣的話如果f1,和f2的解空間在同一個方向,雅克比迭代法使用合向量作為步長,經常會一步邁過,下一步再邁回起始點,導致不能收斂。但是當解空間不同向的時候,雅克比迭代法由於向著合向量迭代,不會像高斯賽德爾方法那樣在兩個解空間之間來回跳躍,反而穩定性較好。

由於雅克比迭代法可以輕易並行,所以為了解決上面提到的一步邁過不能收斂的問題,有人使用了平均雅克比迭代法。就是把合向量加起來,然後除以向量個數。

由以上分析也可以看出,PBD只是找到了解空間中的一個解,但並不是唯一解。(也可能沒有解的時候找出來一個錯誤解)