Власні Значення Симетричної Матриці: Як Знайти Методом Обертання

Метод обертання застосовують тоді, коли потрібно знайти власні значення симетричної матриці без складання характеристичного рівняння. Ідея методу досить проста: крок за кроком перетворювати початкову матрицю так, щоб вона ставала все ближчою до діагональної.

У результаті як наближені власні значення можна взяти діагональні елементи отриманої матриці. Крім того, цей метод дає змогу знайти й відповідні власні вектори, що робить його зручним для розв’язування повної проблеми власних значень.

Власні Значення Симетричної Матриці: Умова Застосування та Ідея Методу

Почнемо з основного. Метод обертання у такому вигляді застосовують до дійсних симетричних матриць. Тобто до матриць \( A \), для яких виконується умова

\[
A=A^T.
\]

Інакше кажучи, елементи матриці симетрично розміщені відносно головної діагоналі:

\[
a_{ij}=a_{ji},\qquad i,j=1,2,\dots,n.
\]

Чому ця умова така важлива? Бо саме для симетричних матриць ортогональні обертання працюють особливо зручно. Після таких перетворень матриця залишається симетричною, а її власні значення не змінюються.

Цей метод також часто називають методом обертань Якобі. У курсі чисельних методів така назва трапляється дуже часто, тому її варто запам’ятати.

Нехай задано матрицю

\[
A=
\begin{pmatrix}
a_{11} & a_{12} & \dots & a_{1n}\\
a_{21} & a_{22} & \dots & a_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
a_{n1} & a_{n2} & \dots & a_{nn}
\end{pmatrix},
\qquad A=A^T.
\]

Потрібно знайти її власні значення

\[
\lambda_1,\lambda_2,\dots,\lambda_n.
\]

Але метод обертання дає змогу зробити трохи більше. Він знаходить не лише власні значення, а й відповідні власні вектори. Саме тому кажуть, що метод дає змогу розв’язати повну проблему власних значень.

Звісно, можна було б скласти характеристичне рівняння. Але чи завжди це зручно? Ні. Для матриць великого порядку характеристичний многочлен може бути громіздким, а його корені не завжди легко знайти.

Тому метод обертання діє інакше. Початкову матрицю поступово перетворюють на діагональну або майже діагональну матрицю. Для несиметричних матриць цей підхід зазвичай не використовують без додаткових змін, бо його головна перевага проявляється саме завдяки симетрії матриці.

Отже, мета методу така: замість складного знаходження коренів характеристичного рівняння поступово зменшити недіагональні елементи матриці. Коли вони стануть достатньо малими, власні значення можна буде прочитати з головної діагоналі.

Перетворення Подібності: Чому Власні Значення Зберігаються

Тепер перейдемо до основи методу. Як можна змінювати матрицю, але не змінювати її власні значення? Для цього використовують перетворення подібності.

Нехай матрицю \( A \) перетворюють на матрицю \( \Lambda \) за формулою

\[
\Lambda=U^{-1}\cdot A\cdot U,
\]

де \( U \) — невироджена матриця.

Матриці \( A \) і \( \Lambda \), пов’язані таким перетворенням, мають однакові власні значення. Тобто змінюється вигляд матриці, але її спектр зберігається.

У методі обертання матрицю \( U \) вибирають ортогональною. Для ортогональної матриці виконується рівність

\[
U^{-1}=U^T.
\]

Тому перетворення подібності можна записати так:

\[
\Lambda=U^T\cdot A\cdot U.
\]

Це зручно з обчислювальної точки зору. Адже замість знаходження оберненої матриці достатньо взяти транспоновану.

Метод обертання не шукає одразу одну матрицю \( U \), яка зробить матрицю \( A \) діагональною. Зазвичай це складно. Тому процес будують поступово.

Позначимо початкову матрицю так:

\[
A^{(0)}=A.
\]

Далі будуємо послідовність матриць

\[
A^{(0)}, A^{(1)}, A^{(2)},\dots,A^{(k)}.
\]

Кожна наступна матриця отримується з попередньої за допомогою ортогонального перетворення подібності. Тому всі ці матриці мають однакові власні значення.

У кінці потрібно отримати матрицю, близьку до діагональної:

\[
A^{(k)}\approx
\begin{pmatrix}
\lambda_1 & 0 & \dots & 0\\
0 & \lambda_2 & \dots & 0\\
\vdots & \vdots & \ddots & \vdots\\
0 & 0 & \dots & \lambda_n
\end{pmatrix}.
\]

Саме тому метод працює логічно. Ми не змінюємо власні значення, але поступово змінюємо форму матриці. У результаті вона стає такою, з якої ці значення легко зчитати.

Матриця Обертання: Як Виконується Один Крок Методу

Тепер потрібно зрозуміти, за допомогою якої матриці виконується один крок методу. На кожній ітерації використовують спеціальну ортогональну матрицю обертання. Її позначають так:

\[
U_{i_kj_k}(\phi_k).
\]

Тут \( k \) — номер ітерації, \( i_k \) та \( j_k \) — індекси вибраного недіагонального елемента, а \( \phi_k \) — кут обертання.

