Степеневий метод — один із найпростіших ітераційних способів розв’язання часткової проблеми власних значень. Він дає змогу наближено знайти найбільше за модулем власне значення матриці та відповідний йому власний вектор.
Основна ідея методу полягає в послідовному множенні початкового вектора на задану матрицю. Під час цього процесу отримані вектори поступово наближаються до прямої, яку задає власний вектор домінантного власного значення. Розглянемо, за яких умов це відбувається та як будується відповідний ітераційний процес.
Найбільше за Модулем Власне Значення Матриці: Що Саме Шукає Метод
Нехай задано квадратну матрицю \( A \) порядку \( 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},
\]
Припустимо, що матриця \( A \) має повну систему лінійно незалежних власних векторів, а її власні значення впорядковано за модулем так:
\[
|\lambda_1|>|\lambda_2|\geq|\lambda_3|\geq\dots\geq|\lambda_n|.
\]
Власне значення \( \lambda_1 \) називають домінантним. Його модуль перевищує модулі всіх інших власних значень матриці:
\[
|\lambda_1|=\max_{1\leq i\leq n}|\lambda_i|.
\]
Для збіжності звичайного степеневого методу важливо, щоб домінантне власне значення було єдиним за модулем:
\[
|\lambda_1|>|\lambda_2|.
\]
При цьому власні значення \( \lambda_2,\lambda_3,\dots,\lambda_n \) можуть мати однакові модулі. Головне, щоб жодне з них не мало такого самого модуля, як \( \lambda_1 \).
Якщо кілька власних значень мають однаковий найбільший модуль, звичайний степеневий метод може не збігатися до одного визначеного власного вектора. У такому разі поведінка ітераційних векторів залежатиме від початкового наближення та співвідношення між відповідними власними значеннями.
Нехай \( x_1,x_2,\dots,x_n \) — власні вектори матриці \( A \), які відповідають власним значенням \( \lambda_1,\lambda_2,\dots,\lambda_n \). За означенням власного значення маємо
\[
A\cdot x_i=\lambda_i\cdot x_i,\qquad i=1,2,\dots,n.
\]
Помножимо обидві частини цієї рівності ще раз на матрицю \( A \):
\[
A^2\cdot x_i=A\cdot\left(\lambda_i\cdot x_i\right)=\lambda_i\cdot A\cdot x_i=\lambda_i^2\cdot x_i.
\]
Продовжуючи цей процес, після \( k \) множень отримаємо
\[
A^k\cdot x_i=\lambda_i^k\cdot x_i.
\]
Отже, піднесення матриці до степеня призводить до піднесення її власних значень до того самого степеня. Саме ця властивість лежить в основі степеневого методу.
Степеневий Метод: Як Будується Ітераційний Процес
Спочатку вибирають ненульовий початковий вектор \( y^{(0)} \). Наприклад, можна взяти
\[
y^{(0)}
=
\begin{pmatrix}
1\\
1\\
\vdots\\
1
\end{pmatrix}.
\]
Оскільки власні вектори матриці \( A \) утворюють базис, початковий вектор можна подати як їхню лінійну комбінацію:
\[
y^{(0)}=c_1\cdot x_1+c_2\cdot x_2+\dots+c_n\cdot x_n.
\]
Для збіжності методу до власного вектора \( x_1 \), який відповідає домінантному власному значенню \( \lambda_1 \), коефіцієнт при \( x_1 \) не повинен дорівнювати нулю: \( c_1\neq 0 \). Якщо \( c_1=0 \), то власний вектор \( x_1 \) не входить до розкладу початкового вектора. У такому разі багаторазове множення на матрицю \( A \) не дасть змоги отримати ітераційний вектор, напрямлений уздовж власного вектора \( x_1 \).
Після вибору початкового вектора виконуємо послідовні множення на матрицю \( A \):
\[
\begin{gathered}
y^{(1)}=A\cdot y^{(0)},\\[4pt]
y^{(2)}=A\cdot y^{(1)},\\[4pt]
\dots\\[4pt]
y^{(k)}=A\cdot y^{(k-1)}.
\end{gathered}
\]
Для другої ітерації маємо
\[
y^{(2)}=A\cdot y^{(1)}=A\cdot A\cdot y^{(0)}=A^2\cdot y^{(0)}.
\]
Аналогічно на \( k \)-й ітерації
\[
y^{(k)}=A\cdot y^{(k-1)}=A^k\cdot y^{(0)}.
\]
Саме через використання послідовних степенів матриці цей алгоритм називають степеневим методом.
Наближене значення \( \lambda_1 \) можна обчислювати за відношенням відповідних компонент двох сусідніх векторів:
\[
\lambda_1^{(k)}=\frac{y_j^{(k)}}{y_j^{(k-1)}}.
\]
Тут \( y_j^{(k-1)} \) і \( y_j^{(k)} \) — компоненти векторів \( y^{(k-1)} \) та \( y^{(k)} \) з однаковим номером \( j \).
Увесь ітераційний процес можна записати так:
\[
\begin{gathered}
y^{(1)}=A\cdot y^{(0)},
\qquad
\lambda_1^{(1)}=\frac{y_j^{(1)}}{y_j^{(0)}},\\[4pt]
y^{(2)}=A\cdot y^{(1)},
\qquad
\lambda_1^{(2)}=\frac{y_j^{(2)}}{y_j^{(1)}},\\[4pt]
\dots,
\qquad
\dots,\\[4pt]
y^{(k)}=A\cdot y^{(k-1)},
\qquad
\lambda_1^{(k)}=\frac{y_j^{(k)}}{y_j^{(k-1)}}.
\end{gathered}
\]
Номер \( j \) потрібно вибирати так, щоб знаменник \( y_j^{(k-1)} \) не дорівнював нулю і не був надто малим за модулем. Інакше ділення може бути неможливим або неточним.
На практиці часто використовують компоненту з найбільшим модулем:
\[
|y_j^{(k-1)}|=\max_{1\leq i\leq n}|y_i^{(k-1)}|.
\]
Такий вибір зменшує ризик ділення на мале число.
Збіжність Степеневого Методу: Як Виділяється Шуканий Вектор
Підставимо розклад початкового вектора в загальну формулу ітерацій:
\[
y^{(k)}=A^k\cdot y^{(0)}.
\]
Оскільки
\[
y^{(0)}=c_1\cdot x_1+c_2\cdot x_2+\dots+c_n\cdot x_n,
\]
то
\[
y^{(k)}=A^k\cdot\left(c_1\cdot x_1+c_2\cdot x_2+\dots+c_n\cdot x_n\right)=c_1\cdot A^k\cdot x_1+c_2\cdot A^k\cdot x_2+\dots+c_n\cdot A^k\cdot x_n.
\]
Використаємо властивість
\[
A^k\cdot x_i=\lambda_i^k\cdot x_i.
\]
Тоді
\[
y^{(k)}=c_1\cdot\lambda_1^k\cdot x_1+c_2\cdot\lambda_2^k\cdot x_2+\dots+c_n\cdot\lambda_n^k\cdot x_n.
\]
Винесемо \( \lambda_1^k \) за дужки:
\[
y^{(k)}
=
\lambda_1^k\cdot
\left(
c_1\cdot x_1+
c_2\cdot
\left(
\frac{\lambda_2}{\lambda_1}
\right)^k
\cdot x_2+
\dots+
c_n\cdot
\left(
\frac{\lambda_n}{\lambda_1}
\right)^k
\cdot x_n
\right).
\]
Оскільки \( \lambda_1 \) є єдиним домінантним власним значенням, для всіх \( i=2,3,\dots,n \) виконується нерівність
\[
\left|\frac{\lambda_i}{\lambda_1}\right|<1.
\]
Тому зі збільшенням \( k \)
\[
\left(\frac{\lambda_i}{\lambda_1}\right)^k\to 0,\qquad i=2,3,\dots,n.
\]
Отже, вплив доданків, пов’язаних із власними векторами \( x_2,x_3,\dots,x_n \), поступово зменшується. Для достатньо великого \( k \) основну роль у векторі \( y^{(k)} \) відіграє доданок, пов’язаний із \( x_1 \):
\[
y^{(k)}\approx c_1\cdot\lambda_1^k\cdot x_1.
\]
Звідси випливає, що ітераційний вектор поступово наближається за напрямком до власного вектора \( x_1 \). При цьому відношення відповідних компонент сусідніх векторів наближається до домінантного власного значення:
\[
\frac{y_j^{(k)}}{y_j^{(k-1)}}\to\lambda_1.
\]
Важливо розрізняти наближення ітераційного вектора до прямої, яку задає \( x_1 \), та збіжність його компонент до скінченних значень.
Якщо \( |\lambda_1|>1 \), модулі компонент \( y^{(k)} \) можуть необмежено зростати. Якщо ж \( |\lambda_1|<1 \), вони можуть прямувати до нуля. Проте співвідношення між компонентами стабілізуються, тому вектор дедалі точніше розміщується вздовж прямої, яку задає \( x_1 \).
Швидкість збіжності визначається відношенням
\[
\frac{|\lambda_2|}{|\lambda_1|}.
\]
Чим менше це відношення, тим швидше зменшується вплив доданків, пов’язаних з іншими власними значеннями. Якщо ж \( |\lambda_2| \) близьке до \( |\lambda_1| \), збіжність буде повільною.
Ітераційний процес можна завершити, коли два сусідні наближення власного значення відрізняються не більше ніж на задану точність:
\[
\left|\lambda_1^{(k)}-\lambda_1^{(k-1)}\right|\leq\varepsilon.
\]
Тут \( \varepsilon \) — задана точність обчислень.
Для надійнішої перевірки можна також використати нев’язку:
\[
r^{(k)}=A\cdot y^{(k)}-\lambda_1^{(k)}\cdot y^{(k)}.
\]
Якщо вектор \( y^{(k)} \) не нормовано, доцільно застосовувати відносний критерій:
\[
\frac{\left\|A\cdot y^{(k)}-\lambda_1^{(k)}\cdot y^{(k)}\right\|}{\left\|y^{(k)}\right\|}\leq\varepsilon.
\]
Цей критерій показує, наскільки точно знайдені наближення задовольняють рівняння власних значень
\[
A\cdot y=\lambda\cdot y.
\]
Нормування Ітераційного Вектора: Як Уникнути Чисельних Проблем
У звичайному степеневому методі компоненти вектора можуть ставати надто великими або надто малими. Це створює проблеми під час комп’ютерних обчислень.
Щоб зберегти стійкість алгоритму, після кожного множення отриманий вектор нормують. Спочатку обчислюють допоміжний вектор:
\[
z^{(k)}=A\cdot y^{(k-1)}.
\]
Потім знаходять наближення власного значення:
\[
\lambda_1^{(k)}=\frac{z_j^{(k)}}{y_j^{(k-1)}}.
\]
Після цього вектор \( z^{(k)} \) приводять до одиничної норми:
\[
y^{(k)}=\frac{z^{(k)}}{\left\|z^{(k)}\right\|}.
\]
Отже, степеневий метод із нормуванням має вигляд
\[
z^{(k)}=A\cdot y^{(k-1)},\qquad \lambda_1^{(k)}=\frac{z_j^{(k)}}{y_j^{(k-1)}},\qquad y^{(k)}=\frac{z^{(k)}}{\left\|z^{(k)}\right\|}.
\]
Початковий вектор також доцільно нормувати. Якщо спочатку вибрано ненульовий вектор \( \widetilde{y}^{(0)} \), то
\[
y^{(0)}=\frac{\widetilde{y}^{(0)}}{\left\|\widetilde{y}^{(0)}\right\|}.
\]
Тоді
\[
\left\|y^{(0)}\right\|=1.
\]
Нормування змінює довжину вектора, але залишає його на тій самій прямій, що проходить через початок координат. Тому воно не порушує принцип роботи степеневого методу.
Якщо домінантне власне значення від’ємне, нормовані вектори можуть почергово змінювати знак:
\[
x_1,\quad -x_1,\quad x_1,\quad -x_1,\quad\dots
\]
Це не є помилкою, оскільки вектори \( x_1 \) і \( -x_1 \) лежать на одній прямій та відповідають тому самому власному значенню.
На практиці також використовують варіант методу, у якому наближене власне значення обчислюють за допомогою скалярного добутку. Спочатку виконують множення та нормування:
\[
z^{(k)}=A\cdot y^{(k-1)},\qquad y^{(k)}=\frac{z^{(k)}}{\left\|z^{(k)}\right\|}.
\]
Після цього знаходять наближене власне значення:
\[
\lambda_1^{(k)}=\frac{\left(y^{(k)},A\cdot y^{(k)}\right)}{\left(y^{(k)},y^{(k)}\right)}.
\]
Цей вираз називають відношенням Релея.
Оскільки вектор \( y^{(k)} \) нормовано, то \( \left(y^{(k)},y^{(k)}\right)=1 \). Тому формула спрощується:
\[
\lambda_1^{(k)}=\left(y^{(k)},A\cdot y^{(k)}\right).
\]
Отже, степеневий метод послідовно виділяє частину початкового вектора, пов’язану з домінантним власним значенням. Завдяки нормуванню цей процес можна виконувати без надмірного зростання або зменшення компонент ітераційного вектора. У результаті отримуємо наближене найбільше за модулем власне значення матриці та відповідний йому власний вектор.
Найбільше за Модулем Власне Значення Матриці: Практика Степеневого Методу
Тепер розглянемо, як степеневий метод працює для матриць різних порядків. У кожному прикладі будемо нормувати ітераційний вектор, знаходити наближене власне значення за допомогою відношення Релея та порівнювати два сусідні наближення.
Приклад 1. Знайти найбільше за модулем власне значення матриці
\[
A=
\begin{pmatrix}
4 & 1\\
1 & 2
\end{pmatrix}
\]
та відповідний йому власний вектор з точністю \( \varepsilon=0.1 \)
Як початкове наближення виберемо вектор
\[
\widetilde{y}^{(0)}
=
\begin{pmatrix}
1\\
1
\end{pmatrix}.
\]
Знайдемо його евклідову норму:
\[
\left\|\widetilde{y}^{(0)}\right\|=\sqrt{1^2+1^2}=\sqrt{2}.
\]
Нормуємо початковий вектор:
\[
y^{(0)}
=
\frac{\widetilde{y}^{(0)}}{\left\|\widetilde{y}^{(0)}\right\|}
=
\frac{1}{\sqrt{2}}
\cdot
\begin{pmatrix}
1\\
1
\end{pmatrix}
\approx
\begin{pmatrix}
0.7071\\
0.7071
\end{pmatrix}.
\]
Виконаємо першу ітерацію:
\[
z^{(1)}=A\cdot y^{(0)}.
\]
Підставимо матрицю та початковий вектор:
\[
z^{(1)}
=
\begin{pmatrix}
4 & 1\\
1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.7071\\
0.7071
\end{pmatrix}.
\]
Обчислимо компоненти вектора:
\[
z^{(1)}
=
\begin{pmatrix}
4\cdot 0.7071+1\cdot 0.7071\\
1\cdot 0.7071+2\cdot 0.7071
\end{pmatrix}
\approx
\begin{pmatrix}
3.5355\\
2.1213
\end{pmatrix}.
\]
Знайдемо норму отриманого вектора:
\[
\left\|z^{(1)}\right\|=\sqrt{3.5355^2+2.1213^2}\approx 4.1231.
\]
Нормуємо вектор:
\[
y^{(1)}
=
\frac{z^{(1)}}{\left\|z^{(1)}\right\|}
=
\frac{1}{4.1231}
\cdot
\begin{pmatrix}
3.5355\\
2.1213
\end{pmatrix}
\approx
\begin{pmatrix}
0.8575\\
0.5145
\end{pmatrix}.
\]
Тепер обчислимо добуток \( A\cdot y^{(1)} \):
\[
A\cdot y^{(1)}
=
\begin{pmatrix}
4 & 1\\
1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.8575\\
0.5145
\end{pmatrix}.
\]
Маємо
\[
A\cdot y^{(1)}
=
\begin{pmatrix}
4\cdot 0.8575+1\cdot 0.5145\\
1\cdot 0.8575+2\cdot 0.5145
\end{pmatrix}
\approx
\begin{pmatrix}
3.9445\\
1.8865
\end{pmatrix}.
\]
Знайдемо перше наближення власного значення за допомогою відношення Релея:
\[
\lambda_1^{(1)}=\left(y^{(1)},A\cdot y^{(1)}\right).
\]
Оскільки вектор \( y^{(1)} \) має одиничну норму, отримуємо
\[
\lambda_1^{(1)}=0.8575\cdot 3.9445+0.5145\cdot 1.8865\approx 4.3529.
\]
Переходимо до другої ітерації. Уже обчислений добуток \( A\cdot y^{(1)} \) є вектором \( z^{(2)} \):
\[
z^{(2)}
=
\begin{pmatrix}
3.9445\\
1.8865
\end{pmatrix}.
\]
Його норма дорівнює
\[
\left\|z^{(2)}\right\|=\sqrt{3.9445^2+1.8865^2}\approx 4.3724.
\]
Тому
\[
y^{(2)}
=
\frac{z^{(2)}}{\left\|z^{(2)}\right\|}
=
\frac{1}{4.3724}
\cdot
\begin{pmatrix}
3.9445\\
1.8865
\end{pmatrix}
\approx
\begin{pmatrix}
0.9021\\
0.4315
\end{pmatrix}.
\]
Обчислимо наступний добуток:
\[
A\cdot y^{(2)}
=
\begin{pmatrix}
4 & 1\\
1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.9021\\
0.4315
\end{pmatrix}.
\]
Отримаємо
\[
A\cdot y^{(2)}
=
\begin{pmatrix}
4\cdot 0.9021+1\cdot 0.4315\\
1\cdot 0.9021+2\cdot 0.4315
\end{pmatrix}
\approx
\begin{pmatrix}
4.04\\
1.765
\end{pmatrix}.
\]
Друге наближення власного значення дорівнює
\[
\lambda_1^{(2)}=\left(y^{(2)},A\cdot y^{(2)}\right)=0.9021\cdot 4.04+0.4315\cdot 1.765\approx 4.4062.
\]
Перевіримо умову завершення:
\[
\left|\lambda_1^{(2)}-\lambda_1^{(1)}\right|=|4.4062-4.3529|=0.0533.
\]
Оскільки
\[
0.0533\leq 0.1,
\]
ітераційний процес зупиняємо.
Отже, найбільше за модулем власне значення матриці наближено дорівнює
\[
\lambda_1\approx 4.4062.
\]
За наближений власний вектор, який відповідає знайденому власному значенню, беремо останній нормований ітераційний вектор:
\[
x_1
\approx
\begin{pmatrix}
0.9021\\
0.4315
\end{pmatrix}.
\]
Приклад 2. Знайти найбільше за модулем власне значення матриці
\[
A=
\begin{pmatrix}
5 & 1 & 0\\
1 & 3 & 1\\
0 & 1 & 2
\end{pmatrix}
\]
та відповідний йому власний вектор з точністю \( \varepsilon=0.1 \)
Виберемо початковий вектор
\[
\widetilde{y}^{(0)}
=
\begin{pmatrix}
1\\
1\\
1
\end{pmatrix}.
\]
Його евклідова норма дорівнює
\[
\left\|\widetilde{y}^{(0)}\right\|=\sqrt{1^2+1^2+1^2}=\sqrt{3}.
\]
Нормуємо початковий вектор:
\[
y^{(0)}
=
\frac{\widetilde{y}^{(0)}}{\left\|\widetilde{y}^{(0)}\right\|}
=
\frac{1}{\sqrt{3}}
\cdot
\begin{pmatrix}
1\\
1\\
1
\end{pmatrix}
\approx
\begin{pmatrix}
0.5774\\
0.5774\\
0.5774
\end{pmatrix}.
\]
Виконаємо першу ітерацію:
\[
z^{(1)}=A\cdot y^{(0)}.
\]
Підставимо матрицю та вектор:
\[
z^{(1)}
=
\begin{pmatrix}
5 & 1 & 0\\
1 & 3 & 1\\
0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.5774\\
0.5774\\
0.5774
\end{pmatrix}.
\]
Обчислимо компоненти:
\[
z^{(1)}
=
\begin{pmatrix}
5\cdot 0.5774+1\cdot 0.5774+0\cdot 0.5774\\
1\cdot 0.5774+3\cdot 0.5774+1\cdot 0.5774\\
0\cdot 0.5774+1\cdot 0.5774+2\cdot 0.5774
\end{pmatrix}
\approx
\begin{pmatrix}
3.4641\\
2.8868\\
1.7321
\end{pmatrix}.
\]
Знайдемо норму:
\[
\left\|z^{(1)}\right\|=\sqrt{3.4641^2+2.8868^2+1.7321^2}\approx 4.8305.
\]
Тоді
\[
y^{(1)}
=
\frac{z^{(1)}}{\left\|z^{(1)}\right\|}
=
\frac{1}{4.8305}
\cdot
\begin{pmatrix}
3.4641\\
2.8868\\
1.7321
\end{pmatrix}
\approx
\begin{pmatrix}
0.7171\\
0.5976\\
0.3586
\end{pmatrix}.
\]
Знайдемо добуток \( A\cdot y^{(1)} \):
\[
A\cdot y^{(1)}
=
\begin{pmatrix}
5 & 1 & 0\\
1 & 3 & 1\\
0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.7171\\
0.5976\\
0.3586
\end{pmatrix}.
\]
Після множення маємо
\[
A\cdot y^{(1)}
=
\begin{pmatrix}
5\cdot 0.7171+1\cdot 0.5976+0\cdot 0.3586\\
1\cdot 0.7171+3\cdot 0.5976+1\cdot 0.3586\\
0\cdot 0.7171+1\cdot 0.5976+2\cdot 0.3586
\end{pmatrix}
\approx
\begin{pmatrix}
4.1833\\
2.8685\\
1.3148
\end{pmatrix}.
\]
Обчислимо перше наближення власного значення:
\[
\lambda_1^{(1)}=\left(y^{(1)},A\cdot y^{(1)}\right)=0.7171\cdot 4.1833+0.5976\cdot 2.8685+0.3586\cdot 1.3148\approx 5.1857.
\]
Переходимо до другої ітерації:
\[
z^{(2)}
=
\begin{pmatrix}
4.1833\\
2.8685\\
1.3148
\end{pmatrix}.
\]
Знайдемо норму:
\[
\left\|z^{(2)}\right\|=\sqrt{4.1833^2+2.8685^2+1.3148^2}\approx 5.24.
\]
Нормуємо вектор:
\[
y^{(2)}
=
\frac{z^{(2)}}{\left\|z^{(2)}\right\|}
=
\frac{1}{5.24}
\cdot
\begin{pmatrix}
4.1833\\
2.8685\\
1.3148
\end{pmatrix}
\approx
\begin{pmatrix}
0.7983\\
0.5474\\
0.2509
\end{pmatrix}.
\]
Обчислимо
\[
A\cdot y^{(2)}
=
\begin{pmatrix}
5 & 1 & 0\\
1 & 3 & 1\\
0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.7983\\
0.5474\\
0.2509
\end{pmatrix}.
\]
Отримаємо
\[
A\cdot y^{(2)}
=
\begin{pmatrix}
5\cdot 0.7983+1\cdot 0.5474+0\cdot 0.2509\\
1\cdot 0.7983+3\cdot 0.5474+1\cdot 0.2509\\
0\cdot 0.7983+1\cdot 0.5474+2\cdot 0.2509
\end{pmatrix}
\approx
\begin{pmatrix}
4.5392\\
2.6916\\
1.0493
\end{pmatrix}.
\]
Друге наближення власного значення дорівнює
\[
\lambda_1^{(2)}=\left(y^{(2)},A\cdot y^{(2)}\right)=0.7983\cdot 4.5392+0.5474\cdot 2.6916+0.2509\cdot 1.0493\approx 5.3606.
\]
Перевіримо умову завершення:
\[
\left|\lambda_1^{(2)}-\lambda_1^{(1)}\right|=|5.3606-5.1857|=0.1749.
\]
Оскільки
\[
0.1749>0.1,
\]
потрібно виконати ще одну ітерацію.
Маємо
\[
z^{(3)}
=
\begin{pmatrix}
4.5392\\
2.6916\\
1.0493
\end{pmatrix}.
\]
Знайдемо норму:
\[
\left\|z^{(3)}\right\|=\sqrt{4.5392^2+2.6916^2+1.0493^2}\approx 5.3805.
\]
Тоді
\[
y^{(3)}
=
\frac{z^{(3)}}{\left\|z^{(3)}\right\|}
=
\frac{1}{5.3805}
\cdot
\begin{pmatrix}
4.5392\\
2.6916\\
1.0493
\end{pmatrix}
\approx
\begin{pmatrix}
0.8436\\
0.5002\\
0.195
\end{pmatrix}.
\]
Обчислимо
\[
A\cdot y^{(3)}
=
\begin{pmatrix}
5 & 1 & 0\\
1 & 3 & 1\\
0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.8436\\
0.5002\\
0.195
\end{pmatrix}.
\]
Маємо
\[
A\cdot y^{(3)}
=
\begin{pmatrix}
5\cdot 0.8436+1\cdot 0.5002+0\cdot 0.195\\
1\cdot 0.8436+3\cdot 0.5002+1\cdot 0.195\\
0\cdot 0.8436+1\cdot 0.5002+2\cdot 0.195
\end{pmatrix}
\approx
\begin{pmatrix}
4.7184\\
2.5394\\
0.8903
\end{pmatrix}.
\]
Третє наближення власного значення дорівнює
\[
\lambda_1^{(3)}=\left(y^{(3)},A\cdot y^{(3)}\right)=0.8436\cdot 4.7184+0.5002\cdot 2.5394+0.195\cdot 0.8903\approx 5.4246.
\]
Перевіримо умову завершення:
\[
\left|\lambda_1^{(3)}-\lambda_1^{(2)}\right|=|5.4246-5.3606|=0.064.
\]
Оскільки
\[
0.064\leq 0.1,
\]
ітераційний процес зупиняємо.
Отже, найбільше за модулем власне значення матриці наближено дорівнює
\[
\lambda_1\approx 5.4246.
\]
За наближений власний вектор, який відповідає знайденому власному значенню, беремо останній нормований ітераційний вектор:
\[
x_1
\approx
\begin{pmatrix}
0.8436\\
0.5002\\
0.195
\end{pmatrix}.
\]
Приклад 3. Знайти найбільше за модулем власне значення матриці
\[
A=
\begin{pmatrix}
6 & 1 & 0 & 0\\
1 & 4 & 1 & 0\\
0 & 1 & 3 & 1\\
0 & 0 & 1 & 2
\end{pmatrix}
\]
та відповідний йому власний вектор з точністю \( \varepsilon=0.1 \)
Виберемо початковий вектор
\[
\widetilde{y}^{(0)}
=
\begin{pmatrix}
1\\
1\\
1\\
1
\end{pmatrix}.
\]
Його евклідова норма дорівнює
\[
\left\|\widetilde{y}^{(0)}\right\|=\sqrt{1^2+1^2+1^2+1^2}=2.
\]
Тому нормований початковий вектор має вигляд
\[
y^{(0)}
=
\frac{\widetilde{y}^{(0)}}{\left\|\widetilde{y}^{(0)}\right\|}
=
\frac{1}{2}
\cdot
\begin{pmatrix}
1\\
1\\
1\\
1
\end{pmatrix}
=
\begin{pmatrix}
0.5\\
0.5\\
0.5\\
0.5
\end{pmatrix}.
\]
Виконаємо першу ітерацію:
\[
z^{(1)}=A\cdot y^{(0)}.
\]
Підставимо матрицю та вектор:
\[
z^{(1)}
=
\begin{pmatrix}
6 & 1 & 0 & 0\\
1 & 4 & 1 & 0\\
0 & 1 & 3 & 1\\
0 & 0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.5\\
0.5\\
0.5\\
0.5
\end{pmatrix}.
\]
Після множення отримаємо
\[
z^{(1)}
=
\begin{pmatrix}
6\cdot 0.5+1\cdot 0.5+0\cdot 0.5+0\cdot 0.5\\
1\cdot 0.5+4\cdot 0.5+1\cdot 0.5+0\cdot 0.5\\
0\cdot 0.5+1\cdot 0.5+3\cdot 0.5+1\cdot 0.5\\
0\cdot 0.5+0\cdot 0.5+1\cdot 0.5+2\cdot 0.5
\end{pmatrix}
=
\begin{pmatrix}
3.5\\
3\\
2.5\\
1.5
\end{pmatrix}.
\]
Знайдемо норму:
\[
\left\|z^{(1)}\right\|=\sqrt{3.5^2+3^2+2.5^2+1.5^2}\approx 5.4544.
\]
Тоді
\[
y^{(1)}
=
\frac{z^{(1)}}{\left\|z^{(1)}\right\|}
=
\frac{1}{5.4544}
\cdot
\begin{pmatrix}
3.5\\
3\\
2.5\\
1.5
\end{pmatrix}
\approx
\begin{pmatrix}
0.6417\\
0.55\\
0.4583\\
0.275
\end{pmatrix}.
\]
Обчислимо добуток
\[
A\cdot y^{(1)}
=
\begin{pmatrix}
6 & 1 & 0 & 0\\
1 & 4 & 1 & 0\\
0 & 1 & 3 & 1\\
0 & 0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.6417\\
0.55\\
0.4583\\
0.275
\end{pmatrix}.
\]
Маємо
\[
A\cdot y^{(1)}
=
\begin{pmatrix}
6\cdot 0.6417+1\cdot 0.55+0\cdot 0.4583+0\cdot 0.275\\
1\cdot 0.6417+4\cdot 0.55+1\cdot 0.4583+0\cdot 0.275\\
0\cdot 0.6417+1\cdot 0.55+3\cdot 0.4583+1\cdot 0.275\\
0\cdot 0.6417+0\cdot 0.55+1\cdot 0.4583+2\cdot 0.275
\end{pmatrix}
\approx
\begin{pmatrix}
4.4002\\
3.3001\\
2.2001\\
1.0084
\end{pmatrix}.
\]
Перше наближення власного значення дорівнює
\[
\lambda_1^{(1)}=\left(y^{(1)},A\cdot y^{(1)}\right)=0.6417\cdot 4.4002+0.55\cdot 3.3001+0.4583\cdot 2.2001+0.275\cdot 1.0084\approx 5.9244.
\]
На другій ітерації маємо
\[
z^{(2)}
=
\begin{pmatrix}
4.4002\\
3.3001\\
2.2001\\
1.0084
\end{pmatrix}.
\]
Його норма дорівнює
\[
\left\|z^{(2)}\right\|=\sqrt{4.4002^2+3.3001^2+2.2001^2+1.0084^2}\approx 6.0091.
\]
Тому
\[
y^{(2)}
=
\frac{z^{(2)}}{\left\|z^{(2)}\right\|}
=
\frac{1}{6.0091}
\cdot
\begin{pmatrix}
4.4002\
3.3001\
2.2001\
1.0084
\end{pmatrix}
\approx
\begin{pmatrix}
0.7322\\
0.5492\\
0.3661\\
0.1678
\end{pmatrix}.
\]
Обчислимо
\[
A\cdot y^{(2)}
=
\begin{pmatrix}
6 & 1 & 0 & 0\\
1 & 4 & 1 & 0\\
0 & 1 & 3 & 1\\
0 & 0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.7322\\
0.5492\\
0.3661\\
0.1678
\end{pmatrix}.
\]
Після множення отримаємо
\[
A\cdot y^{(2)}
=
\begin{pmatrix}
6\cdot 0.7322+1\cdot 0.5492+0\cdot 0.3661+0\cdot 0.1678\\
1\cdot 0.7322+4\cdot 0.5492+1\cdot 0.3661+0\cdot 0.1678\\
0\cdot 0.7322+1\cdot 0.5492+3\cdot 0.3661+1\cdot 0.1678\\
0\cdot 0.7322+0\cdot 0.5492+1\cdot 0.3661+2\cdot 0.1678
\end{pmatrix}
\approx
\begin{pmatrix}
4.9427\\
3.2951\\
1.8154\\
0.7017
\end{pmatrix}.
\]
Друге наближення власного значення дорівнює
\[
\lambda_1^{(2)}=\left(y^{(2)},A\cdot y^{(2)}\right)=0.7322\cdot 4.9427+0.5492\cdot 3.2951+0.3661\cdot 1.8154+0.1678\cdot 0.7017\approx 6.2113.
\]
Перевіримо умову завершення:
\[
\left|\lambda_1^{(2)}-\lambda_1^{(1)}\right|=|6.2113-5.9244|=0.2869.
\]
Оскільки
\[
0.2869>0.1,
\]
продовжуємо обчислення.
На третій ітерації
\[
z^{(3)}
=
\begin{pmatrix}
4.9427\\
3.2951\\
1.8154\\
0.7017
\end{pmatrix}.
\]
Знайдемо норму:
\[
\left\|z^{(3)}\right\|=\sqrt{4.9427^2+3.2951^2+1.8154^2+0.7017^2}\approx 6.2511.
\]
Тоді
\[
y^{(3)}
=
\frac{z^{(3)}}{\left\|z^{(3)}\right\|}
=
\frac{1}{6.2511}
\cdot
\begin{pmatrix}
4.9427\\
3.2951\\
1.8154\\
0.7017
\end{pmatrix}
\approx
\begin{pmatrix}
0.7907\\
0.5271\\
0.2904\\
0.1123
\end{pmatrix}.
\]
Обчислимо наступний добуток:
\[
A\cdot y^{(3)}
=
\begin{pmatrix}
6 & 1 & 0 & 0\\
1 & 4 & 1 & 0\\
0 & 1 & 3 & 1\\
0 & 0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.7907\\
0.5271\\
0.2904\\
0.1123
\end{pmatrix}.
\]
Отримаємо
\[
A\cdot y^{(3)}
=
\begin{pmatrix}
6\cdot 0.7907+1\cdot 0.5271+0\cdot 0.2904+0\cdot 0.1123\\
1\cdot 0.7907+4\cdot 0.5271+1\cdot 0.2904+0\cdot 0.1123\\
0\cdot 0.7907+1\cdot 0.5271+3\cdot 0.2904+1\cdot 0.1123\\
0\cdot 0.7907+0\cdot 0.5271+1\cdot 0.2904+2\cdot 0.1123
\end{pmatrix}
\approx
\begin{pmatrix}
5.2713\\
3.1896\\
1.5106\\
0.5149
\end{pmatrix}.
\]
Третє наближення власного значення дорівнює
\[
\lambda_1^{(3)}=\left(y^{(3)},A\cdot y^{(3)}\right)=0.7907\cdot 5.2713+0.5271\cdot 3.1896+0.2904\cdot 1.5106+0.1123\cdot 0.5149\approx 6.3458.
\]
Перевіримо різницю:
\[
\left|\lambda_1^{(3)}-\lambda_1^{(2)}\right|=|6.3458-6.2113|=0.1345.
\]
Оскільки
\[
0.1345>0.1,
\]
потрібно виконати четверту ітерацію.
Маємо
\[
z^{(4)}
=
\begin{pmatrix}
5.2713\\
3.1896\\
1.5106\\
0.5149
\end{pmatrix}.
\]
Його норма дорівнює
\[
\left\|z^{(4)}\right\|=\sqrt{5.2713^2+3.1896^2+1.5106^2+0.5149^2}\approx 6.3645.
\]
Тому
\[
y^{(4)}
=
\frac{z^{(4)}}{\left\|z^{(4)}\right\|}
=
\frac{1}{6.3645}
\cdot
\begin{pmatrix}
5.2713\\
3.1896\\
1.5106\\
0.5149
\end{pmatrix}
\approx
\begin{pmatrix}
0.8282\\
0.5012\\
0.2373\\
0.0809
\end{pmatrix}.
\]
Обчислимо
\[
A\cdot y^{(4)}
=
\begin{pmatrix}
6 & 1 & 0 & 0\\
1 & 4 & 1 & 0\\
0 & 1 & 3 & 1\\
0 & 0 & 1 & 2
\end{pmatrix}
\cdot
\begin{pmatrix}
0.8282\\
0.5012\\
0.2373\\
0.0809
\end{pmatrix}.
\]
Після множення маємо
\[
A\cdot y^{(4)}
=
\begin{pmatrix}
6\cdot 0.8282+1\cdot 0.5012+0\cdot 0.2373+0\cdot 0.0809\\
1\cdot 0.8282+4\cdot 0.5012+1\cdot 0.2373+0\cdot 0.0809\\
0\cdot 0.8282+1\cdot 0.5012+3\cdot 0.2373+1\cdot 0.0809\\
0\cdot 0.8282+0\cdot 0.5012+1\cdot 0.2373+2\cdot 0.0809
\end{pmatrix}
\approx
\begin{pmatrix}
5.4705\\
3.0702\\
1.2941\\
0.3992
\end{pmatrix}.
\]
Четверте наближення власного значення дорівнює
\[
\lambda_1^{(4)}=\left(y^{(4)},A\cdot y^{(4)}\right)=0.8282\cdot 5.4705+0.5012\cdot 3.0702+0.2373\cdot 1.2941+0.0809\cdot 0.3992\approx 6.4089.
\]
Перевіримо умову завершення:
\[
\left|\lambda_1^{(4)}-\lambda_1^{(3)}\right|=|6.4089-6.3458|=0.0631.
\]
Оскільки
\[
0.0631\leq 0.1,
\]
ітераційний процес зупиняємо.
Отже, найбільше за модулем власне значення матриці наближено дорівнює
\[
\lambda_1\approx 6.4089.
\]
За наближений власний вектор, який відповідає знайденому власному значенню, беремо останній нормований ітераційний вектор:
\[
x_1
\approx
\begin{pmatrix}
0.8282\\
0.5012\\
0.2373\\
0.0809
\end{pmatrix}.
\]
Що Вивчати Далі: Методи для Нових Задач
Після степеневого методу варто перейти до способів, які розв’язують інші задачі спектрального аналізу. Вони допоможуть знаходити наступні власні значення та працювати з матрицями спеціального вигляду.
- Метод вичерпування: Як знайти друге власне значення — У статті буде показано, як після знаходження домінантного власного значення перейти до обчислення наступного.
- Метод обертання: Як дослідити симетричну матрицю — Матеріал пояснить, як послідовні ортогональні перетворення приводять симетричну матрицю до майже діагонального вигляду.
- Метод половинного ділення: Як працювати з тридіагональною матрицею — Стаття розповість, як звужувати проміжки пошуку та наближено визначати спектр симетричної тридіагональної матриці.
Найбільше за Модулем Власне Значення Матриці: Реалізуйте Алгоритм Самостійно
Якщо вам подобається програмування, спробуйте перетворити блок-схему на повноцінну програму своєю улюбленою мовою. Така практика допоможе краще зрозуміти, як степеневий метод переходить від математичних формул до послідовних обчислень, а також дасть змогу перевірити роботу алгоритму для різних матриць і значень точності.
