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)