Матриця \( U_{i_kj_k}(\phi_k) \) майже збігається з одиничною матрицею. Вона відрізняється від неї лише чотирма елементами:

\[
\begin{gathered}
u_{i_ki_k}=\cos(\phi_k),
\qquad
u_{i_kj_k}=-\sin(\phi_k),\\[4pt]
u_{j_ki_k}=\sin(\phi_k),
\qquad
u_{j_kj_k}=\cos(\phi_k).
\end{gathered}
\]

Усі інші діагональні елементи дорівнюють одиниці, а решта недіагональних елементів дорівнює нулю.

Для зручності введемо позначення

\[
c_k=\cos(\phi_k),
\qquad
s_k=\sin(\phi_k).
\]

Тоді матрицю обертання можна подати схематично:

\[
U_{i_kj_k}(\phi_k)=
\begin{pmatrix}
1 & \dots & 0 & \dots & 0 & \dots & 0\\
\vdots & \ddots & \vdots & & \vdots & & \vdots\\
0 & \dots & c_k & \dots & -s_k & \dots & 0\\
\vdots & & \vdots & \ddots & \vdots & & \vdots\\
0 & \dots & s_k & \dots & c_k & \dots & 0\\
\vdots & & \vdots & & \vdots & \ddots & \vdots\\
0 & \dots & 0 & \dots & 0 & \dots & 1
\end{pmatrix}.
\]

Що робить така матриця? Вона змінює тільки два рядки та два стовпці, пов’язані з індексами \( i_k \) і \( j_k \). Решта структури матриці залишається незмінною.

На \( k \)-му кроці методу виконується перетворення

\[
A^{(k)}
=
U_{i_kj_k}^{T}(\phi_k)\cdot
A^{(k-1)}\cdot
U_{i_kj_k}(\phi_k),
\qquad k=1,2,3,\dots.
\]

З попереднього розділу вже зрозуміло, чому таке перетворення не змінює власних значень. Тепер важливо інше: саме воно дає змогу поступово зменшувати недіагональні елементи.

Якщо потрібно детально виконати один крок методу або реалізувати його в програмі, перетворення зручно розбити на дві дії. Спочатку вводять допоміжну матрицю \( B \):

\[
B=A^{(k-1)}\cdot U_{i_kj_k}(\phi_k).
\]

Потім знаходять нову матрицю

\[
A^{(k)}=U_{i_kj_k}^{T}(\phi_k)\cdot B.
\]

Тобто повне перетворення

\[
A^{(k)}
=
U_{i_kj_k}^{T}(\phi_k)\cdot
A^{(k-1)}\cdot
U_{i_kj_k}(\phi_k)
\]

можна виконати як два послідовні множення. Спочатку множимо поточну матрицю справа на матрицю обертання, а потім результат множимо зліва на транспоновану матрицю обертання.

Під час першого множення змінюються тільки \( i_k \)-й та \( j_k \)-й стовпці. Для них маємо

\[
\begin{gathered}
b_{zi_k}
=
a_{zi_k}^{(k-1)}\cdot c_k
+
a_{zj_k}^{(k-1)}\cdot s_k,
\qquad z=1,2,\dots,n,\\[4pt]
b_{zj_k}
=
-a_{zi_k}^{(k-1)}\cdot s_k
+
a_{zj_k}^{(k-1)}\cdot c_k,
\qquad z=1,2,\dots,n.
\end{gathered}
\]

Далі, під час другого множення, змінюються тільки \( i_k \)-й та \( j_k \)-й рядки. Для них отримаємо

\[
\begin{gathered}
a_{i_kz}^{(k)}
=
b_{i_kz}\cdot c_k
+
b_{j_kz}\cdot s_k,
\qquad z=1,2,\dots,n,\\[4pt]
a_{j_kz}^{(k)}
=
-b_{i_kz}\cdot s_k
+
b_{j_kz}\cdot c_k,
\qquad z=1,2,\dots,n.
\end{gathered}
\]

Отже, один крок методу має чітку будову. Спочатку виконується множення справа, яке змінює два стовпці. Потім виконується множення зліва, яке змінює два рядки. У результаті змінюються саме ті елементи, які пов’язані з вибраними індексами.

Але тепер з’являється наступне питання: як вибрати індекси \( i_k \), \( j_k \) і сам кут \( \phi_k \)? Саме це визначає, який елемент буде занулено на поточному кроці.

Власні Значення Симетричної Матриці: Вибір Елемента і Кута Обертання

На кожному кроці потрібно вибрати недіагональний елемент, який будемо занулювати. Оскільки матриця симетрична, достатньо розглядати елементи, що лежать, наприклад, над головною діагоналлю.

Найчастіше вибирають найбільший за модулем недіагональний елемент матриці \( A^{(k-1)} \). Тобто індекси \( i_k \) та \( j_k \) визначають з умови

\[
\left|a_{i_kj_k}^{(k-1)}\right|
=
\max_{1\leq i<j\leq n}
\left|a_{ij}^{(k-1)}\right|.
\]

Чому вибирають саме найбільший елемент? Бо так на кожному кроці найактивніше зменшується недіагональна частина матриці. А саме її ми й хочемо поступово прибрати.

