我试图了解如何解决刚性微分方程。
例如方程,
可以使用 ode 求解器通过离散化第 i 个节点的 z 方向来求解
这个 ode 通常使用 ode15s 来解决。据我了解,刚性求解器使用数值微分形式,如反向微分公式(BDF)来近似导数。考虑一个两步 BDF 公式,
我不知道如何从这里开始。我没有使用求解器,而是尝试实现上述 BDF 以了解求解器的工作原理。
我想就如何从这里开始寻求建议。
编辑:等式(2)和(3)等式
我试图了解如何解决刚性微分方程。
例如方程,
可以使用 ode 求解器通过离散化第 i 个节点的 z 方向来求解
这个 ode 通常使用 ode15s 来解决。据我了解,刚性求解器使用数值微分形式,如反向微分公式(BDF)来近似导数。考虑一个两步 BDF 公式,
我不知道如何从这里开始。我没有使用求解器,而是尝试实现上述 BDF 以了解求解器的工作原理。
我想就如何从这里开始寻求建议。
编辑:等式(2)和(3)等式
您在编辑中设置方程式的方式允许您使用 thomas 算法求解。如果您查找 TDMA 的算法,您会看到该等式将创建一个包含 (n) 时间步的系数的三对角矩阵 A,以及根据您之前的时间步 (n-1, n-2) 的右侧 b解值。这将允许您轻松解决 BDF1 时间步长问题。托马斯算法的维基页面在这里: https ://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm
如果您想解释 BDF1 的工作原理,您可以这样想,我将针对稳态欧拉 CFD 代码进行解释。在稳态欧拉中,我们有保守变量的向量,,我们的残差算子对应于离散和集成的 PDE,它必须为零。
我们从, 为此不等于零,并且一个我们希望它等于零。如果我们采用泰勒级数展开关于我们得到:
最新的时间应该是未知的,因此可以通过将 lhs 移动到 rhs 来将隐式方法重塑为求根方程组。
不过,您似乎将 y 离散化是错误的,空间离散化需要与时间离散化分开进行,因此如果您保留整个历史,答案是矩阵。(注意:您只显示了时间导数的表达式,而不是积分或泰勒展开式的表达式,并且空间模板的 lhs 不应该是空间导数吗?)
使用ode15s
[t,y] = ode15s(@(t,z) fun(t,z,alpha,dz),tspan,y0);
和
function dy = fun(t,y,alpha,dz)
dy = zeros(size(y));
dy(1) = % b.c.
dy(2:end-1) = alpha*(y(3:end) -2*y(2:end-1) + y(1:end-2) )/dz^2
dy(end) = % b.c.
哪里dy(1)
和dy(end)
取决于边界条件。
如果您想实现自己的数值方法,您可以搜索任何方法来求解线性 ODE 系统。