Eigs Matlab не сходятся, если количество вычисленных собственных значений не велико

Я пытаюсь вычислить собственные значения λ (lambda) демпфированной конструкции со следующими уравнениями движения:

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

где M, C и K — разреженные матрицы. Использование функции polyeig MATLAB работает, но я хотел бы перейти к более крупным системам и воспользоваться преимуществами разреженности моих матриц. Я использовал линеаризацию пространства состояний для получения обобщенной задачи на собственные значения следующим образом:

(A - λB) z = 0,

с

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

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

z = [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

Первые восемь собственных значений верны, но кажется, что последние два собственных значения не смогли сойтись. Увеличение числа базисных векторов Ланцоша, по-видимому, не решает проблему.

Однако, как ни странно, увеличение числа вычисленных собственных значений (k) позволяет сходиться все большему количеству собственных значений:

  • k = 10: Количество сходящихся лямбд = 8
  • k = 20: Количество сходящихся лямбд = 8
  • k = 50: Количество сходящихся лямбд = 8
  • k = 100: Количество сходящихся лямбд = 20
  • k = 120: Количество сходящихся лямбд = 80
  • k = 150: Количество сошедшихся лямбд = 150

Также стоит упомянуть, что многие из собственных значений, которые не сходятся с более низкими значениями k, кажутся вырожденными или, по крайней мере, очень близко расположенными друг к другу.

Мне было интересно, может ли кто-нибудь придумать объяснение такому поведению? Если да, то есть ли способ заставить все собственные значения сходиться, не делая k очень большим? Благодарю вас!


person Dimitri K    schedule 18.05.2017    source источник
comment
Интересная проблема и очень последовательный вопрос; Я хочу, чтобы каждый из них был таким хорошо сформированным! Добро пожаловать в Stack Overflow и слава :)   -  person Andras Deak    schedule 18.05.2017
comment
Насколько близки к симметричным M, C и K?   -  person gnovice    schedule 18.05.2017
comment
Все матрицы симметричны (как теоретически, так и численно).   -  person Dimitri K    schedule 18.05.2017
comment
@DimitriK этот вопрос все еще не решен и актуален? Я думаю опубликовать небольшую награду за этот вопрос, но только в том случае, если это будет полезно для вас. И в случае, если вы сможете отвечать на запросы в течение недели, пока длится щедрость.   -  person Andras Deak    schedule 03.06.2017
comment
Извините за неполный ответ, но я пока не могу комментировать. Ваши матрицы A и B кажутся симметричными, поэтому, согласно этому, ваш собственные значения должны быть реальными, но те, которые вы вычислили, являются сложными. Не могли бы вы загрузить свой код и матрицы?   -  person multigrid101    schedule 23.12.2017
comment
Согласен, сложно сказать, что происходит, не глядя на матрицы. В любом случае, этот вопрос очень интересен!   -  person Sergio    schedule 28.11.2018
comment
Состояние бесконечности обычно бывает, когда у вас ноль записей. Вы можете напрямую решить эту часть, чтобы получить результат. Однако это грязно, если вы не справитесь с этим автоматически.   -  person Jay-Pi    schedule 01.03.2020
comment
Извините за плохой вопрос, но этот инструмент удовлетворяет ваши потребности?   -  person Jay-Pi    schedule 01.03.2020
comment
@ multigrid101 multigrid101 я уже видел такую ​​проблему, и в этом случае матрицы были сложными и симметричными. Собственность, которую трудно использовать.   -  person Thijs Steel    schedule 18.03.2020
comment
@DimitriK Я знаю, что производительность алгоритма QZ в LAPACK (и, следовательно, метода polyeig) довольно низкая. Если B обратимо, удовлетворит ли вас вычисление плотной собственной композиции линеаризованного уравнения?   -  person Thijs Steel    schedule 18.03.2020


Ответы (1)


Это старо, но до сих пор без ответа. Без фактических матриц трудно быть уверенным. Это мое лучшее предположение:

eigs вызывает подпрограммы ARPACK. ARPACK использует итерационные методы (Арнольди) для сходимости, например, к собственным значениям с наименьшей величиной (опция sm). Как и для любого итеративного метода, пользователь может указать такие параметры, как сходимость Tolerance и MaxIterations, до остановки итеративного процесса. NaNs указывают собственные значения, которые не сошлись при достижении MaxIterations.

Важным параметром для методов Арнольди является размерность подпространства Крылова, используемая для аппроксимации решений. Это можно указать с помощью опции SubspaceDimension в eigs. Значение по умолчанию равно max(2*k,20), поэтому увеличение k эффективно увеличивает размерность подпространства Крылова. Если ваша задача требует относительно большого подпространства Крылова для сходимости некоторых собственных значений к желаемому Tolerance, это может объяснить, почему увеличение k приводит к сходимости большего числа собственных значений.

Чтобы проверить, верна ли моя догадка, вы можете либо иметь менее ограничительное Tolerance (e-6 может быть достаточно?), либо увеличить значение SubspaceDimension, оставив k постоянным.

person Luk    schedule 02.02.2021