Octave 程式設計教程/微分方程
外觀
Octave 提供了兩個可用於求解微分方程的函式。該實現整合在 Octave 的核心功能中。使用的演算法基於用Fortran 編寫的常微分方程求解器。
以下函式lsode 可用於使用 Hindmarsh 的 ODE 求解器[1] LSODE 的形式的常微分方程 (ODE)。
函式: lsode (fcn, x0, t_out, t_crit)
- 第一個引數是計算右手邊向量呼叫的函式的名稱。它必須具有以下形式
x_dot = f (x, t)
- 在這個上下文中,x_dot 是函式 的返回值,而 是一個向量(在下面的示例中它有 2 個分量),而 是一個標量。求解器 lsode 獲取一個標量向量作為輸入。
- 第二個引數 x0 定義初始條件。
- 透過第三個引數,輸出時間 t_out 由一個向量定義。在這些時間點,需要計算解。時間點包括初始狀態的對應時間作為第一個元素。
- 最後一個引數是一個可選引數,可用於確定 ODE 求解器不應對其進行積分的一組時間點。特別是當解包含奇點時,可以使用這些引數成功執行求解器。其他用例可能是導數的不連續性。
以下示例可用於使用 lsode 求解一組兩個微分方程。該函式由
function x_dot = f (x, t)
r = 0.15;
k = 1.6;
a = 1.25;
b = 0.12;
c = 0.89;
d = 0.58;
x_dot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
x_dot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
endfunction
函式 f 透過以下命令進行積分
x = lsode ("f", [1; 2], (t = linspace (0, 50, 200)'));
該 linspace 命令生成一組 200 個儲存在變數 t 中的標量值。
plot (t, x)
John Weatherwax (2006) 使用 m 檔案定義了導數、邊界條件
- DBDU_BNDRY.m,
- DBDUX_BNDRY.m,
- DZDT_BNDRY.m 和
- UINIT.m,其中包含 PDE 的初始系統。
使用上面的連結顯示庫,並將程式碼調整到您的 PDE 問題。
- pdecol_Script.m 使用邊界條件呼叫 m 檔案。以這種方式定義檔案將函式的定義封裝在求解器指令碼 pdecol_Script.m 的單獨 m 檔案中。將指令碼應用於新問題需要調整上面提到的特定於問題的 m 檔案,而求解器指令碼保持不變。
- ↑ Alan C. Hindmarsh (1983), ODEPACK, A Systematized Collection of ODE Solvers, in Scientific Computing, R. S. Stepleman, editor,
- ↑ John Weatherwax (2006) Solving Partial Differential Equations in Octave URL: https://waxworksmath.com/Software/PDECOL/Web/pdecol_example1.html (訪問於 2020/07/14)