Після вибору індексів \( i_k \) та \( j_k \) потрібно знайти кут \( \phi_k \). Його підбирають так, щоб після перетворення вибраний елемент став нульовим:

\[
a_{i_kj_k}^{(k)}=0.
\]

Тепер запишемо формулу для цього елемента після обертання. З урахуванням симетричності матриці \( A^{(k-1)} \) маємо

\[
a_{i_kj_k}^{(k)}
=
a_{i_kj_k}^{(k-1)}\cdot \cos(2\cdot\phi_k)
+
\frac{
a_{j_kj_k}^{(k-1)}-a_{i_ki_k}^{(k-1)}
}{2}
\cdot \sin(2\cdot\phi_k).
\]

За умовою методу цей елемент має дорівнювати нулю. Тому отримуємо рівняння

\[
a_{i_kj_k}^{(k-1)}\cdot \cos(2\cdot\phi_k)
+
\frac{
a_{j_kj_k}^{(k-1)}-a_{i_ki_k}^{(k-1)}
}{2}
\cdot \sin(2\cdot\phi_k)
=
0.
\]

Звідси випливає

\[
\tan(2\cdot\phi_k)
=
\frac{
2\cdot a_{i_kj_k}^{(k-1)}
}{
a_{i_ki_k}^{(k-1)}-a_{j_kj_k}^{(k-1)}
}.
\]

Отже, якщо

\[
a_{i_ki_k}^{(k-1)}\neq a_{j_kj_k}^{(k-1)},
\]

то кут обертання можна знайти за формулою

\[
\phi_k
=
\frac{1}{2}\cdot
\arctan\left(
\frac{
2\cdot a_{i_kj_k}^{(k-1)}
}{
a_{i_ki_k}^{(k-1)}-a_{j_kj_k}^{(k-1)}
}
\right).
\]

Якщо ж

\[
a_{i_ki_k}^{(k-1)}=a_{j_kj_k}^{(k-1)},
\]

то беруть

\[
\phi_k=\frac{\pi}{4}.
\]

Разом це можна записати так:

\[
\phi_k=
\begin{cases}
\dfrac{1}{2}\cdot \arctan\left(
\dfrac{
2\cdot a_{i_kj_k}^{(k-1)}
}{
a_{i_ki_k}^{(k-1)}-a_{j_kj_k}^{(k-1)}
}
\right),
& a_{i_ki_k}^{(k-1)}\neq a_{j_kj_k}^{(k-1)}, \\[12pt]
\dfrac{\pi}{4},
& a_{i_ki_k}^{(k-1)}=a_{j_kj_k}^{(k-1)}.
\end{cases}
\]

Отже, логіка ітерації зрозуміла. Спочатку вибираємо найбільший недіагональний елемент. Потім знаходимо кут обертання. Далі виконуємо перетворення, після якого цей елемент стає нульовим.

Звісно, після одного кроку вся матриця ще не стане діагональною. Крім того, деякі інші недіагональні елементи можуть змінитися. Але загалом, після багатьох таких обертань, недіагональна частина матриці стає все меншою.

Саме тому метод обертання є ітераційним. Він поступово наближає матрицю до вигляду, з якого легко отримати власні значення.

Завершення Методу: Власні Значення та Власні Вектори

Тепер залишилося зрозуміти, коли зупиняти ітераційний процес. Оскільки метод обертання є наближеним, наперед задають точність \( \varepsilon \).

Ітерації продовжують доти, доки сума квадратів недіагональних елементів матриці \( A^{(k)} \) не стане меншою або рівною заданій точності:

\[
\sum_{\substack{i,j=1\ i\neq j}}^{n}
\left(a_{ij}^{(k)}\right)^2
\leq
\varepsilon.
\]

Ця умова означає, що недіагональні елементи вже достатньо малі. Тобто матриця \( A^{(k)} \) стала близькою до діагональної.

Після цього наближені власні значення початкової матриці \( A \) беруть із діагоналі матриці \( A^{(k)} \):

\[
\lambda_1\approx a_{11}^{(k)},
\qquad
\lambda_2\approx a_{22}^{(k)},
\qquad
\lambda_3\approx a_{33}^{(k)},
\qquad
\dots,
\qquad
\lambda_n\approx a_{nn}^{(k)}.
\]

Тут важливо пам’ятати одну деталь. Ці значення не обов’язково розташовуються за зростанням або спаданням. Їхній порядок залежить від перебігу ітерацій.

Саме так знаходять власні значення симетричної матриці методом обертання. Ми не складаємо характеристичне рівняння. Натомість поступово зменшуємо недіагональні елементи й отримуємо наближені власні значення з діагоналі.

Тепер повернемося до власних векторів. На кожному кроці ми використовуємо певну матрицю обертання:

\[
U_{i_1j_1}(\phi_1),
\qquad
U_{i_2j_2}(\phi_2),
\qquad
\dots,
\qquad
U_{i_kj_k}(\phi_k).
\]

Якщо перемножити всі ці матриці, отримаємо матрицю

