我想使用 Crank-Nicolson 方案求解与时间相关的薛定谔方程。我最终得到以下矩阵方程
A_fixed = ... # the matrix that does the finite difference method
B_fixed = ... # the matrix that does the finite difference method
A = A_fixed - diags(V) # Add the potential term V to the diagonal of A_fixed
B = B_fixed + diags(V) # Add the potential term V to the diagonal of A_fixed
# solve for psi_new at each time step:
A.dot(psi_new) = B.dot(psi_old) # psi_old is the solution at the previous time-step
和是稀疏矩阵,所有项都沿主/非对角线(这称为“带状”吗?)。求解上述矩阵方程的最佳方法是什么?
我正在使用 scipy 库sp.sparse.linalg
,它提供了solve
一种使用 LU 分解的方法。如果潜在项与时间无关,那么和实际上在整个计算过程中都是固定的,因此我可以使用它来预先分解。这给了我 2 倍的速度。sp.sparse.linalg.factorized
但是如果是随时间变化的,那么和在每个时间步都会发生变化怎么办?是否有适用于这个特定问题的算法(其中和都由固定项和一些仅添加到主对角线的时变项组成)?