求解随时间变化的矩阵加对角矩阵系统的有效方法

计算科学 线性求解器
2021-12-01 21:12:12

在求解 ODE 系统时,作为预处理器的一部分,我得到了系统

(A+D(t))x=b(t)

其中A是稀疏矩阵,D(t)是对角线。我目前正在通过对每个t进行系统的 LU 分解来解决这个问题。A在整个解中是恒定的。

有没有一种算法可以让我有效地解决这个问题,而无需在每一步都重新计算分解?

2个回答

我不相信在你的情况下直接解决是可能的,有太多用户的应用程序太多如果可能的话,这将受益匪浅。特别是计算线性时不变系统 或 使用交替方向 求解 Lyapunov 矩阵方程 的因式分解到的因式分解廉价地传递的算法都将极大地促进隐式 (ADI) 方法T(s)=C(AsI)1B+D

x(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)
AX+XAT=BBT
AAsI

如果具有低秩,那么 Sherman-Morrison-Woodbury 公式将允许您快速求解具有系数矩阵系统,前提是您可以快速求解具有系数矩阵系统。但是,我认为这不太可能。D(t)A+D(t)A

我建议您将线性系统视为 t 的很可能可以微分几次,这表明的未来值可以从过去的值中推断出来。特别是,如果足够小,则 值的简单且易于实现的初始猜测更复杂的近似是可能的,但它们不一定值得付出努力。x

(A+D(t))x=b(t)
txtxh
x0=x(t),orx0=2x(t)x(th)
x(t+h)

我进一步建议您使用预处理的 Krylov 子空间方法解决您的线性系统。与其为每个时间步计算一个新的预处理器,我建议您循环使用几次预处理器,并且仅在当前的预处理器无效时计算一个新的预处理器,即迭代计数变得太大。

我不能保证这些选项会给你你正在寻找的速度,但至少它们提供了一些可以调整的参数:初始猜测的选择、预处理器和计算新预处理器之前的时间步数.

否(除非几乎没有非零)。这个问题的变体在这里被问了很多,答案总是相同的。D