\[
Q^{(k)}
=
U_{i_1j_1}(\phi_1)\cdot
U_{i_2j_2}(\phi_2)\cdot
\dots
\cdot
U_{i_kj_k}(\phi_k).
\]

Ця матриця накопичує всі виконані обертання. Тому вона пов’язує початкову матрицю \( A \) з наближено діагональною матрицею \( A^{(k)} \):

\[
A^{(k)}
\approx
\left(Q^{(k)}\right)^T\cdot A\cdot Q^{(k)}.
\]

Стовпці матриці \( Q^{(k)} \) є наближеними власними векторами початкової матриці \( A \). Кожен такий стовпець відповідає певному власному значенню, яке стоїть на діагоналі матриці \( A^{(k)} \).

Отже, метод обертання дає змогу знайти не лише власні значення, а й власні вектори. Це одна з головних причин, чому він є корисним для повної проблеми власних значень симетричної матриці.

Підсумуємо загальну схему. Спочатку перевіряємо, чи задана матриця є симетричною. Далі вибираємо найбільший за модулем недіагональний елемент. Потім знаходимо кут обертання й занулюємо цей елемент. Після цього повторюємо процес до заданої точності.

У результаті діагональні елементи дають наближені власні значення, а добуток матриць обертання дає наближені власні вектори.

Практична Частина: Приклади Обчислення Методом Обертання

Тепер розглянемо, як метод обертання працює на конкретних матрицях. У кожному прикладі будемо поступово занулювати найбільші недіагональні елементи та перевіряти, чи стала матриця достатньо близькою до діагональної. Це допоможе побачити, як з теоретичних формул отримуються наближені власні значення та власні вектори.

Приклад 1. Знайти власні значення симетричної матриці та відповідні їм власні вектори методом обертання з точністю \( \varepsilon=0.1 \):
\[
A=
\begin{pmatrix}
4 & 1\\
1 & 3
\end{pmatrix}.
\]

Маємо симетричну матрицю другого порядку. Позначимо

\[
A^{(0)}=A=
\begin{pmatrix}
4 & 1\\
1 & 3
\end{pmatrix}.
\]

Спочатку перевіримо суму квадратів недіагональних елементів:

\[
S^{(0)}=1^2+1^2=2.
\]

Оскільки

\[
2>0.1,
\]

потрібно виконувати перетворення.

У матриці другого порядку є лише один недіагональний елемент над головною діагоналлю \( a_{12}^{(0)}=1 \), тому беремо \( i_1=1 \) та \( j_1=2 \). Знайдемо кут обертання:

\[
\tan(2\cdot\phi_1)
=
\frac{2\cdot a_{12}^{(0)}}{a_{11}^{(0)}-a_{22}^{(0)}}
=
\frac{2\cdot 1}{4-3}
=
2.
\]

Звідси

\[
\phi_1=\frac{1}{2}\cdot\arctan(2)\approx 0.5536.
\]

Тоді

\[
c_1=\cos(\phi_1)\approx 0.8507,
\qquad
s_1=\sin(\phi_1)\approx 0.5257.
\]

Матриця обертання має вигляд

\[
U_{12}(\phi_1)=
\begin{pmatrix}
0.8507 & -0.5257\\
0.5257 & 0.8507
\end{pmatrix}.
\]

Тоді транспонована матриця обертання дорівнює

\[
U_{12}^{T}(\phi_1)=
\begin{pmatrix}
0.8507 & 0.5257\\
-0.5257 & 0.8507
\end{pmatrix}.
\]

Виконуємо перетворення

\[
A^{(1)}
=
U_{12}^{T}(\phi_1)\cdot A^{(0)}\cdot U_{12}(\phi_1).
\]

Підставимо знайдені матриці:

\[
A^{(1)}
=
\begin{pmatrix}
0.8507 & 0.5257\\
-0.5257 & 0.8507
\end{pmatrix}
\cdot
\begin{pmatrix}
4 & 1\\
1 & 3
\end{pmatrix}
\cdot
\begin{pmatrix}
0.8507 & -0.5257\\
0.5257 & 0.8507
\end{pmatrix}.
\]

Виконавши множення, дістаємо

\[
A^{(1)}
\approx
\begin{pmatrix}
4.618 & 0\\
0 & 2.382
\end{pmatrix}.
\]

Тепер знову перевіримо суму квадратів недіагональних елементів:

\[
S^{(1)}=0.
\]

Оскільки

\[
0\leq 0.1,
\]

ітераційний процес зупиняємо.

Отже, як наближені власні значення беремо діагональні елементи матриці \( A^{(1)} \):

\[
\lambda_1\approx 4.618,
\qquad
\lambda_2\approx 2.382.
\]

Тепер знайдемо наближені власні вектори. Оскільки було виконано лише одне обертання, то

\[
Q^{(1)}=U_{12}(\phi_1).
\]

Звідси

\[
Q^{(1)}
=
\begin{pmatrix}
0.8507 & -0.5257\\
0.5257 & 0.8507
\end{pmatrix}.
\]

Стовпці цієї матриці є наближеними власними векторами початкової матриці. Тому

