Jump to content

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

(Перенаправлено из трансформации Якоби )

В числовой линейной алгебре алгоритм собственных значений Якоби представляет собой итеративный метод вычисления собственных значений и собственных векторов вещественной диагонализация симметричной матрицы (процесс, известный как ) . Он назван в честь Карла Густава Якоба Якоби , впервые предложившего метод в 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 текущего 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, ..., п .

процедура  jacobi(  S  R n × n ;  out   e  R н ;  out   E  R n × n )   вар      я  ,  k  ,  л  ,  м  ,  состояние  N      s  ,  c  ,  т  ,  п  ,  y  ,  d  ,  р  R      ind  N н     изменилось  L н   функция  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    процедура  update(  k  N  ;  t  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  ) !  выполнить вращение S  ij  , S  kl    ┐ ┌ ┐┌    ┐    │  S  кл  │ │  c  s  ││  S  кл  │    │    │ := │ ││    │    │  S  ij  │ │  s     c  ││  S  ij  │    └    ┘ └ ┘└   конечный процесс   !  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  │+√(  p 2 +  и 2 )     р  := √(  р 2 +  д 2 );  с  :=  д  /  р  ;  с  :=  п  /  р  ;  т  :=  р 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  до   n  −1  do      m  :=  k      for   l  :=  k  +1  до   n   do          if   e  l  >  e  m   then              m  :=  l          endif      endfor      если   k  m   тогда         поменять  e  m  местами  и  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 на диагонали. Позволять обозначим вектор, где заменяется на если и на 0, если (численно близко) к нулю. Поскольку матрица E ортогональна, отсюда следует, что псевдообратная матрица S определяется формулой .
Решение методом наименьших квадратов
Если матрица не имеет полного ранга, решения линейной системы может не быть . Однако можно найти вектор x, для которого является минимальным. Решение . В случае симметричной матрицы S , как и раньше, имеем .
Матричная экспонента
От можно найти где опыт вектор, где заменяется на . Таким же образом, может быть вычислена очевидным образом для любой (аналитической) функции .
Линейные дифференциальные уравнения
Дифференциальное уравнение есть решение . Для симметричной матрицы , отсюда следует, что . Если это расширение по собственным векторам , затем .
Позволять быть векторным пространством, натянутым собственными векторами которые соответствуют отрицательному собственному значению и аналогично для положительных собственных значений. Если затем ; то есть точка равновесия 0 привлекательна для . Если затем ; то есть 0 отталкивает . и называются устойчивыми и неустойчивыми многообразиями для . Если имеет компоненты в обоих многообразиях, то один компонент притягивается, а другой отталкивается. Следовательно подходы как .

Реализация Джулии

[ редактировать ]

Следующий код представляет собой прямую реализацию математического описания алгоритма собственных значений Якоби на языке программирования Julia .

используя   LinearAlgebra  ,   тестовая  функция   find_pivot  (  Sprime  )      n   =   size  (  Sprime  ,  1  )      Pivot_i   =   Pivot_j   =   0      Pivot   =   0,0      для   j   =   1  :  n          для   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  # на практике не следует явно создавать экземпляр матричной  функции   вращения Гивенса Gives_rotation_matrix  (  n  ,  i  ,  j  ,  θ  )      G   знак равно   Матрица  {  Float64  }(  я  ,(  n  ,  n  ))      грамм  [  я  ,  я  ]   знак равно   грамм  [  j  ,  j  ]   знак   грех  равно потому что (  θ  )      грамм  [  я  ,  j  ]   знак   равно  (  θ  )      грамм  [  j  ,  i  ]   =   -  sin  (  θ  )      return   G  end  # S — симметричная матрица размера n на n  n   =   4  sqrtS   =   randn  (  n  ,  n  );  S   =   sqrtS  *  sqrtS  '  ;  # наибольший разрешенный недиагональный элемент U' * S * U  # где U — собственные векторы  tol   =   1e-14  Sprime   =   copy  (  S  )  U   =   Matrix  {  Float64  }(  I  ,(  n  ,  n  ))  while   true      (  Pivot_i  ,   Pivot_j  ,   Pivot  )   =   find_pivot  (  Sprime  ),      если   точка вращения   <   tol,          разрыва      конец      θ   =   atan  (  2  *  Sprime  [  Pivot_i  ,  Pivot_j  ]  /  (  Sprime  [  Pivot_j  ,  Pivot_j  ]   -   Sprime  [  Pivot_i  ,  Pivot_i  ]   ))   /   2      G   =   Gives_rotation_matrix  (  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 г.). «О простой процедуре численного решения уравнений, возникающих в теории вековых возмущений» . Журнал Крелля (на немецком языке). 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). «О квадратичной сходимости метода Якоби». Численная математика (на немецком языке). 6 (1): 410–412. дои : 10.1007/BF01386091 . MR0174171   . S2CID   118301078 .

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

[ редактировать ]


[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 88003402edb2d42c10ba2f103dba3637__1719844260
URL1:https://arc.ask3.ru/arc/aa/88/37/88003402edb2d42c10ba2f103dba3637.html
Заголовок, (Title) документа по адресу, URL1:
Jacobi eigenvalue algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)