В числовой линейной алгебре алгоритм собственных значений Якоби представляет собой итеративный метод вычисления собственных значений и собственных векторов вещественной симметричной матрицы (процесс, известный как диагонализация ) . Он назван в честь Карла Густава Якоба Якоби , который впервые предложил этот метод в 1846 году, [1] но стал широко использоваться только в 1950-х годах с появлением компьютеров. [2]
Описание
Пусть – симметричная матрица, а – матрица вращения Гивенса . Затем:
симметричен и подобен .
Кроме того, есть записи:
где и .
Поскольку он ортогонален и имеет ту же норму Фробениуса (сумма квадратного корня квадратов всех компонентов), однако мы можем выбрать такой, что , и в этом случае имеет большую сумму квадратов на диагонали:
Установите это значение равным 0 и переставьте:
если
Чтобы оптимизировать этот эффект, Sij должен быть недиагональным элементом с наибольшим абсолютным значением, называемым опорной точкой .
Метод собственных значений Якоби неоднократно выполняет повороты , пока матрица не станет почти диагональной. Тогда элементы на диагонали являются аппроксимациями (действительных) собственных значений S .
Конвергенция
Если это опорный элемент, то по определению для . Пусть обозначает сумму квадратов всех недиагональных элементов . Поскольку имеет ровно недиагональные элементы, мы имеем или . Сейчас . Это подразумевает или ; то есть последовательность вращений Якоби сходится по крайней мере линейно с коэффициентом к диагональной матрице.
Ряд вращений Якоби называется разверткой; обозначим результат. Предыдущая оценка дает
- ;
т. е. последовательность прогонов сходится по крайней мере линейно с множителем ≈ .
Однако следующий результат Шенхаге [3] дает локально квадратичную сходимость. Для этого пусть S имеет m различных собственных значений с кратностями и пусть d > 0 — наименьшее расстояние между двумя разными собственными значениями. Давайте назовем несколько
Якоби вращает ход Шёнхаге. Если обозначает результат, то
- .
Таким образом, сходимость становится квадратичной, как только
Расходы
Каждое вращение Якоби можно выполнить за O( n ) шагов, если известен поворотный элемент p . Однако поиск p требует проверки всех N ≈ 1/2 n 2 недиагональных элемента. Мы также можем уменьшить это до сложности O( n ), если введем дополнительный массив индексов со свойством, которое является индексом самого большого элемента в строке i ( i = 1, ..., n − 1) текущего S. . Тогда индексы пивота ( k , l ) должны быть одной из пар . Также обновление индексного массива может быть выполнено со средней сложностью O( n ): во-первых, максимальная запись в обновленных строках k и l может быть найдена за O( n ) шагов. В остальных строках i изменяются только записи в столбцах k и l . При циклическом просмотре этих строк, если нет ни k , ни l , достаточно сравнить старый максимум at с новыми записями и при необходимости обновить. Если должно быть равно k или l и соответствующая запись уменьшилась во время обновления, максимум по строке i необходимо найти с нуля со сложностью O( n ). Однако это произойдет в среднем только один раз за оборот. Таким образом, каждое вращение имеет сложность среднего случая O( n ) и одну прогонку O( n 3 ), что эквивалентно одному умножению матрицы. Кроме того , перед запуском процесса необходимо инициализировать его , что можно сделать за n 2 шагов.
Обычно метод Якоби сходится с точностью до числа после небольшого количества проходов. Обратите внимание, что несколько собственных значений уменьшают количество итераций, поскольку .
Алгоритм
Следующий алгоритм представляет собой описание метода Якоби в математических обозначениях. Он вычисляет вектор e , содержащий собственные значения, и матрицу E , содержащую соответствующие собственные векторы; то есть является собственным значением, а столбец — ортонормированным собственным вектором для , i = 1, ..., n .
процедура jacobi( S ∈ R n × n ; out e ∈ R n ; out E ∈ R n × n ) вар я , k , л , м , состояние ∈ N s , c , т , п , y , d , р ∈ R ind ∈ N n изменено ∈ L n функция maxind( k ∈ N ) ∈ N ! индекс наибольшего недиагонального элемента в строке k m := k +1 for i := k +2 to n do if │ S ki │ > │ S km │ then m := i endif endfor return m endfunc обновление процедуры ( k ∈ N ; т ∈ R ) ! обновить e k и его статус y := e k ; e k := y + t, если изменилось k и ( y = e k ) , то изменилось k := false; состояние := состояние −1 elsif (не изменено k ) и ( y ≠ e k ) затем изменено k := true; состояние := состояние +1 endif endproc процедура Rotate( k , l , i , j ∈ N ) ! выполнить вращение Sij , S kl ┌ ┐ ┌ ┐┌ ┐ │ S кл │ │ c − s ││ S кл │ │ │ := │ ││ │ │ S ij │ │ s c ││ S ij │ └ ┘ └ ┘└ ┘ endproc ! init e, E и массивы ind, изменены E := I ; состояние := n for k := от 1 до n do ind k := maxind( k ); е к := S kk ; изменено k := true endfor while state ≠0 do ! следующий оборот m := 1 ! найти индекс (k,l) опорной точки p для k := 2 до n −1 do if │ S k ind k │ > │ S m ind m │ then m := k endif endfor k := m ; л := инд м ; п := S кл ! вычислить c = cos φ, s = sin φ y := ( e l − e k )/2; d := │ y │+√( п 2 + y 2 ) р := √( п 2 + d 2 ); с := д / р ; с := п / р ; t := p 2 / d, если y <0 , то s := − s ; t := − t endif S kl := 0,0; обновление( к ,- т ); обновление( л , т ) ! повернуть строки и столбцы k и l для i := 1 до k −1 do Rotate( i , k , i , l ) endfor for i := k +1 до l −1 do Rotate( k , i , i , l ) endfor for i := l +1 to n do Rotate( k , i , l , i ) endfor ! повернуть собственные векторы для i := 1 в n do ┌ ┐ ┌ ┐┌ ┐ │ E ik │ │ c − s ││ E ik │ │ │ := │ ││ │ │ Э иль │ │ s c ││ Э иль │ └ ┘ └ ┘└ ┘ конец для ! обновить все потенциально измененные ind i for i := 1 до n do ind i := maxind( i ) endfor цикла endproc
Примечания
1. Измененный логический массив сохраняет статус каждого собственного значения. Если числовое значение или изменяется во время итерации, соответствующему компоненту изменено присваивается значение true , в противном случае — значение false . Целочисленное состояние подсчитывает количество компонентов изменения , имеющих значение true . Итерация прекращается, как только состояние = 0. Это означает, что ни одно из приближений в последнее время не изменило свое значение, и поэтому маловероятно, что это произойдет, если итерация продолжится. Здесь предполагается, что операции с плавающей запятой оптимально округляются до ближайшего числа с плавающей запятой.
2. Верхний треугольник матрицы S разрушается, а нижний треугольник и диагональ остаются неизменными. Таким образом, при необходимости можно восстановить S согласно
для k := 1 до n −1 do ! восстановить матрицу S для l := k +1 до n do S kl := S lk endfor endfor
3. Собственные значения не обязательно расположены в порядке убывания. Этого можно добиться с помощью простого алгоритма сортировки.
for k := 1 to n −1 do m := k for l := k +1 to n do if e l > e m then m := l endif endfor если k ≠ m то поменять местами e m , e k поменять местами E m , E k 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 на диагонали. Обозначим вектор, где заменяется на if и на 0, если (численно близко) к нулю. Поскольку матрица E ортогональна, отсюда следует, что псевдообратная матрица S определяется выражением .
- Решение методом наименьших квадратов
- Если матрица не имеет полного ранга, решения линейной системы может не быть . Однако можно найти вектор x, для которого он минимален. Решение такое . В случае симметричной матрицы S, как и раньше, имеем .
- Матричная экспонента
- Отсюда можно найти , где exp — вектор, где заменяется на . Точно так же очевидным образом можно вычислить любую (аналитическую) функцию .
- Линейные дифференциальные уравнения
- Дифференциальное уравнение имеет решение . Для симметричной матрицы отсюда следует, что . Если – разложение по собственным векторам , то .
- Пусть - векторное пространство, натянутое на собственные векторы, которые соответствуют отрицательному собственному значению и аналогично положительным собственным значениям. Если тогда ; то есть точка равновесия 0 притягивает к . Если тогда ; то есть 0 отталкивает . и называются устойчивыми и неустойчивыми многообразиями для . Если компоненты есть в обоих многообразиях, то один компонент притягивается, а другой отталкивается. Следовательно подходит как .
Реализация Юлии
Следующий код представляет собой прямую реализацию математического описания алгоритма собственных значений Якоби на языке программирования Julia .
используя LinearAlgebra , Тест функция find_pivot ( Sprime ) n = размер ( 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 ) конец # на практике не следует явно создавать экземпляр матричной функции вращения Гивенса . ] = потому что ( θ ) грамм [ я , j ] = грех ( θ ) грамм [ j , я ] = - грех ( θ ) вернуть G конец # S — симметричная матрица размера n на n n = 4 sqrtS = randn ( n , n ); S = sqrtS * sqrtS ' ; # наибольший разрешенный недиагональный элемент U' * S * U # где U — собственные векторы tol = 1e-14 Sprime = копия ( S ) U = Матрица { Float64 } ( I , ( n , n )) в то время как true ( Pivot_i , Pivot_j , Pivot ) = find_pivot ( Sprime ) если точка поворота < tol конец разрыва θ = atan ( 2 * Спрайм [ Pivot_i , Pivot_j ] / ( Спрайм [ Pivot_j , Pivot_j ] - Спрайм [ Pivot_i , Pivot_i ] )) / 2 G = заданная_матрица_вращения ( n , Pivot_i , Pivot_j , θ ) # обновляем Sprime и U Sprime .= G '* Sprime * G U .= U * G end # Sprime теперь (почти) диагональная матрица # извлекаем собственные значения λ = diag ( Sprime ) # сортируем собственные значения (и соответствующие собственные векторы U) по возрастанию значений i = sortperm ( λ ) λ = λ [ i ] U = U [ : , i ] # S должно быть равно U *diagm(λ) * U' @test S ≈ U * diagm ( λ ) * U '
Обобщения
Метод Якоби был обобщен на комплексные эрмитовы матрицы , общие несимметричные вещественные и комплексные матрицы, а также на блочные матрицы.
Поскольку сингулярные значения вещественной матрицы являются квадратными корнями собственных значений симметричной матрицы, их также можно использовать для расчета этих значений. Для этого случая метод модифицируется таким образом, что S не нужно вычислять явно, что снижает опасность ошибок округления . Обратите внимание, что с .
Метод Якоби также хорошо подходит для параллелизма.
Рекомендации
- ^ Якоби, CGJ (1846). «Über ein leichtes Verfahren, die in der Theorie der Säkularstörungen vorkommenden Gleichungen numerisch aufzulösen». Журнал Крелля (на немецком языке). 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). «Квадратная конвергенция Якоби-Верфаренса». Numerische Mathematik (на немецком языке). 6 (1): 410–412. дои : 10.1007/BF01386091. MR 0174171. S2CID 118301078.
дальнейшее чтение
- Пресс, WH; Теукольский, С.А.; Феттерлинг, WT; Фланнери, Б.П. (2007), «Раздел 11.1. Преобразования Якоби симметричной матрицы», Численные рецепты: искусство научных вычислений (3-е изд.), Нью-Йорк: издательство Кембриджского университета, ISBN 978-0-521-88068-8
- Рутисхаузер, Х. (1966). «Серия справочников по линейной алгебре: метод Якоби для вещественных симметричных матриц». Нумерическая математика . 9 (1): 1–10. дои : 10.1007/BF02165223. MR 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. MR 1098865. S2CID 13904356.
- Веселич, К. (1979). «Об одном классе якобиподобных процедур диагонализации произвольных вещественных матриц». Нумерическая математика . 33 (2): 157–172. дои : 10.1007/BF01399551. MR 0549446. S2CID 119919630.
- Веселич, К.; Венцель, HJ (1979). «Квадратично сходящийся метод Якоби для вещественных матриц с комплексными собственными значениями». Нумерическая математика . 33 (4): 425–435. дои : 10.1007/BF01399324. MR 0553351. S2CID 119554420.
- Юсеф Саад: «Возвращаясь к (блочному) методу вращения подпространства Якоби для симметричной проблемы собственных значений», Numerical Algorithms, vol.92 (2023), стр.917-944. https://doi.org/10.1007/s11075-022-01377-w.
Внешние ссылки
- Реализация в Matlab алгоритма Якоби, позволяющая избежать тригонометрических функций
- реализация С++11