Обернена матриця — це інструмент, який дозволяє відновити вихідну матрицю після множення. У задачах лінійної алгебри часто виникає потреба відновити початковий вектор або розв’язок системи після множення на матрицю. Ми вже ознайомились із підходом через розв’язування відповідних систем лінійних алгебраїчних рівнянь. Але виникає питання: чи є спосіб працювати з матрицею як з єдиним об’єктом, задаючи чітку процедуру без необхідності розв’язувати окремі системи рівнянь? Саме так працює метод Гауса-Жордана.
У цій статті ми з’ясуємо, чому цей підхід є коректним, як він пов’язаний з елементарними перетвореннями рядків та як виглядає алгоритм у матричному записі. Без зайвих ускладнень, але з чіткими послідовними кроками — так, як це потрібно для впевненого застосування на практиці.
Обернена Матриця: Що Саме Ми Шукаємо і Навіщо?
Почнімо з основ. Для квадратної матриці \( A \) (розміру \( n\times n \)) обернена матриця \( A^{-1} \) — це така матриця, що при множенні дає одиничну матрицю. Тобто виконується:
\[
A \cdot A^{-1} = I, \qquad A^{-1} \cdot A = I,
\]
де \( I \) — одинична матриця:
\[
I=
\begin{pmatrix}
1&0&\cdots&0\\
0&1&\cdots&0\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&1
\end{pmatrix}.
\]
Навіщо це потрібно? Наприклад, якщо у вас є матричне рівняння \(A \cdot x = b \), то при існуванні \( A^{-1} \) розв’язок записується компактно:
\[
x=A^{-1} \cdot b.
\]
Запис короткий і зручний. Але на практиці важливо мати метод, який дозволяє безпосередньо знаходити \( A^{-1} \), працюючи з матрицею як з єдиним об’єктом. Саме на це і спрямований метод Гауса-Жордана.
Метод Гауса-Жордана: Обернена Матриця Через Елементарні Перетворення
Метод Гауса-Жордана ґрунтується на елементарних перетвореннях рядків — це ті ж операції, які застосовуються під час зведення матриці до більш зручного вигляду. Ідея методу проста: ми перетворюємо матрицю \( A \) так, щоб отримати одиничну матрицю. Паралельно, під тими самими перетвореннями, формується матриця, яка й буде оберненою.
Як це організувати? Спочатку складаємо розширену матрицю, приєднавши до \( A \) одиничну матрицю \( I \):
\[
\left(
\begin{array}{cccc|cccc}
a_{11} & a_{12} & \cdots & a_{1n} & 1 & 0 & \cdots & 0 \\
a_{21} & a_{22} & \cdots & a_{2n} & 0 & 1 & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} & 0 & 0 & \cdots & 1
\end{array}
\right).
\]
Після цього виконуємо елементарні перетворення рядків, щоб ліва частина стала одиничною. Важливо, що ці перетворення застосовуються як до лівого, так і до правого блоку, оскільки змінюються всі рядки розширеної матриці.
Якщо матриця \( A \) невироджена (тобто її детермінант не дорівнює нулю), на виході отримуємо:
\[
\left(\begin{array}{c|c}
A & I
\end{array}\right)
\Longrightarrow
\left(\begin{array}{c|c}
I & A^{-1}
\end{array}\right),
\qquad \det(A) \ne 0.
\]
Таким чином, правий блок і є шуканою оберненою матрицею \( A^{-1} \).
Обернена Матриця: Алгоритм Гауса-Жордана Крок за Кроком
Переходимо до формального опису. Нехай маємо квадратну матрицю розмірності \( n\times n \):
\[
A=\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n}\\
a_{21} & a_{22} & \cdots & a_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{pmatrix}.
\]
Наша мета — за допомогою послідовних елементарних перетворень над рядками отримати обернену матрицю \( A^{-1} \). Для цього, як уже зазначалося вище, складаємо розширену матрицю \( \left(A\mid I\right) \), тобто приєднуємо до \( A \) одиничну матрицю \( I \) такого ж розміру:
\[
\left( A \mid I \right)=
\left(
\begin{array}{cccc|cccc}
a_{11} & a_{12} & \cdots & a_{1n} & 1 & 0 & \cdots & 0 \\
a_{21} & a_{22} & \cdots & a_{2n} & 0 & 1 & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} & 0 & 0 & \cdots & 1
\end{array}
\right).
\]
Далі діємо по стовпцях зліва направо. На кожному кроці беремо опорний елемент у поточному стовпці, робимо його рівним \( 1 \), а потім занулюємо всі інші елементи цього стовпця — і нижче, і вище опорного рядка. У підсумку ліва частина має перетворитися на \( I \), а права частина тоді дає \( A^{-1} \).
Отже, починаємо з опорного елемента \( a_{11} \). Спочатку робимо його рівним \( 1 \) (ділимо перший рядок на \( a_{11} \)), а потім занулюємо всі елементи першого стовпця в рядках \( 2,3,\dots,n \). Після виконання цього кроку отримаємо матрицю виду:
\[
\left(A^{(1)} \mid B^{(1)}\right)=
\left(
\begin{array}{cccc|cccc}
1 & a^{(1)}_{12} & \cdots & a^{(1)}_{1n} & b^{(1)}_{11} & b^{(1)}_{12} & \cdots & b^{(1)}_{1n}\\
0 & a^{(1)}_{22} & \cdots & a^{(1)}_{2n} & b^{(1)}_{21} & b^{(1)}_{22} & \cdots & b^{(1)}_{2n}\\
\vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \ddots & \vdots\\
0 & a^{(1)}_{n2} & \cdots & a^{(1)}_{nn} & b^{(1)}_{n1} & b^{(1)}_{n2} & \cdots & b^{(1)}_{nn}
\end{array}
\right).
\]
Елементи лівої частини після першого кроку обчислюються за формулою:
\[
a_{ij}^{(1)} = a_{ij} – \frac{a_{i1}}{a_{11}}\,a_{1j},\qquad i=2,\dots,n,\; j=1,\dots,n.
\]
А для правої частини маємо таку ж схему:
\[
b_{ij}^{(1)} = b_{ij} – \frac{a_{i1}}{a_{11}}\, b_{1j}, \qquad i=2,\dots,n,\; j=1,\dots,n,
\]
де на старті \( B^{(0)}=I \).
Далі виключаємо з розгляду перший рядок і перший стовпець та застосовуємо аналогічну процедуру до підматриці, що починається з елемента \( a^{(1)}_{22} \). Тепер потрібно зробити опорний елемент у позиції \( (2,2) \) рівним \( 1 \) і занулити всі елементи другого стовпця в рядках \( i\neq2 \). Після цього в другому стовпці лівої частини залишається одиниця на діагоналі й нулі в усіх інших рядках.
Продовжуючи цей процес для кожного наступного стовпця, на \( k \)-му кроці (для \( k=1,\dots,n \)) працюємо з опорним елементом \( a^{(k-1)}_{kk} \) і занулюємо елементи в стовпці \( k \) у всіх рядках \( i\neq k \). Для лівої частини узагальнені формули мають вигляд:
\[
\begin{aligned}
a^{(k)}_{kj} &= \frac{a^{(k-1)}_{kj}}{a^{(k-1)}_{kk}}, \qquad j=1,\dots,n,\\
a^{(k)}_{ij} &= a^{(k-1)}_{ij}-a^{(k-1)}_{ik}\,a^{(k)}_{kj}, \qquad i=1,\dots,n,\ i\neq k,\ j=1,\dots,n.
\end{aligned}
\]
Для правої частини формули аналогічні, тобто:
\[
\begin{aligned}
b^{(k)}_{kj} &= \frac{b^{(k-1)}_{kj}}{a^{(k-1)}_{kk}}, \qquad j=1,\dots,n,\\
b^{(k)}_{ij} &= b^{(k-1)}_{ij}-a^{(k-1)}_{ik}\,b^{(k)}_{kj}, \qquad i=1,\dots,n,\ i\neq k,\ j=1,\dots,n.
\end{aligned}
\]
Після виконання кроків \( k=1,2,\dots,n \) ліва частина розширеної матриці перетворюється на одиничну матрицю:
\[
\left( A^{(n)} \mid B^{(n)} \right)=\left( I \mid A^{-1} \right).
\]
Отже, права частина після завершення всіх перетворень і є шуканою оберненою матрицею \( A^{-1} \).
Опорний елемент дорівнює нулю — як діяти далі?
На практиці може трапитися, що опорний елемент, з якого ви хочете почати занулення (наприклад, \( a_{11} \) або пізніше \( a^{(1)}_{22} \), \( a^{(2)}_{33} \) тощо), дорівнює нулю. У такій ситуації достатньо виконати перестановку рядків, щоб у позиції опорного елемента опинилося ненульове число. Оскільки перестановка рядків є елементарним перетворенням, алгоритм можна продовжувати стандартно.
Якщо ж у відповідному стовпці всі можливі кандидати на опорний елемент нульові, тоді привести ліву частину до \( I \) неможливо. А отже обернена матриця не існує (матриця \( A \) є виродженою).
Обернена Матриця на Практиці: Від Перетворень до Відповіді
Тепер перейдемо до практики, бо саме на прикладах метод Гауса-Жордана стає по-справжньому зрозумілим. Ми будемо працювати з розширеною матрицею \( \left(A\mid I\right) \) і крок за кроком перетворювати лівий блок у \( I \).
Приклад 1. Знайти обернену матрицю
\[
A=
\begin{pmatrix}
2 & -1 & 4 \\
4 & -2 & 8 \\
6 & -3 & 12
\end{pmatrix}.
\]
Складаємо розширену матрицю:
\[
\left(A^{(0)}\mid B^{(0)}\right)=
\left(
\begin{array}{ccc|ccc}
2 & -1 & 4 & 1 & 0 & 0 \\
4 & -2 & 8 & 0 & 1 & 0 \\
6 & -3 & 12 & 0 & 0 & 1
\end{array}
\right).
\]
Починаємо з опорного елемента \( a_{11}=2 \). Ділимо перший рядок на \( 2 \), після чого занулюємо перший стовпець у рядках \( 2 \) і \( 3 \):
- Від другого рядка віднімаємо перший, помножений на \( 4 \).
- Від третього рядка віднімаємо перший, помножений на \( 6 \).
Отримуємо:
\[
\left(A^{(1)} \mid B^{(1)}\right)=
\left(
\begin{array}{ccc|ccc}
1 & -0.5 & 2 & 0.5 & 0 & 0 \\
0 & 0 & 0 & -2 & 1 & 0 \\
0 & 0 & 0 & -3 & 0 & 1
\end{array}
\right).
\]
Тут видно ключовий момент: у лівій частині з’явилися нульові рядки, а в правій частині відповідні рядки не є нульовими. Це означає, що перетворити лівий блок у \( I \) неможливо, тобто оберненої матриці для \( A \) не існує. Причина зрозуміла: рядки матриці лінійно залежні (другий — це \( 2 \) рази перший, третій — це \( 3 \) рази перший).
Приклад 2. Знайти обернену матрицю
\[
A=
\begin{pmatrix}
5 & -6 & 7 & 1\\
7 & 10 & -9 & 8\\
3 & 3 & 5 & 1\\
-10 & 2 & 3 & 4
\end{pmatrix}.
\]
Записуємо розширену матрицю:
\[
\left(A^{(0)} \mid B^{(0)}\right)=
\left(
\begin{array}{cccc|cccc}
5 & -6 & 7 & 1 & 1 & 0 & 0 & 0 \\
7 & 10 & -9 & 8 & 0 & 1 & 0 & 0 \\
3 & 3 & 5 & 1 & 0 & 0 & 1 & 0 \\
-10 & 2 & 3 & 4 & 0 & 0 & 0 & 1
\end{array}
\right).
\]
На першому кроці робимо опорний елемент у позиції \( (1,1) \) рівним \( 1 \) і занулюємо перший стовпець у решті рядків:
- Від другого рядка віднімаємо перший, помножений на \( 7 \).
- Від третього рядка віднімаємо перший, помножений на \( 3 \).
- До четвертого рядка додаємо перший, помножений на \( 10 \).
Після цього маємо:
\[
\left(A^{(1)}\mid B^{(1)}\right)=
\left(
\begin{array}{cccc|cccc}
1.&-1.2&1.4&0.2&0.2&0&0&0\\
0&18.4&-18.8&6.6&-1.4&1&0&0\\
0&6.6&0.8&0.4&-0.6&0&1&0\\
0&-10&17&6&2&0&0&1
\end{array}
\right).
\]
Далі переходимо до другого стовпця: нормалізуємо опорний елемент у позиції \( (2,2) \) і занулюємо всі інші елементи цього стовпця:
- До першого рядка додаємо другий, помножений на \( 1.2 \).
- Від третього рядка віднімаємо другий, помножений на \( 6.6 \).
- До четвертого рядка додаємо другий, помножений на \( 10 \).
Отримуємо:
\[
\left(A^{(2)}\mid B^{(2)}\right)=
\left(
\begin{array}{cccc|cccc}
1&0&0.174&0.63&0.109&0.065&0&0\\
0&1&-1.022&0.359&-0.076&0.054&0&0\\
0&0&7.543&-1.967&-0.098&-0.359&1&0\\
0&0&6.783&9.587&1.239&0.543&0&1
\end{array}
\right).
\]
Після аналогічних перетворень для третього та четвертого стовпців ліва частина стає одиничною матрицею, а права — шуканою оберненою. У підсумку:
\[
\left(A^{(4)}\mid B^{(4)}\right)=
\left(
\begin{array}{cccc|cccc}
1&0&0&0&0.032&0.022&0.030&-0.060\\
0&1&0&0&-0.1&-0.001&0.143&-0.008\\
0&0&1&0&0.018&-0.028&0.112&0.023\\
0&0&0&1&0.117&0.076&-0.079&0.088
\end{array}
\right),
\]
тобто
\[
A^{-1}\approx
\begin{pmatrix}
0.032 & 0.022 & 0.030 & -0.060 \\
-0.100 & -0.001 & 0.143 & -0.008 \\
0.018 & -0.028 & 0.112 & 0.023 \\
0.117 & 0.076 & -0.079 & 0.088
\end{pmatrix}.
\]
Приклад 3: Знайти обернену матрицю
\[
A=
\begin{pmatrix}
0 & -1 & 3 & 0 & 2 \\
2 & -4 & 1 & 5 & 3 \\
-4 & 5 & 7 & -10 & 0 \\
-2 & 1 & 8 & -5 & 3
\end{pmatrix}.
\]
Тут важливо одразу зупинитися й перевірити розмірність. Матриця має \( 4 \) рядки та \( 5 \) стовпців, тобто вона не є квадратною. А обернена матриця визначається лише для квадратних матриць \( n\times n \). Тому для цієї \( A \) оберненої матриці \( A^{-1} \) не існує, і метод Гауса-Жордана в стандартному вигляді тут не застосовується.
Куди Рухатися Далі: Теми, які Підсилять Ваші Навички
Якщо вам сподобалося працювати з оберненими матрицями, логічно перейти до споріднених тем і розширити набір інструментів для задач. З чого почати, щоб це було справді корисно? Нижче — три напрямки, які природно продовжують тему й допомагають побачити інші підходи.
- Обернена матриця через алгебраїчні доповнення: Логіка мінорів і визначників — Розглянемо класичний метод через мінори та алгебраїчні доповнення, щоб чітко розуміти, як формується відповідь.
- Обернена матриця і характеристичний многочлен: Нетиповий, але сильний підхід — Пояснимо зв’язок із характеристичним многочленом і покажемо, як його використовувати на практиці.
- Обернена матриця методом окантування: Як додавання рядків і стовпців веде до результату — Покажемо ідею методу окантування та пояснимо, як через послідовне розширення отримують обернену матрицю.
Від Теорії до Коду: Обернена Матриця у Вашій Програмі
Якщо ви цікавитеся програмуванням, спробуйте перетворити цю блок-схему на невеличку програму, яка знаходить обернену матрицю методом Гауса-Жордана. Це справді корисна вправа, бо ви одразу побачите, як математичний алгоритм поводиться на конкретних числах під час обчислень. Оберіть улюблену мову — Python, PHP, JavaScript чи C++ — і зробіть свій мінікалькулятор: вводите матрицю, запускаєте обчислення, а на виході отримуєте \( A^{-1} \). А якщо додасте вивід проміжних матриць, стане ще цікавіше порівнювати результат з ручними розрахунками.
