Участник:Galkina/Метод Якоби вычисления собственных значений симметричной матрицы: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
(Новая страница: « == Свойства и структура алгоритма == === Общее описание алгоритма === По заданной симметрич…»)
 
Строка 14: Строка 14:
  
 
Матрица <math>J_i</math> выбирается так, чтобы сделать нулями пару внедиагональных элементов матрицы <math>A_{i+1}</math>.
 
Матрица <math>J_i</math> выбирается так, чтобы сделать нулями пару внедиагональных элементов матрицы <math>A_{i+1}</math>.
 +
 +
Обозначим <math>s = \sin \theta</math> и <math>c = \cos \theta</math>. Тогда матрица <math>A_{i+1}</math> состоит из следующих элементов:
 +
 +
: <math>\begin{align}
 +
a_{jj}^{(i+1)} &= c^2\, a_{jj}^{(i)}  -  2\, s c \,a_{jk}^{(i)}  +  s^2\, a_{kk}^{(i)} \\
 +
a_{kk}^{(i+1)} &= s^2 \,a_{jj}^{(i)}  +  2 s c\, a_{jk}^{(i)}  +  c^2 \, a_{kk}^{(i)} \\
 +
a_{jk}^{(i+1)} &= a_{kj}^{(i+1)} = (c^2 - s^2 ) \, a_{jk}^{(i)}  +  s c \, (a_{kk}^{(i)} - a_{jj}^{(i)} ) \\
 +
a_{jm}^{(i+1)} &= a_{mj}^{(i+1)} = c \, a_{jm}^{(i)}  -  s \, a_{km}^{(i)} & m \ne j,k \\
 +
a_{km}^{(i+1)} &= a_{mk}^{(i+1)} = s \, a_{jm}^{(i)}  + c \, a_{km}^{(i)} & m \ne j,k \\
 +
a_{ml}^{(i+1)} &= a_{ml}^{(i)} &m,l \ne j,k
 +
\end{align}</math>
 +
 +
Можно выбрать <math>\theta</math> так, чтобы <math>a_{jk}^{(i+1)} = 0</math>. Тогда получим
 +
 +
: <math> \frac{a_{jj}^{(i)} - a_{kk}^{(i)}}{2 a_{jk}^{(i)}} = \frac{c^2 - s^2}{2sc} = \frac{\cos 2\theta}{\sin 2\theta} = \operatorname{tg}(2\theta) \equiv \tau </math>.
 +
 +
Положим <math>t = \frac{s}{c} = \operatorname{ctg}(\theta)</math> и заметим, что <math>t^2 - 2t\tau + 1 = 0</math>. Решая квадратное уравнение, находим <math>t = \frac{\operatorname{sign}(\tau)}{|\tau| + \sqrt{1+t^2}}, c = \frac{1}{\sqrt{1+t^2}}, s = tc</math>.

Версия 14:23, 7 октября 2016

1 Свойства и структура алгоритма

1.1 Общее описание алгоритма

По заданной симметрической матрице [math]A = A_0[/math] строится последовательность ортогонально подобных матриц [math]A_1,A_2,...[/math]. Эта последовательность сходится к диагональной матрице, на диагонали которой стоят собственные значения.

1.2 Математическое описание алгоритма

Исходные данные: симметрическая матрица [math]A[/math] (элементы [math]a_{ij}[/math]).

Вычисляемые данные: диагональная матрица [math]\Lambda[/math] (элементы [math]\lambda_{ij}[/math]).

Матрица [math]A_{i+1}[/math] получается из [math]A_i[/math] по формуле [math]A_{i+1}={J_i}^TA_iJ_i[/math], где [math]J_i[/math] — ортогональная матрица, называемая вращением Якоби.

Матрица [math]J_i[/math] выбирается так, чтобы сделать нулями пару внедиагональных элементов матрицы [math]A_{i+1}[/math].

Обозначим [math]s = \sin \theta[/math] и [math]c = \cos \theta[/math]. Тогда матрица [math]A_{i+1}[/math] состоит из следующих элементов:

[math]\begin{align} a_{jj}^{(i+1)} &= c^2\, a_{jj}^{(i)} - 2\, s c \,a_{jk}^{(i)} + s^2\, a_{kk}^{(i)} \\ a_{kk}^{(i+1)} &= s^2 \,a_{jj}^{(i)} + 2 s c\, a_{jk}^{(i)} + c^2 \, a_{kk}^{(i)} \\ a_{jk}^{(i+1)} &= a_{kj}^{(i+1)} = (c^2 - s^2 ) \, a_{jk}^{(i)} + s c \, (a_{kk}^{(i)} - a_{jj}^{(i)} ) \\ a_{jm}^{(i+1)} &= a_{mj}^{(i+1)} = c \, a_{jm}^{(i)} - s \, a_{km}^{(i)} & m \ne j,k \\ a_{km}^{(i+1)} &= a_{mk}^{(i+1)} = s \, a_{jm}^{(i)} + c \, a_{km}^{(i)} & m \ne j,k \\ a_{ml}^{(i+1)} &= a_{ml}^{(i)} &m,l \ne j,k \end{align}[/math]

Можно выбрать [math]\theta[/math] так, чтобы [math]a_{jk}^{(i+1)} = 0[/math]. Тогда получим

[math] \frac{a_{jj}^{(i)} - a_{kk}^{(i)}}{2 a_{jk}^{(i)}} = \frac{c^2 - s^2}{2sc} = \frac{\cos 2\theta}{\sin 2\theta} = \operatorname{tg}(2\theta) \equiv \tau [/math].

Положим [math]t = \frac{s}{c} = \operatorname{ctg}(\theta)[/math] и заметим, что [math]t^2 - 2t\tau + 1 = 0[/math]. Решая квадратное уравнение, находим [math]t = \frac{\operatorname{sign}(\tau)}{|\tau| + \sqrt{1+t^2}}, c = \frac{1}{\sqrt{1+t^2}}, s = tc[/math].