我有一个标准形式的广义特征值问题
,
由两个线性稳定性方程的耦合系统的有限差分离散化产生,因此系统很大X和稀疏。我知道是不确定的,并且不是对称的。因为我对系统的稳定性感兴趣,所以我需要找到第一个,比如十个,具有最大实部的特征值。
解决此类问题的首选方法是什么?
我想使用稀疏矩阵的 scipy 线性代数包解决它,但似乎 eigs 函数仅在是肯定的。
任何帮助表示赞赏。
编辑
我发布了一个生成我的问题的最小示例代码。我在示例中使用的矩阵 与我在应用程序中使用的矩阵不同,但它们说明了问题。产生正确答案的工作 Matlab 片段是:
A = diag([-5, -4, -3, -2, -1]);
B = diag([1, 1, -1, 1, 1]);
eigs(A, B, 2, 'LR')
这会产生正确的答案:
>> msolution
ans =
3.0000
-1.0000
这个问题的等效 python 版本是:
import numpy as np
from scipy.sparse.linalg import eigs
A = np.diag([-5, -4, -3, -2, -1]).astype(np.float64)
B = np.diag([1, 1, -1, 1, 1]).astype(np.float64)
vals, vecs = eigs(A, 2, B, which='LR')
print vals
产生明显错误的结果
[ 83.66243085+163.44457559j 83.66243085-163.44457559j]
现在,这可能看起来像 Scipy 中的一个错误,但文档明确要求一个正定矩阵而我这里的那个不是我申请中的那个。