\[
v_1\approx
\begin{pmatrix}
0.8507\\
0.5257
\end{pmatrix},
\qquad
v_2\approx
\begin{pmatrix}
-0.5257\\
0.8507
\end{pmatrix}.
\]

Перший стовпець відповідає власному значенню \( \lambda_1\approx 4.618 \), а другий стовпець — власному значенню \( \lambda_2\approx 2.382 \).

Приклад 2. Знайти власні значення симетричної матриці та відповідні їм власні вектори методом обертання з точністю \( \varepsilon=0.1 \):
\[
A=
\begin{pmatrix}
4 & 1 & 1\\
1 & 3 & 0\\
1 & 0 & 2
\end{pmatrix}.
\]

Позначимо

\[
A^{(0)}=
\begin{pmatrix}
4 & 1 & 1\\
1 & 3 & 0\\
1 & 0 & 2
\end{pmatrix}.
\]

Спочатку знайдемо суму квадратів недіагональних елементів:

\[
S^{(0)}
=
1^2+1^2+1^2+1^2=4.
\]

Оскільки

\[
4>0.1,
\]

починаємо ітераційний процес.

Найбільший за модулем недіагональний елемент має модуль \( 1 \). Можемо вибрати, наприклад, \( a_{12}^{(0)}=1 \). Тоді \( i_1=1 \) і \( j_1=2 \). Знайдемо кут обертання:

\[
\tan(2\cdot\phi_1)
=
\frac{2\cdot a_{12}^{(0)}}{a_{11}^{(0)}-a_{22}^{(0)}}
=
\frac{2\cdot 1}{4-3}
=
2.
\]

Тому

\[
\phi_1=\frac{1}{2}\cdot\arctan(2)\approx 0.5536.
\]

Звідси

\[
c_1\approx 0.8507,
\qquad
s_1\approx 0.5257.
\]

Матриця обертання в площині індексів \( 1 \) і \( 2 \) має вигляд

\[
U_{12}(\phi_1)=
\begin{pmatrix}
0.8507 & -0.5257 & 0\\
0.5257 & 0.8507 & 0\\
0 & 0 & 1
\end{pmatrix}.
\]

Тоді

\[
U_{12}^{T}(\phi_1)=
\begin{pmatrix}
0.8507 & 0.5257 & 0\\
-0.5257 & 0.8507 & 0\\
0 & 0 & 1
\end{pmatrix}.
\]

Виконуємо перетворення

\[
A^{(1)}
=
U_{12}^{T}(\phi_1)\cdot A^{(0)}\cdot U_{12}(\phi_1).
\]

Підставимо матриці в цю формулу:

\[
A^{(1)}
=
\begin{pmatrix}
0.8507 & 0.5257 & 0\\
-0.5257 & 0.8507 & 0\\
0 & 0 & 1
\end{pmatrix}
\cdot
\begin{pmatrix}
4 & 1 & 1\\
1 & 3 & 0\\
1 & 0 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.8507 & -0.5257 & 0\\
0.5257 & 0.8507 & 0\\
0 & 0 & 1
\end{pmatrix}.
\]

У результаті множення отримаємо

\[
A^{(1)}
\approx
\begin{pmatrix}
4.618 & 0 & 0.8507\\
0 & 2.382 & -0.5257\\
0.8507 & -0.5257 & 2
\end{pmatrix}.
\]

Тепер перевіримо суму квадратів недіагональних елементів:

\[
S^{(1)}
=
2\cdot\left(0.8507^2+(-0.5257)^2\right)
\approx 2.
\]

Оскільки

\[
2>0.1,
\]

потрібно продовжувати обчислення.

Тепер найбільший за модулем недіагональний елемент дорівнює \( a_{13}^{(1)}\approx 0.8507 \). Тому беремо \( i_2=1 \) і \( j_2=3 \). Обчислюємо кут:

\[
\tan(2\cdot\phi_2)
=
\frac{2\cdot a_{13}^{(1)}}{a_{11}^{(1)}-a_{33}^{(1)}}
=
\frac{2\cdot 0.8507}{4.618-2}
\approx 0.65.
\]

Тоді

\[
\phi_2\approx 0.2881,
\qquad
c_2\approx 0.9588,
\qquad
s_2\approx 0.2842.
\]

Матриця обертання в площині індексів \( 1 \) і \( 3 \) дорівнює

\[
U_{13}(\phi_2)=
\begin{pmatrix}
0.9588 & 0 & -0.2842\\
0 & 1 & 0\\
0.2842 & 0 & 0.9588
\end{pmatrix}.
\]

Тому

\[
U_{13}^{T}(\phi_2)=
\begin{pmatrix}
0.9588 & 0 & 0.2842\\
0 & 1 & 0\\
-0.2842 & 0 & 0.9588
\end{pmatrix}.
\]

Виконуємо наступне перетворення:

\[
A^{(2)}
=
U_{13}^{T}(\phi_2)\cdot A^{(1)}\cdot U_{13}(\phi_2).
\]

Підставляємо відповідні матриці:

