Алгоритм собственных значений Якоби
В числовой линейной алгебре алгоритм собственных значений Якоби представляет собой итерационный метод вычисления собственных значений и собственных векторов вещественной диагонализация симметричной матрицы (процесс, известный как ) . Он назван в честь Карла Густава Якоба Якоби , впервые предложившего метод в 1846 году. [1] но широкое распространение он получил только в 1950-х годах с появлением компьютеров. [2]
Описание [ править ]
Позволять быть симметричной матрицей, и быть матрицей вращения Гивенса . Затем:
симметричен подобен и .
Более того, есть записи:
где и .
С является ортогональным, и имеют ту же норму Фробениуса (сумма квадратов всех компонентов), однако мы можем выбрать такой, что , в этом случае имеет большую сумму квадратов на диагонали:
Установите это значение равным 0 и переставьте:
если
Чтобы оптимизировать этот эффект, Sij должен быть недиагональным элементом с наибольшим абсолютным значением, называемым опорной точкой .
Метод собственных значений Якоби неоднократно выполняет повороты , пока матрица не станет почти диагональной. Тогда элементы на диагонали являются аппроксимациями (действительных) собственных значений S .
Конвергенция [ править ]
Если является поворотным элементом, то по определению для . Позволять обозначают сумму квадратов всех недиагональных элементов . С имеет точно недиагональные элементы, мы имеем или . Сейчас . Это подразумевает или ; то есть последовательность вращений Якоби сходится по крайней мере линейно в множитель к диагональной матрице.
Ряд Вращение Якоби называется разверткой; позволять обозначить результат. Предыдущая оценка дает
- ;
т. е. последовательность прогонов сходится по крайней мере линейно с множителем ≈ .
Однако следующий результат Шенхаге [3] дает локально квадратичную сходимость. Для этого пусть S имеет m различных собственных значений с кратностями и пусть d > 0 — наименьшее расстояние между двумя разными собственными значениями. Давайте назовем несколько
Якоби вращает подметание Шенхаге. Если обозначает результат, тогда
- .
Таким образом, сходимость становится квадратичной, как только
Стоимость [ править ]
Каждое вращение Якоби можно выполнить за O( n поворотный элемент p ) шагов, если известен . Однако поиск p требует проверки всех N ≈ 1/2 2 н 2 недиагональные элементы. Мы также можем уменьшить эту сложность до O( n ), если введем дополнительный индексный массив. с имуществом, которое — индекс наибольшего элемента в строке i , ( i = 1, ..., n текущего S. - 1 ) Тогда индексы точки опоры ( k , l ) должны быть одной из пар . Также обновление индексного массива может быть выполнено со O( n средней сложностью ): во-первых, максимальная запись в обновленных строках k и l может быть найдена за O( n ) шагов. В остальных строках i изменяются только записи в столбцах k и l . Цикл по этим строкам, если не является ни k, ни l , достаточно сравнить старый максимум при к новым записям и обновлениям если необходимо. Если должно быть равно k или l , а соответствующая запись уменьшалась во время обновления, максимум по строке i должен быть найден с нуля со сложностью O( n ). Однако это произойдет в среднем только один раз за оборот. Таким образом, каждое вращение имеет O( n ) и одну развертку O( n 3 ) сложность среднего случая, эквивалентная одному умножению матрицы. Кроме того, должен быть инициализирован до запуска процесса, что можно сделать в n 2 шаги.
Обычно метод Якоби сходится с точностью до числа после небольшого количества проходов. Обратите внимание, что несколько собственных значений уменьшают количество итераций, поскольку .
Алгоритм [ править ]
Следующий алгоритм представляет собой описание метода Якоби в математических обозначениях. Он вычисляет вектор e , содержащий собственные значения, и матрицу E , содержащую соответствующие собственные векторы; то есть, является собственным значением, а столбец ортонормированный собственный вектор для , я знак равно 1, ..., п .
procedure jacobi(S ∈ Rn×n; out e ∈ Rn; out E ∈ Rn×n) var i, k, l, m, state ∈ N s, c, t, p, y, d, r ∈ R ind ∈ Nn changed ∈ Ln function maxind(k ∈ N) ∈ N ! index of largest off-diagonal element in row k m := k+1 for i := k+2 to n do if │Ski│ > │Skm│ then m := i endif endfor return m endfunc procedure update(k ∈ N; t ∈ R) ! update ek and its status y := ek; ek := y+t if changedk and (y=ek) then changedk := false; state := state−1 elsif (not changedk) and (y≠ek) then changedk := true; state := state+1 endif endproc procedure rotate(k,l,i,j ∈ N) ! perform rotation of Sij, Skl ┌ ┐ ┌ ┐┌ ┐ │Skl│ │c −s││Skl│ │ │ := │ ││ │ │Sij│ │s c││Sij│ └ ┘ └ ┘└ ┘ endproc ! init e, E, and arrays ind, changed E := I; state := n for k := 1 to n do indk := maxind(k); ek := Skk; changedk := true endfor while state≠0 do ! next rotation m := 1 ! find index (k,l) of pivot p for k := 2 to n−1 do if │Sk indk│ > │Sm indm│ then m := k endif endfor k := m; l := indm; p := Skl ! calculate c = cos φ, s = sin φ y := (el−ek)/2; d := │y│+√(p2+y2) r := √(p2+d2); c := d/r; s := p/r; t := p2/d if y<0 then s := −s; t := −t endif Skl := 0.0; update(k,−t); update(l,t) ! rotate rows and columns k and l for i := 1 to k−1 do rotate(i,k,i,l) endfor for i := k+1 to l−1 do rotate(k,i,i,l) endfor for i := l+1 to n do rotate(k,i,l,i) endfor ! rotate eigenvectors for i := 1 to n do ┌ ┐ ┌ ┐┌ ┐ │Eik│ │c −s││Eik│ │ │ := │ ││ │ │Eil│ │s c││Eil│ └ ┘ └ ┘└ ┘ endfor ! update all potentially changed indi for i := 1 to n do indi := maxind(i) endfor loop endproc
Примечания [ править ]
логический массив 1. Измененный сохраняет статус каждого собственного значения. Если числовое значение или изменяется во время итерации, соответствующий компонент изменения устанавливается в значение true , в противном случае — в значение false . Целочисленное состояние подсчитывает количество компонентов изменения , имеющих значение true . Итерация прекращается, как только состояние = 0. Это означает, что ни одно из приближений недавно изменило свое значение, поэтому маловероятно, что это произойдет, если итерация продолжится. Здесь предполагается, что операции с плавающей запятой оптимально округляются до ближайшего числа с плавающей запятой.
2. Верхний треугольник матрицы S разрушается, а нижний треугольник и диагональ остаются неизменными. Таким образом, при необходимости можно восстановить S согласно
for k := 1 to n−1 do ! restore matrix S for l := k+1 to n do Skl := Slk endfor endfor
3. Собственные значения не обязательно расположены в порядке убывания. Этого можно добиться с помощью простого алгоритма сортировки.
for k := 1 to n−1 do m := k for l := k+1 to n do if el > em then m := l endif endfor if k ≠ m then swap em,ek swap Em,Ek endif endfor
4. Алгоритм написан с использованием матричной записи (массивы с отсчетом от 1 вместо 0).
5. При реализации алгоритма часть, заданная с помощью матричной записи, должна выполняться одновременно.
6. Эта реализация неправильно учитывает случай, когда одно измерение является независимым подпространством. Например, если задана диагональная матрица, приведенная выше реализация никогда не завершится, поскольку ни одно из собственных значений не изменится. Следовательно, в реальных реализациях для учета этого случая необходимо добавить дополнительную логику.
Пример [ править ]
Позволять
Затем jacobi выдает следующие собственные значения и собственные векторы после 3 проходов (19 итераций):
Приложения для реальных симметричных матриц [ править ]
Когда собственные значения (и собственные векторы) симметричной матрицы известны, выполняются следующие условия: значения легко рассчитываются.
- Сингулярные значения
- Сингулярные значения (квадратной) матрицы являются квадратными корнями из (неотрицательных) собственных значений . В случае симметричной матрицы у нас есть , следовательно, сингулярные значения являются абсолютными значениями собственных значений
- 2-норма и спектральный радиус
- 2-норма матрицы A — это норма, основанная на евклидовой векторной норме; то есть наибольшее значение когда x проходит через все векторы с . Это самое большое единственное значение . В случае симметричной матрицы это наибольшее абсолютное значение ее собственных векторов и, следовательно, равное ее спектральному радиусу.
- Номер условия
- Число обусловленности неособой матрицы определяется как . В случае симметричной матрицы это абсолютное значение частного наибольшего и наименьшего собственного значения. Матрицы с большими числами обусловленности могут привести к численно нестабильным результатам: небольшое возмущение может привести к большим ошибкам. Матрицы Гильберта — самые известные плохо обусловленные матрицы. Например, матрица Гильберта четвертого порядка имеет условие 15514, а для 8-го порядка — 2,7 × 10. 8 .
- Классифицировать
- Матрица имеет ранг если у него есть столбцы, которые линейно независимы, в то время как остальные столбцы линейно зависят от них. Эквивалентно, это размерность диапазона . Кроме того, это количество ненулевых сингулярных значений.
- В случае симметричной матрицы r — это количество ненулевых собственных значений. К сожалению, из-за ошибок округления численные аппроксимации нулевых собственных значений могут не быть нулевыми (также может случиться так, что численная аппроксимация равна нулю, а истинное значение - нет). ранг можно вычислить, только Таким образом, числовой приняв решение, какие из собственных значений достаточно близки к нулю.
- Псевдообратный
- Псевдообратная матрица это уникальная матрица для чего и симметричны и для которых держит. Если неособа, то .
- При вызове процедуры jacobi (S, e, E) соотношение где Diag( e ) обозначает диагональную матрицу с вектором e на диагонали. Позволять обозначим вектор, где заменяется на если и на 0, если (численно близко) к нулю. Поскольку матрица E ортогональна, отсюда следует, что псевдообратная матрица S определяется формулой .
- Решение наименьших квадратов
- Если матрица не имеет полного ранга, решения линейной системы может не быть . Однако можно найти вектор x, для которого является минимальным. Решение . В случае симметричной матрицы S , как и раньше, имеем .
- Матричная экспонента
- От можно найти где опыт вектор, где заменяется на . Таким же образом, может быть вычислена очевидным образом для любой (аналитической) функции .
- Линейные дифференциальные уравнения
- Дифференциальное уравнение есть решение . Для симметричной матрицы , отсюда следует, что . Если это расширение по собственным векторам , затем .
- Позволять быть векторным пространством, натянутым собственными векторами которые соответствуют отрицательному собственному значению и аналогично для положительных собственных значений. Если затем ; то есть точка равновесия 0 привлекательна для . Если затем ; то есть 0 отталкивает . и называются устойчивыми и неустойчивыми многообразиями для . Если имеет компоненты в обоих многообразиях, то один компонент притягивается, а другой отталкивается. Следовательно подходы как .
Реализация Джулии [ править ]
Следующий код представляет собой прямую реализацию математического описания алгоритма собственных значений Якоби на языке программирования Julia .
using LinearAlgebra, Test
function find_pivot(Sprime)
n = size(Sprime,1)
pivot_i = pivot_j = 0
pivot = 0.0
for j = 1:n
for i = 1:(j-1)
if abs(Sprime[i,j]) > pivot
pivot_i = i
pivot_j = j
pivot = abs(Sprime[i,j])
end
end
end
return (pivot_i, pivot_j, pivot)
end
# in practice one should not instantiate explicitly the Givens rotation matrix
function givens_rotation_matrix(n,i,j,θ)
G = Matrix{Float64}(I,(n,n))
G[i,i] = G[j,j] = cos(θ)
G[i,j] = sin(θ)
G[j,i] = -sin(θ)
return G
end
# S is a symmetric n by n matrix
n = 4
sqrtS = randn(n,n);
S = sqrtS*sqrtS';
# the largest allowed off-diagonal element of U' * S * U
# where U are the eigenvectors
tol = 1e-14
Sprime = copy(S)
U = Matrix{Float64}(I,(n,n))
while true
(pivot_i, pivot_j, pivot) = find_pivot(Sprime)
if pivot < tol
break
end
θ = atan(2*Sprime[pivot_i,pivot_j]/(Sprime[pivot_j,pivot_j] - Sprime[pivot_i,pivot_i] )) / 2
G = givens_rotation_matrix(n,pivot_i,pivot_j,θ)
# update Sprime and U
Sprime .= G'*Sprime*G
U .= U * G
end
# Sprime is now (almost) a diagonal matrix
# extract eigenvalues
λ = diag(Sprime)
# sort eigenvalues (and corresponding eigenvectors U) by increasing values
i = sortperm(λ)
λ = λ[i]
U = U[:,i]
# S should be equal to U * diagm(λ) * U'
@test S ≈ U * diagm(λ) * U'
Обобщения [ править ]
Метод Якоби был обобщен на комплексные эрмитовы матрицы , общие несимметричные вещественные и комплексные матрицы, а также на блочные матрицы.
Поскольку сингулярные значения вещественной матрицы являются квадратными корнями собственных значений симметричной матрицы его также можно использовать для расчета этих значений. Для этого случая метод модифицируется таким образом, что S не нужно вычислять явно, что снижает опасность ошибок округления . Обратите внимание, что с .
Метод Якоби также хорошо подходит для параллелизма.
Ссылки [ править ]
- ^ Якоби, CGJ (1846 г.). «О простой процедуре численного решения уравнений, возникающих в теории вековых возмущений» . Журнал Крелля (на немецком языке). 1846 (30): 51–94. дои : 10.1515/crll.1846.30.51 . S2CID 199546177 .
- ^ Голуб, Г.Х.; ван дер Ворст, HA (2000). «Вычисление собственных значений в 20 веке» . Журнал вычислительной и прикладной математики . 123 (1–2): 35–65. дои : 10.1016/S0377-0427(00)00413-1 .
- ^ Шенхаге, А. (1964). «О квадратичной сходимости метода Якоби». Численная математика (на немецком языке). 6 (1): 410–412. дои : 10.1007/BF01386091 . MR0174171 . S2CID 118301078 .
Дальнейшее чтение [ править ]
- Пресс, WH; Теукольский, С.А.; Феттерлинг, WT; Фланнери, Б.П. (2007), «Раздел 11.1. Преобразования Якоби симметричной матрицы» , Численные рецепты: искусство научных вычислений (3-е изд.), Нью-Йорк: издательство Кембриджского университета, ISBN 978-0-521-88068-8
- Рутисхаузер, Х. (1966). «Серия справочников по линейной алгебре: метод Якоби для вещественных симметричных матриц». Численная математика . 9 (1): 1–10. дои : 10.1007/BF02165223 . МР1553948 . S2CID 120520713 .
- Самех, А.Х. (1971). «О Якоби и якобиподобных алгоритмах для параллельного компьютера» . Математика вычислений . 25 (115): 579–590. дои : 10.1090/s0025-5718-1971-0297131-6 . JSTOR 2005221 . МР 0297131 .
- Шрофф, Гаутам М. (1991). «Параллельный алгоритм для собственных значений и собственных векторов общей комплексной матрицы». Нумерическая математика . 58 (1): 779–805. CiteSeerX 10.1.1.134.3566 . дои : 10.1007/BF01385654 . МР 1098865 . S2CID 13904356 .
- Веселич, К. (1979). «Об одном классе якобиподобных процедур диагонализации произвольных вещественных матриц». Нумерическая математика . 33 (2): 157–172. дои : 10.1007/BF01399551 . МР 0549446 . S2CID 119919630 .
- Веселич, К.; Венцель, HJ (1979). «Квадратично сходящийся метод Якоби для вещественных матриц с комплексными собственными значениями». Нумерическая математика . 33 (4): 425–435. дои : 10.1007/BF01399324 . МР 0553351 . S2CID 119554420 .
- Юсеф Саад: «Возвращаясь к (блочному) методу вращения подпространства Якоби для симметричной проблемы собственных значений», Numerical Algorithms, vol.92 (2023), стр.917-944. https://doi.org/10.1007/s11075-022-01377-w .