【问题标题】:Matlab's eigs not converging unless number of eigenvalues computed is large除非计算的特征值数量很大,否则 Matlab eigs 不会收敛
【发布时间】:2017-10-18 18:59:30
【问题描述】:

我正在尝试使用以下运动方程计算阻尼结构的特征值 λ (lambda):

(λ²M + λC + K) x = 0 ,

其中 MCK 是稀疏矩阵。使用 MATLAB 的 polyeig 函数有效,但我想去更大的系统并利用我的矩阵的稀疏性。我已经使用状态空间线性化来获得广义特征值问题,如下所示:

(A - λB) z = 0,

A = [K , 0 ; 0,-M],

B = [-C , -M ; -M, 0],

z = [x ; λx]

用 MATLAB 的 eigs 函数解决这个问题:

lambda = eigs(A,B,10,'sm')

产生以下输出:

lambda =
   1.0e+03 *
  -0.2518 - 1.3138i
  -0.2518 + 1.3138i
  -0.4690 - 1.7360i
  -0.4690 + 1.7360i
  -0.4690 - 1.7360i
  -0.4690 + 1.7360i
  -0.5387 - 1.8352i
  -0.5387 + 1.8352i
      NaN +    NaNi
      NaN +    NaNi

前八个特征值是正确的,但似乎后两个特征值无法收敛。增加 Lanczos 基向量的数量似乎并不能改善问题。

然而,奇怪的是,增加计算的特征值的数量 (k) 允许越来越多的特征值收敛:

  • k = 10: 收敛的 lambda 数 = 8
  • k = 20: 收敛的 lambda 数 = 8
  • k = 50: 收敛的 lambda 数 = 8
  • k = 100: 收敛的 lambda 数 = 20
  • k = 120: 收敛的 lambda 数 = 80
  • k = 150: 收敛的 lambda 数 = 150

还值得一提的是,许多不与k 的较低值收敛的特征值似乎是退化的或至少是非常紧密的间隔。

我想知道是否有人能想出对此行为的解释?如果是这样,有什么方法可以使所有特征值收敛而不使k 非常大?谢谢!

【问题讨论】:

  • 有趣的问题和高度连贯的问题;我希望每个人都这么好!欢迎来到 Stack Overflow,赞一个:)
  • MCK 与对称有多接近?
  • 矩阵都是对称的(理论上和数值上)。
  • @DimitriK 这个问题还没有解决和相关吗?我正在考虑在这个问题上发布一个小赏金,但前提是这对你有用。并且以防您在赏金持续期间能够在一周内回复查询。
  • 很抱歉答案不完整,但我还不能发表评论。您的矩阵 A 和 B 似乎是对称的,因此根据this,您的特征值应该是实数,但您计算的特征值很复杂。你能上传你的代码和矩阵吗?

标签: matlab math eigenvalue


【解决方案1】:

这是旧的,但仍未得到答复。没有实际的矩阵很难确定。这是我最好的猜测:

eigs 调用 ARPACK 例程。 ARPACK 利用迭代方法 (Arnoldi) 收敛到,例如,具有最小幅度的特征值(选项sm)。对于任何迭代方法,用户可以在迭代过程停止之前指定收敛ToleranceMaxIterations等选项。 NaNs 表示在达到MaxIterations 时尚未收敛的特征值。

Arnoldi 方法的一个重要选项是用于逼近解的 Krylov 子空间的维度。这可以通过eigs 中的选项SubspaceDimension 指定。默认值为 max(2*k,20),因此增加k 有效地增加了 Krylov 子空间的维度。如果您的问题需要相对较大的 Krylov 子空间来将一些特征值收敛到所需的 Tolerance,这可以解释为什么增加 k 会产生更多特征值的收敛。

要验证我的猜测是否正确,您可以使用限制较少的 Tolerancee-6 可能就足够了?)或增加 SubspaceDimension 的值,同时保持 k 不变。

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2012-11-08
    相关资源
    最近更新 更多