\[
A^{(2)}
=
\begin{pmatrix}
0.9588 & 0 & 0.2842\\
0 & 1 & 0\\
-0.2842 & 0 & 0.9588
\end{pmatrix}
\cdot
\begin{pmatrix}
4.618 & 0 & 0.8507\\
0 & 2.382 & -0.5257\\
0.8507 & -0.5257 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.9588 & 0 & -0.2842\\
0 & 1 & 0\\
0.2842 & 0 & 0.9588
\end{pmatrix}.
\]

Після виконання множення маємо

\[
A^{(2)}
\approx
\begin{pmatrix}
4.8701 & -0.1494 & 0\\
-0.1494 & 2.382 & -0.5041\\
0 & -0.5041 & 1.7479
\end{pmatrix}.
\]

Перевіримо суму квадратів недіагональних елементів:

\[
S^{(2)}
=
2\cdot\left((-0.1494)^2+(-0.5041)^2\right)
\approx 0.5528.
\]

Оскільки

\[
0.5528>0.1,
\]

виконуємо наступне перетворення.

Найбільший за модулем недіагональний елемент тепер дорівнює \( a_{23}^{(2)}\approx -0.5041 \). Отже, \( i_3=2 \) та \( j_3=3 \). Знайдемо кут обертання:

\[
\tan(2\cdot\phi_3)
=
\frac{2\cdot a_{23}^{(2)}}{a_{22}^{(2)}-a_{33}^{(2)}}
=
\frac{2\cdot(-0.5041)}{2.382-1.7479}
\approx -1.5899.
\]

Тоді

\[
\phi_3\approx -0.5047,
\qquad
c_3\approx 0.8753,
\qquad
s_3\approx -0.4835.
\]

Матриця обертання в площині індексів \( 2 \) і \( 3 \) має вигляд

\[
U_{23}(\phi_3)=
\begin{pmatrix}
1 & 0 & 0\\
0 & 0.8753 & 0.4835\\
0 & -0.4835 & 0.8753
\end{pmatrix}.
\]

Тому

\[
U_{23}^{T}(\phi_3)=
\begin{pmatrix}
1 & 0 & 0\\
0 & 0.8753 & -0.4835\\
0 & 0.4835 & 0.8753
\end{pmatrix}.
\]

Виконуємо перетворення

\[
A^{(3)}
=
U_{23}^{T}(\phi_3)\cdot A^{(2)}\cdot U_{23}(\phi_3).
\]

Після підстановки одержуємо такий добуток:

\[
A^{(3)}
=
\begin{pmatrix}
1 & 0 & 0\\
0 & 0.8753 & -0.4835\\
0 & 0.4835 & 0.8753
\end{pmatrix}
\cdot
\begin{pmatrix}
4.8701 & -0.1494 & 0\\
-0.1494 & 2.382 & -0.5041\\
0 & -0.5041 & 1.7479
\end{pmatrix}
\cdot
\begin{pmatrix}
1 & 0 & 0\\
0 & 0.8753 & 0.4835\\
0 & -0.4835 & 0.8753
\end{pmatrix}.
\]

Звідси після множення

\[
A^{(3)}
\approx
\begin{pmatrix}
4.8701 & -0.1308 & -0.0722\\
-0.1308 & 2.6604 & 0\\
-0.0722 & 0 & 1.4695
\end{pmatrix}.
\]

Тепер перевіримо умову зупинки:

\[
S^{(3)}
=
2\cdot\left((-0.1308)^2+(-0.0722)^2\right)
\approx 0.0446.
\]

Оскільки

\[
0.0446\leq 0.1,
\]

ітераційний процес зупиняємо.

Отже, як наближені власні значення беремо діагональні елементи матриці \( A^{(3)} \):

\[
\lambda_1\approx 4.8701,
\qquad
\lambda_2\approx 2.6604,
\qquad
\lambda_3\approx 1.4695.
\]

Зверніть увагу. Матриця \( A^{(3)} \) ще не є повністю діагональною. Але її недіагональні елементи вже достатньо малі для заданої точності.

Тепер знайдемо наближені власні вектори. Для цього перемножуємо всі матриці обертання, які використовувалися під час ітерацій:

\[
Q^{(3)}
=
U_{12}(\phi_1)\cdot
U_{13}(\phi_2)\cdot
U_{23}(\phi_3).
\]

Підставимо знайдені матриці:

\[
Q^{(3)}
=
\begin{pmatrix}
0.8507 & -0.5257 & 0\\
0.5257 & 0.8507 & 0\\
0 & 0 & 1
\end{pmatrix}
\cdot
\begin{pmatrix}
0.9588 & 0 & -0.2842\\
0 & 1 & 0\\
0.2842 & 0 & 0.9588
\end{pmatrix}
\cdot
\begin{pmatrix}
1 & 0 & 0\\
0 & 0.8753 & 0.4835\\
0 & -0.4835 & 0.8753
\end{pmatrix}.
\]

Після множення цих матриць отримуємо

\[
Q^{(3)}
\approx
\begin{pmatrix}
0.8156 & -0.3433 & -0.4658\\
0.5041 & 0.8168 & 0.2805\\
0.2842 & -0.4636 & 0.8392
\end{pmatrix}.
\]

