广义特征值问题的数值求解方法咨询
嘿,咱们先把你的问题捋清楚,再聊聊可用的数值方法~
你给出的方程 $M \Psi - \epsilon \Psi = b$ 可以整理成 $(M - \epsilon I)\Psi = b$(这里 $I$ 是N阶单位矩阵)。从你要找一系列 $(\Psi_n, \epsilon_n)$ 的需求来看,大概率是想关注那些让解 $\Psi$ 有特殊性质的 $\epsilon$(比如范数显著放大的情况),毕竟如果只是普通求解,每个不使 $M-\epsilon I$ 奇异的 $\epsilon$ 都对应唯一解。下面分几种场景给你介绍方法:
针对单个特定 $\epsilon$ 求解 $\Psi$:如果已经确定了要计算的 $\epsilon$,直接用线性方程组求解器就行。如果矩阵 $M$ 是稠密的,LU分解、QR分解这类直接法很靠谱;要是 $M$ 是大规模稀疏矩阵,用共轭梯度法(CG)、稀疏LU分解这类迭代/稀疏专用法会更高效。比如你可以用类似
scipy.linalg.solve或者稀疏矩阵对应的求解函数来实现。寻找“共振”型的 $\epsilon_n$:如果你想找那些让 $\Psi$ 范数急剧变大的 $\epsilon_n$,其实这些值就是矩阵 $M$ 的特征值。因为当 $\epsilon$ 趋近于 $M$ 的某个特征值 $\lambda_k$ 时,$M-\epsilon I$ 会接近奇异,逆矩阵的范数趋向无穷大,对应的 $\Psi=(M-\epsilon I)^{-1}b$ 也会被大幅放大。这时候你可以用特征值求解器计算 $M$ 的特征值 $\lambda_k$,对应的 $\Psi_k$ 可以通过伪逆 $(M - \lambda_k I)^+ b$ 得到(不过此时方程奇异,解不唯一,你可以取其中一个非平凡解)。
大规模矩阵的迭代解法:如果 $N$ 特别大(比如上万阶),直接分解矩阵成本太高,那迭代特征值方法就很合适。比如Arnoldi方法或Lanczos方法,它们可以高效计算大规模稀疏矩阵的少数几个极值特征值(尤其是那些和你的稀疏向量 $b$ 相关性高的特征值,因为 $\Psi$ 的大小和特征向量与 $b$ 的内积直接相关)。拿到 $\epsilon_n$ 后,再用迭代法求解对应的 $\Psi_n$。
利用特殊结构提速:你的 $b$ 向量只有首尾两个非零元素,这是个非常稀疏的结构。如果 $M$ 本身也有特殊结构(比如带状、三对角矩阵),一定要利用起来!比如 $M$ 是三对角矩阵的话,$M-\epsilon I$ 也是三对角的,用托马斯算法(Thomas algorithm)求解对应的线性方程组速度会快很多。
补充一句:如果是要找所有满足方程的 $(\Psi_n, \epsilon_n)$,那规律是这样的:当 $\epsilon$ 不是 $M$ 的特征值时,方程有唯一解 $\Psi=(M-\epsilon I)^{-1}b$;当 $\epsilon$ 是 $M$ 的特征值时,只有当 $b$ 属于 $M-\epsilon I$ 的列空间时方程才有解,此时解是一个特解加上对应特征子空间的任意向量。
备注:内容来源于stack exchange,提问作者ibroketheinternet

