跳转到内容

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)
华夏公益教科书