stringtranslate.com

Алгоритм собственных значений Якоби

В числовой линейной алгебре алгоритм собственных значений Якоби представляет собой итеративный метод вычисления собственных значений и собственных векторов вещественной симметричной матрицы (процесс, известный как диагонализация ) . Он назван в честь Карла Густава Якоба Якоби , который впервые предложил этот метод в 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( SR n × n ; out  eR n ; out  ER n × n ) вар  я , k , л , м , состояниеN  s , c , т , п , y , d , рR  indN n  измененоL n функция maxind( kN ) ∈ N  ! индекс наибольшего недиагонального элемента в строке k  m  := k +1 for  i  := k +2 to  n  do  ifS ki │ > │ S kmthen  m  := i  endif  endfor  return  m  endfunc обновление процедуры ( kN ; тR ) ! обновить e k и его статус  y  := e k ; e k  := y + t,  если  изменилось k и ( y = e k ) , то  изменилось k  := false; состояние  := состояние −1 elsif (не изменено k ) и ( ye k ) затем  изменено k  := true; состояние  := состояние +1 endif  endproc процедура Rotate( k , l , i , jN ) ! выполнить вращение Sij , S kl ┐ ┌ ┐┌  S кл │ │ cs ││ 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  ifS k  ind k │ > │ S m  ind mthen  m  := k  endif  endfor  k  := m ; л  := инд м ; п  := S кл  ! вычислить c = cos φ, s = sin φ  y  := ( e le 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 │ │ cs ││ 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  если  km  то поменять местами 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 не нужно вычислять явно, что снижает опасность ошибок округления . Обратите внимание, что с .

Метод Якоби также хорошо подходит для параллелизма.

Рекомендации

  1. ^ Якоби, 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.
  2. ^ Голуб, Г.Х.; ван дер Ворст, HA (2000). «Вычисление собственных значений в 20 веке». Журнал вычислительной и прикладной математики . 123 (1–2): 35–65. дои : 10.1016/S0377-0427(00)00413-1 .
  3. ^ Шёнхаге, А. (1964). «Квадратная конвергенция Якоби-Верфаренса». Numerische Mathematik (на немецком языке). 6 (1): 410–412. дои : 10.1007/BF01386091. MR  0174171. S2CID  118301078.

дальнейшее чтение


Внешние ссылки