Обратный степенной метод
Приближенно решает задачу на нахождение собственных значений , где — это общее линейное отображение. По умолчанию сходится к доминирующей собственной паре , при которой является наибольшим. Для определения конкретного собственного значения вблизи shift
в комплексной плоскости могут быть применены сдвиг и инвертирование.
Использование
#
IterativeSolvers.powm!
— Function
powm!(B, x; shift = zero(eltype(B)), inverse::Bool = false, kwargs...) -> λ, x, [history]
По умолчанию находит приближенную собственную пару (λ, x)
для B
, где |λ|
является наибольшим.
Аргументы
-
B
: линейное отображение. См. примечание ниже. -
x
: нормализованное начальное предположение. При необходимости используйте арифметику комплексных чисел.
Ключевые слова
-
tol::Real = eps(real(eltype(B))) * size(B, 2) ^ 3
: допуск остановки для нормы невязки; -
maxiter::Integer = size(B,2)
: максимальное количество итераций; -
log::Bool
: отслеживание нормы невязки в каждой итерации; -
verbose::Bool
: вывод информации о сходимости во время итераций.
Применяя сдвиг и инвертирование к с |
Возвращаемые значения
если log
имеет значение false
-
λ::Number
приближенное собственное значение, вычисляемое как отношение Релея; -
x::Vector
приближенный собственный вектор;
если log
имеет значение true
-
λ::Number
: приближенное собственное значение, вычисляемое как отношение Релея; -
x::Vector
: приближенный собственный вектор; -
history
: история сходимости.
Ключи ConvergenceHistory
-
:tol
=>::Real
: допуск остановки; -
:resnom
=>::Vector
: норма невязки в каждой итерации.
Примеры
using LinearMaps
σ = 1.0 + 1.3im
A = rand(ComplexF64, 50, 50)
F = lu(A - σ * I)
Fmap = LinearMap{ComplexF64}((y, x) -> ldiv!(y, F, x), 50, ismutating = true)
λ, x = powm(Fmap, inverse = true, shift = σ, tol = 1e-4, maxiter = 200)
#
IterativeSolvers.invpowm
— Function
invpowm(B; shift = σ, kwargs...) -> λ, x, [history]
Находит приближенную собственную пару (λ, x)
для вблизи shift
, где B
является линейным отображением с эффектом B * v = inv(A - σI) * v
.
Метод вызывает powm!(B, x0; inverse = true, shift = σ)
с x0
в виде случайного комплексного единичного вектора. См. описание powm!
.
Примеры
using LinearMaps
σ = 1.0 + 1.3im
A = rand(ComplexF64, 50, 50)
F = lu(A - σ * I)
Fmap = LinearMap{ComplexF64}((y, x) -> ldiv!(y, F, x), 50, ismutating = true)
λ, x = invpowm(Fmap, shift = σ, tol = 1e-4, maxiter = 200)
#
IterativeSolvers.invpowm!
— Function
invpowm!(B, x0; shift = σ, kwargs...) -> λ, x, [history]
Находит приближенную собственную пару (λ, x)
для вблизи shift
, где B
является линейным отображением с эффектом B * v = inv(A - σI) * v
.
Метод вызывает powm!(B, x0; inverse = true, shift = σ)
. См. описание powm!
.