Jump to content

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

В числовой линейной алгебре алгоритм собственных значений Якоби представляет собой итерационный метод вычисления собственных значений и собственных векторов вещественной диагонализация симметричной матрицы (процесс, известный как ) . Он назван в честь Карла Густава Якоба Якоби , впервые предложившего метод в 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(SRn×n; out eRn; out ERn×n)
  var
    i, k, l, m, stateN
    s, c, t, p, y, d, rR
    indNn
    changedLn

  function maxind(kN) ∈ N ! index of largest off-diagonal element in row k
    m := k+1
    for i := k+2 to n do
      ifSki│ > │Skmthen m := i endif
    endfor
    return m
  endfunc

  procedure update(kN; tR) ! 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 (yek) then changedk := true; state := state+1
    endif
  endproc

  procedure rotate(k,l,i,jN) ! perform rotation of Sij, Skl  ┐    ┌     ┐┌   ┐
    │Skl│    │cs││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
      ifSk indk│ > │Sm indmthen m := k endif
    endfor
    k := m; l := indm; p := Skl
    ! calculate c = cos φ, s = sin φ
    y := (elek)/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│    │cs││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 km 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 не нужно вычислять явно, что снижает опасность ошибок округления . Обратите внимание, что с .

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

Ссылки [ править ]

  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
Номер скриншота №: 6a151a8aed5ec4b7c31a987cc89112b8__1716822120
URL1:https://arc.ask3.ru/arc/aa/6a/b8/6a151a8aed5ec4b7c31a987cc89112b8.html
Заголовок, (Title) документа по адресу, URL1:
Jacobi eigenvalue algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)