Я пытаюсь вычислить собственные значения λ (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
: Количество сходящихся лямбд = 8k = 20
: Количество сходящихся лямбд = 8k = 50
: Количество сходящихся лямбд = 8k = 100
: Количество сходящихся лямбд = 20k = 120
: Количество сходящихся лямбд = 80k = 150
: Количество сошедшихся лямбд = 150
Также стоит упомянуть, что многие из собственных значений, которые не сходятся с более низкими значениями k
, кажутся вырожденными или, по крайней мере, очень близко расположенными друг к другу.
Мне было интересно, может ли кто-нибудь придумать объяснение такому поведению? Если да, то есть ли способ заставить все собственные значения сходиться, не делая k
очень большим? Благодарю вас!
M
,C
иK
? - person gnovice   schedule 18.05.2017