範例:電路中的阻尼諧振
假定有個包含電阻器 R、感應器 L 及電容器 C 的簡單電路。
使用微分方程式對電容器 C 上的電荷 Q 進行建模,然後使用 ODE 求解器函數求解其他近似解。最後,將結果與 Q 的精確解進行比較。
使用微分方程式
1. 編寫微分方程式,讓三個元件之間的電壓加起來必須等於零:
2. 編寫微分方程式,讓電容器 C 上的電荷 Q 產生瞬變:
3. 定義零時電荷 Q:
4. 假設使用下列輸入參數值:
5. 將微分方程式轉換為標準格式:
6. 求解 a 與 b 在所有狀況下的方程式:
7. 為 Q 繪製兩個可能的解:
當 a=b 時,電荷 Q1 會快速衰減為零;當 a 不等於 b 時,電荷會振盪很長的一段時間,再漸趨於零。
使用 ODE 求解器之前
• 定義要傳給 ODE 求解器函數的參數:
• ODE 求解器分為兩種類型:剛性系統的求解器及非剛性系統的求解器。以矩陣格式寫成 y' = Ax 的 ODE 系統,若矩陣 A 趨近於單數即稱為剛性。否則,即為非剛性系統。
• 剛性系統與非剛性系統的區別可能與矩陣 A 固有的動態比例相關 (如其本徵值所描述)。使用不同本徵值 (或值域上下限很極端) 的矩陣一般是剛性系統。
• 根據指定的系統參數,此簡單的阻尼諧振範例代表非剛性系統。
使用非剛性系統的 ODE 求解器
使用非剛性系統的 ODE 求解器求近似解,然後將結果與 Q 的精確解進行比較。
1. Adams
2. rkfixed
3. Rkadapt
4. Bulstoer
使用剛性系統的 ODE 求解器
使用剛性系統的 ODE 求解器求近似解,然後將結果與 Q 的精確解進行比較。
1. BDF
2. Radau
使用 ODE 混合式求解器
使用 ODE 混合式求解器 AdamsBDF 求近似解,然後將結果與 Q 的精確解進行比較;該求解器會決定系統為剛性或非剛性,然後再據以呼叫 Adams 或 BDF。
1. AdamsBDF
結論
• 在非剛性系統的 ODE 求解器內,函數 Adams 與 rkfixed 會分別傳回含有最小與最大誤差的解。
• 在剛性系統的 ODE 求解器內,函數 Radau 與 BDF 會分別傳回含有次小與次大誤差的解。
• 混合式函數 AdamsBDF 會傳回比 Adams 或 BDF 所傳回之兩個值更小的值。
• 整體而言,函數 Radau 與 rkfixed 會分別傳回含有最小與最大誤差的解。
比較結果
1. 繪製非剛性系統的 ODE 求解器所傳回含有最小 (Adams, G0nss) 與最大 (rkfixed, G1nss) 誤差的解:
與 Q 相比,兩個傳回的解會有很大的差異。
2. 繪製剛性系統的 ODE 求解器所傳回含有最小 (Radau, G1ss) 與最大 (BDF, G0ss) 誤差的解:
相對於 Q,這兩個解完全相同。
3. 繪製產出剛性與非剛性系統的 ODE 求解器所傳回之最小 (Radau, G1ss) 與最大 (rkfixed, G1nss) 誤差的解:
函數 Radau (剛性系統求解器) 會傳回 Q 的最近似解。