標籤:

漫談Simulink: 隱式和顯式的Solver

All comments and opinions expressed on Zhihu are mine alone and do not necessarily reflect those of my employers, past or present.

本文內容所有內容僅代表本人觀點,和Mathworks無關

在進行模擬,或者數值求解微分方程的時候,首先需要選擇的是採用什麼樣的Solver(求解器)。Solver可以分為兩大類: implicit (隱式)和explicit (顯式),例如MATLAB/Simulink中的ode45就是一個explicit solver, 而ode23s則是一個implicit solver。

從概念上來講,這兩類solver的差別在哪裡呢?

請看下面的例子

考慮這樣一個微分方程

dot x = f(x) ... (1)

1)如果要對它進行模擬,我們需要對x的導數進行數值逼近。explicit的方法採用的是前向逼近, 例如

frac{x_{k+1} - x_{k}}{Delta t} = f(x_k) ...... (2)

2)implicit的方法則使用後向逼近,例如

frac{x_{k+1} - x_{k}}{Delta t} = f(x_{k+1}) ...... (3)

可以看到,這裡唯一的區別是f(x)中的x是上一步的x還是下一步的x.

這兩種處理方法會有什麼樣的優缺點呢?

1) 首先看Explicit方法,由(2) 可以得到

x_{k+1} = x_k + Delta t f(x_k) ... (4)

通過這個式子我們可以方便的遞推出所有離散時間點的x的值。但是,假如(1)可以寫成如下的形式,那麼我們看看會發生什麼

dot x = -100 x ... (5)

根據上面的推導,這個時候(4)變為

x_{k+1} = (1-100 Delta t) x_k ... (6)

注意到(5)本身是一個穩定的系統(因為特徵根-100<0),但是(6)則不一定穩定,因為特徵根取決於步長Delta t, 如果步長大於0.02,那麼(6)會變成一個不穩定的離散系統。這就是所謂的數值不穩定性

因此,對於這種增益非常大的系統,用explicit solver的時候,往往會感覺模擬比較慢。這是因為步長必須足夠的小。

在Simulink中,用ode45模擬如下系統

從0-10s這個區間內,產生的時間點大於300個。

2) 我們再看看implicit的解法,由(3)可以得到

x_{k+1} - x_{k} = f(x_{k+1}){Delta t}approxDelta t[f(x_k)+nabla f(x_k)(x_{k+1} - x_{k})] ...... (7)

注意到式(7)中如果不用泰勒展開的話,是沒有辦法把x_{k+1}顯式的表達出來的,因此這種方法被稱為implicit.

由此,(7) 可以繼續推導出

x_{k+1} = (1-Delta t  nabla f(x_k))^{-1}Delta t f(x_k) + x_k ... (8)

觀察一下(8)我們可以看到,求解的過程中需要知道nabla f(x_k), 這是被模擬系統的梯度,也可以稱為Jacobian (雅克比矩陣). 這個矩陣在數值求解過程中可以通過解析表達式進行計算,或者通過數值方法擾動來近似。這也是為什麼在Simulink中,如果選擇了implicit solver,會出現一些關於Jacobian的選項, 如下圖。具體每個選項的含義這裡不展開講了。

另外,如果把(5)代入(8), 會得到

x_{k+1} = frac{1}{1+100Delta t} x_k

由此可看出,不管步長取多大,都不會有數值不穩定。

為驗證這一點,可以用ode23s來模擬同一個系統

在0-10s這個區間內,產生的採樣時間點小於70個,遠小於使用ode45產生的300多個。

由此,我們可以總結一下兩種solver的特點:

1. Explicit Solver 不需要計算系統的Jacobian, 但是可能會需要很小的步長來保持數值穩定性。這有可能會影響模擬的速度。

2. Implicit Solver 需要計算系統的Jacobian, 這個步驟本身會消耗一定的時間,但是由於步長相對可以取的比較大,在某些情況下有可能比Explicit Solver速度更快。

當然了,最終具體用哪種Solver來模擬, 還要根據模型自身的特性來決定。而這不是一個簡單的事情。

在MATLAB R2015b中, Simulink增加了Auto solver這個選項,可以幫助用戶選擇最合適的Solver, 詳見: Use Auto Solver to Select a Solver

推薦閱讀:

MATLAB神經網路(六):GRNN
對函數的輸入進行檢查和解析

TAG:MATLAB |