跳轉到內容

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)

lsode 的選項

[編輯 | 編輯原始碼]

偏微分方程

[編輯 | 編輯原始碼]

有關偏微分方程 (PDE),請參閱以下PDE 示例[2]

John Weatherwax (2006) 使用 m 檔案定義了導數、邊界條件

使用上面的連結顯示庫,並將程式碼調整到您的 PDE 問題。

  • pdecol_Script.m 使用邊界條件呼叫 m 檔案。以這種方式定義檔案將函式的定義封裝在求解器指令碼 pdecol_Script.m 的單獨 m 檔案中。將指令碼應用於新問題需要調整上面提到的特定於問題的 m 檔案,而求解器指令碼保持不變。

參考文獻

[編輯 | 編輯原始碼]
  1. Alan C. Hindmarsh (1983), ODEPACK, A Systematized Collection of ODE Solvers, in Scientific Computing, R. S. Stepleman, editor,
  2. John Weatherwax (2006) Solving Partial Differential Equations in Octave URL: https://waxworksmath.com/Software/PDECOL/Web/pdecol_example1.html (訪問於 2020/07/14)
華夏公益教科書