是否可以将 Eigtool 用于广义问题伪谱?

计算科学 特征值
2021-12-14 14:41:02

我想将 Trefethen 教授的 Eigtool用于伪谱,但我有一个广义特征值问题要解决:

λMx=Kx.
似乎 Eigtool 只接受一个矩阵作为输入。我的机箱也可以使用 Eigtool 吗?即有两个矩阵作为输入?另外,我的矩阵很大,但很稀疏,所以我认为不可能反转它们。

就我而言M是单数的,不可逆的。

2个回答

Mark Embree 教授热情地回复了我的电子邮件。我报告他建议做的事情:

“对于大规模的问题,这是我通常推荐的(注意,这并没有对能源规范做出特殊规定):

  • 使用迭代方法(如 MATLAB 中的“eigs”)计算 inv(K)*M 的 d 维主导不变子空间。假设 V 的列跨越这个子空间(通常,V 的列将是与 inv(K)*M 的最大特征值相关联的特征向量,希望对应铅笔的最右边的特征值 (K,M))。

  • 让 U 的列形成 V 的正交基,例如,在 MATLAB 中,U = orth(V)。

  • 定义 Ginv = inv(U'*inv(K) M U)。这将是一个 d-by-d 矩阵。

  • 计算 Ginv 的伪谱。这些伪谱将包含在全尺寸问题的伪谱中,如果您将 V 跨越与铅笔的所有有限特征值相关联的不变子空间,则会出现该问题。尝试使用足够的维度“d”值,以确保伪光谱已经收敛在光谱的最右边。

[...] 通常我将 K 和 M 存储为稀疏矩阵,然后使用 K\M 来计算 inv(K)*M。”

就我而言,它似乎有效。我希望它对其他人也有用。

也许,你设置λx=M1Kx?,那么如果我们需要在 Eigtool 中实现矩阵-向量积:

y=M1Kv,v是任何给定的向量。

然后你可以通过两个步骤来完成:

(1) 计算矩阵-向量积:u=Kv; (2) 求解线性系统My=u.

我认为您可以在 Eigtool 中修改一些行。