具有质量矩阵的线性常微分方程组

计算科学 线性代数 数值分析 特征值 迭代法
2021-11-30 21:23:16

有哪些方法可以有效地求解以下形式的大量线性齐次常微分方程?

Bdydt=Ay,
在哪里BCN×N是 Hermitian 正定的, ACN×N是厄米特,yCN, 和N是一个大整数,使得不是矩阵的所有元素A要么B可以存储在主存储器中。

有没有避免计算的方法B1, 求解一个线性方程Bx=c对于任何c, 和对角化B? 对于相关的特征值问题,似乎有这样一种“逆自由”方法 [1],Bλy=Ay,我想知道这种方法是否可以扩展到 ODE。

[1] 例如 Gene H. Golub, Qiang Ye, An Inverse Free Precondition Krylov Subspace Method for Symmetric Generalized Eigenvalue Problems, SIAM J. Sci. 比较。24, 312 (2002)。

1个回答

B被称为质量矩阵。有很多方法可以直接用质量矩阵求解。主要是隐式方法:隐式 Runge-Kutta 方法和多步 BDF 方法。Rosenbrock 方法也可以直接处理质量矩阵,但不是隐式方法。

“为什么有效”的快速概述是因为在每一步这些方法都必须求解涉及 RHS 雅可比行列式的线性方程。线性问题通常具有以下形式(IγJ)x=b在哪里J是系统雅可比行列式,γb是一些常数,并且x是必须解决的系统的演变。好吧,事实证明,如果你只使用质量矩阵B通过将系统更改为(BγJ)x=b,这些直接解决了质量矩阵的线性问题,隐式反转B在它已经在做的计算中(这是因为I取雅可比行列式时来自 LHS,但使用质量矩阵而不是该值B!)。Shampine 的论文中概述了使用非自适应二阶版本的 Rosenbrock 方法执行此操作并不困难,尽管如果没有自适应时间步长,您会损失很多效率。

如果您使用 Julia,DifferentialEquations.jl 可以访问这些方法。只是改变类型mass_matrix的构造ODEProblemRosenbrock23()方法将处理这样的质量矩阵。此外,质量矩阵可以传递给隐式 RK 方法radau()radau5()如果您希望以高精度解决刚性问题,这些方法具有更高阶并且往往更快。从技术上讲,日晷CVODE_BDF()可以使用质量矩阵来解决,但是为此设置 C FFI 存在一个未解决的问题(它在我的优先级列表中很高。完全披露:我是微分方程的开发人员)。

如果您可以处理转而使用 MATLAB 的性能下降,您会发现该领域非常相似。ode23s是二阶 Rosenbrock 方法,与 非常相似Rosenbrock23(),并且可以使用恒定质量矩阵. ode15s非常类似于CVODE_BDF()并且可以采用质量矩阵。MATLAB 没有隐式 RK 方法,但它确实ode23t适用于需要辛积分器并且可以处理质量矩阵的问题。

我没有看到将质量矩阵传递给 SciPy 的 ODE 求解器的选项,也没有使用 SciPy 包装器。它们包含一些与DifferentialEquations.jl 相同的代码,所以我知道在某些情况下,质量矩阵可以通过他们使用的底层C/Fortran 代码来求解,但看起来API 的那部分没有公开。