Стовпці цієї матриці є наближеними власними векторами початкової матриці. Тому

\[
v_1\approx
\begin{pmatrix}
0.8156\\
0.5041\\
0.2842
\end{pmatrix},
\qquad
v_2\approx
\begin{pmatrix}
-0.3433\\
0.8168\\
-0.4636
\end{pmatrix},
\qquad
v_3\approx
\begin{pmatrix}
-0.4658\\
0.2805\\
0.8392
\end{pmatrix}.
\]

Приклад 3. Знайти власні значення симетричної матриці та відповідні їм власні вектори методом обертання з точністю \( \varepsilon=0.1 \):
\[
A=
\begin{pmatrix}
5 & 1.4 & 0.1 & 0\\
1.4 & 4 & 0 & 0.1\\
0.1 & 0 & 3 & 0.2\\
0 & 0.1 & 0.2 & 2
\end{pmatrix}.
\]

Позначимо

\[
A^{(0)}=
\begin{pmatrix}
5 & 1.4 & 0.1 & 0\\
1.4 & 4 & 0 & 0.1\\
0.1 & 0 & 3 & 0.2\\
0 & 0.1 & 0.2 & 2
\end{pmatrix}.
\]

Знайдемо початкову суму квадратів недіагональних елементів. Оскільки матриця симетрична, кожен елемент над головною діагоналлю має відповідний такий самий елемент під головною діагоналлю:

\[
S^{(0)}
=
2\cdot\left(1.4^2+0.1^2+0.1^2+0.2^2\right)
=
4.04.
\]

Оскільки

\[
4.04>0.1,
\]

починаємо ітераційний процес.

Найбільший за модулем недіагональний елемент дорівнює \( a_{12}^{(0)}=1.4 \). Тому вибираємо \( i_1=1 \) та \( j_1=2 \). Знайдемо кут обертання:

\[
\tan(2\cdot\phi_1)
=
\frac{2\cdot a_{12}^{(0)}}{a_{11}^{(0)}-a_{22}^{(0)}}
=
\frac{2\cdot 1.4}{5-4}
=
2.8.
\]

Отже,

\[
\phi_1=\frac{1}{2}\cdot\arctan(2.8)\approx 0.6139.
\]

Тоді

\[
c_1\approx 0.8174,
\qquad
s_1\approx 0.576.
\]

Матриця обертання має вигляд

\[
U_{12}(\phi_1)=
\begin{pmatrix}
0.8174 & -0.576 & 0 & 0\\
0.576 & 0.8174 & 0 & 0\\
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}.
\]

Тоді

\[
U_{12}^{T}(\phi_1)=
\begin{pmatrix}
0.8174 & 0.576 & 0 & 0\\
-0.576 & 0.8174 & 0 & 0\\
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}.
\]

Виконуємо перетворення

\[
A^{(1)}
=
U_{12}^{T}(\phi_1)\cdot A^{(0)}\cdot U_{12}(\phi_1).
\]

Підставляємо матриці:

\[
A^{(1)}
=
\begin{pmatrix}
0.8174 & 0.576 & 0 & 0\\
-0.576 & 0.8174 & 0 & 0\\
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
\cdot
\begin{pmatrix}
5 & 1.4 & 0.1 & 0\\
1.4 & 4 & 0 & 0.1\\
0.1 & 0 & 3 & 0.2\\
0 & 0.1 & 0.2 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.8174 & -0.576 & 0 & 0\\
0.576 & 0.8174 & 0 & 0\\
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}.
\]

Після множення матриця набуває вигляду

\[
A^{(1)}
\approx
\begin{pmatrix}
5.9866 & 0 & 0.0817 & 0.0576\\
0 & 3.0134 & -0.0576 & 0.0817\\
0.0817 & -0.0576 & 3 & 0.2\\
0.0576 & 0.0817 & 0.2 & 2
\end{pmatrix}.
\]

Тепер перевіримо суму квадратів недіагональних елементів:

\[
S^{(1)}
=
2\cdot\left(
0.0817^2+
0.0576^2+
(-0.0576)^2+
0.0817^2+
0.2^2
\right)
\approx 0.12.
\]

Оскільки

\[
0.12>0.1,
\]

потрібно виконати ще одне перетворення.

Тепер найбільший за модулем недіагональний елемент дорівнює \( a_{34}^{(1)}=0.2 \). Отже, \( i_2=3 \) і \( j_2=4 \). Знайдемо кут:

\[
\tan(2\cdot\phi_2)
=
\frac{2\cdot a_{34}^{(1)}}{a_{33}^{(1)}-a_{44}^{(1)}}
=
\frac{2\cdot 0.2}{3-2}
=
0.4.
\]

Тому

\[
\phi_2=\frac{1}{2}\cdot\arctan(0.4)\approx 0.1903.
\]

Звідси

\[
c_2\approx 0.982,
\qquad
s_2\approx 0.1891.
\]

Матриця обертання в площині індексів \( 3 \) і \( 4 \) дорівнює

\[
U_{34}(\phi_2)=
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 0.982 & -0.1891\\
0 & 0 & 0.1891 & 0.982
\end{pmatrix}.
\]

Тому

\[
U_{34}^{T}(\phi_2)=
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 0.982 & 0.1891\\
0 & 0 & -0.1891 & 0.982
\end{pmatrix}.
\]

Виконуємо перетворення

\[
A^{(2)}
=
U_{34}^{T}(\phi_2)\cdot A^{(1)}\cdot U_{34}(\phi_2).
\]

Після підстановки маємо

\[
A^{(2)}
=
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 0.982 & 0.1891\\
0 & 0 & -0.1891 & 0.982
\end{pmatrix}
\cdot
\begin{pmatrix}
5.9866 & 0 & 0.0817 & 0.0576\\
0 & 3.0134 & -0.0576 & 0.0817\\
0.0817 & -0.0576 & 3 & 0.2\\
0.0576 & 0.0817 & 0.2 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 0.982 & -0.1891\\
0 & 0 & 0.1891 & 0.982
\end{pmatrix}.
\]

Виконавши множення, дістаємо

\[
A^{(2)}
\approx
\begin{pmatrix}
5.9866 & 0 & 0.0912 & 0.0411\\
0 & 3.0134 & -0.0411 & 0.0912\\
0.0912 & -0.0411 & 3.0385 & 0\\
0.0411 & 0.0912 & 0 & 1.9615
\end{pmatrix}.
\]

Перевіримо умову зупинки:

\[
S^{(2)}
=
2\cdot\left(
0.0912^2+
0.0411^2+
(-0.0411)^2+
0.0912^2
\right)
\approx 0.04.
\]

Оскільки

\[
0.04\leq 0.1,
\]

ітераційний процес зупиняємо.

Отже, як наближені власні значення беремо діагональні елементи матриці \( A^{(2)} \):

\[
\lambda_1\approx 5.9866,
\qquad
\lambda_2\approx 3.0134,
\qquad
\lambda_3\approx 3.0385,
\qquad
\lambda_4\approx 1.9615.
\]

Ці значення не обов’язково впорядковані за зростанням або спаданням. Вони просто стоять на діагоналі отриманої майже діагональної матриці.

Тепер знайдемо наближені власні вектори. Для цього перемножуємо матриці обертання:

\[
Q^{(2)}
=
U_{12}(\phi_1)\cdot
U_{34}(\phi_2).
\]

Підставимо відповідні матриці:

\[
Q^{(2)}
=
\begin{pmatrix}
0.8174 & -0.576 & 0 & 0\\
0.576 & 0.8174 & 0 & 0\\
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
\cdot
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 0.982 & -0.1891\\
0 & 0 & 0.1891 & 0.982
\end{pmatrix}.
\]

Після множення отримуємо

\[
Q^{(2)}
\approx
\begin{pmatrix}
0.8174 & -0.576 & 0 & 0\\
0.576 & 0.8174 & 0 & 0\\
0 & 0 & 0.982 & -0.1891\\
0 & 0 & 0.1891 & 0.982
\end{pmatrix}.
\]

Стовпці матриці \( Q^{(2)} \) є наближеними власними векторами початкової матриці. Тому

\[
v_1\approx
\begin{pmatrix}
0.8174\\
0.576\\
0\\
0
\end{pmatrix},
\qquad
v_2\approx
\begin{pmatrix}
-0.576\\
0.8174\\
0\\
0
\end{pmatrix},
\qquad
v_3\approx
\begin{pmatrix}
0\\
0\\
0.982\\
0.1891
\end{pmatrix},
\qquad
v_4\approx
\begin{pmatrix}
0\\
0\\
-0.1891\\
0.982
\end{pmatrix}.
\]

Рекомендовані Теми: Куди Рухатися Далі

Після методу обертання варто розглянути ще кілька підходів до роботи з власними значеннями. Вони допомагають побачити, як змінюється ідея обчислень залежно від типу матриці та мети задачі.

  1. Метод половинного ділення: Як знайти власні значення тридіагональної матриці — У статті йтиметься про пошук власних значень симетричної тридіагональної матриці через поділ проміжку та перевірку знаків.
  2. Степеневий метод: Як знайти найбільше власне значення — У статті буде показано, як через послідовне множення матриці на вектор знаходити найбільше за модулем власне значення.
  3. Метод вичерпування: Як знайти наступне власне значення — У статті йтиметься про випадок, коли перше власне значення вже відоме, а далі потрібно перейти до наступного.

Власні Значення Симетричної Матриці: Алгоритм Для Програмної Реалізації

Якщо вам цікаве програмування, метод обертання можна сприймати не лише як набір формул, а як готову основу для невеликого обчислювального алгоритму. Блок-схема нижче показує логіку програми для знаходження власних значень симетричної матриці другого порядку: від введення елементів матриці до перевірки симетричності, обчислення кута обертання та виведення фінального результату. Спробуйте реалізувати цей алгоритм своєю улюбленою мовою програмуванняPascal, Python, C++, JavaScript або будь-якою іншою. Так ви краще побачите, як теоретичний метод перетворюється на практичний інструмент для чисельних обчислень.

Блок-схема алгоритму, що показує, як методом обертання знаходити власні значення симетричної матриці другого порядку