Псевдообернена матриця потрібна тоді, коли звична обернена матриця не визначена. Так буває, якщо матриця прямокутна або квадратна, але вироджена. І що робити в такій ситуації, якщо треба розв’язати систему, знайти наближений розв’язок або отримати стабільний результат у чисельних обчисленнях? Саме тут псевдообернення дає практичний інструмент. У цій статті ми розберемо означення, ключові властивості та обчислення через сингулярний розклад, а також пояснимо, звідки беруться елементи матриць \( U \), \( \Sigma \), \( V \).
Псевдообернена Матриця: Коли Вона Потрібна і Що Означає
Почнімо з базового. Для квадратної невиродженої матриці \( A \) існує обернена \( A^{-1} \), і ми маємо:
\[
A^{-1} \cdot A = I,\qquad A \cdot A^{-1}=I.
\]
Але якщо \( A \) прямокутна (\( m\times n \) з \( m\neq n \)) або квадратна, але \( \det(A)=0 \), то класична обернена матриця не існує. Це природно: у таких випадках вимоги \( A \cdot A^{-1}=I \) та \( A^{-1} \cdot A=I \) одночасно виконати неможливо.
Тоді вводять узагальнення — матрицю, яка зберігає найважливіші властивості обернення в коректній формі. Так з’являється псевдообернена матриця (матриця Мура–Пенроуза), яку позначають \( A^{+} \).
Формально псевдообернена матриця \( A^{+} \) для матриці \( A\in\mathbb{R}^{m\times n} \) — це єдина матриця \( A^{+}\in\mathbb{R}^{n\times m} \), яка задовольняє чотири умови:
\[
A \cdot A^{+} \cdot A = A,\qquad
A^{+} \cdot A \cdot A^{+} = A^{+},\qquad
(A \cdot A^{+})^{*}=A \cdot A^{+},\qquad
(A^{+} \cdot A)^{*}=A^{+} \cdot A.
\]
Тут \( ^{*} \) — спряжене транспонування: у комплексному випадку \( A^{*}=\overline{A}^{T} \), а для дійсних матриць \( A^{*}=A^{T} \).
Що ще важливо: якщо \( A \) квадратна і невироджена, то псевдообернена збігається зі звичайною:
\[
A^{+}=A^{-1}.
\]
Тобто поняття узагальнює знайоме обернення і не суперечить йому.
Псевдообернена Матриця: Корисні Властивості для Розв’язування Систем
Тепер логічне питання: що саме дають ці чотири умови? Вони фіксують узгоджену поведінку \( A^{+} \) у задачах, де класичне обернення недоступне.
По-перше, виконуються співвідношення:
\[
A \cdot A^{+} \cdot A=A,\qquad A^{+} \cdot A \cdot A^{+}=A^{+}.
\]
Вони означають, що після застосування \( A^{+} \) і подальшого множення на \( A \) ми знову отримуємо вихідні дані в правильній формі.
По-друге, симетричність (або ермітовість) добутків:
\[
(A \cdot A^{+})^{*}=A \cdot A^{+},\qquad (A^{+} \cdot A)^{*}=A^{+} \cdot A
\]
гарантує коректність багатьох геометричних і чисельних властивостей. Для реальних матриць це просто симетричність.
Далі — найпрактичніший зв’язок із задачами найменших квадратів. Якщо система \( A \cdot x=b \) не має точного розв’язку (так часто буває для прямокутних матриць), тоді шукають \( x \), що мінімізує похибку (зазвичай у евклідовій нормі):
\[
\| A \cdot x-b \|\to \min.
\]
У такому випадку вираз \( x^{\star}=A^{+} \cdot b \) задає розв’язок задачі найменших квадратів. А якщо таких розв’язків кілька, то \( A^{+} \cdot b \) дає той, для якого норма \( \| x \| \) найменша. Зручно для перевірок і для реальних обчислень, правда?
Псевдообернена Матриця: Обчислення Через Сингулярний Розклад
Найпоширеніший і найбільш стійкий спосіб знайти \( A^{+} \) — використати сингулярний розклад (SVD). Він існує для будь-якої матриці \( A\in\mathbb{R}^{m\times n} \) і має вигляд:
\[
A = U \cdot \Sigma \cdot V^{T},
\]
де розмірності такі:
\[
U\in\mathbb{R}^{m\times m},\quad
\Sigma\in\mathbb{R}^{m\times n},\quad
V\in\mathbb{R}^{n\times n}.
\]
Матриці \( U \) і \( V \) ортогональні:
\[
U^{T} \cdot U=I,\qquad V^{T} \cdot V=I.
\]
Матриця \( \Sigma \) — прямокутна діагональна: на її головній діагоналі стоять невід’ємні числа \( \sigma_i \), які називають сингулярними числами. Їх може бути не більше ніж
\[
t=\min(m,n),\qquad \sigma_1\ge \sigma_2\ge \cdots \ge \sigma_t\ge 0,
\]
а всі інші елементи \( \Sigma \) дорівнюють нулю.
Стандартний запис \( \Sigma \) залежить від того, яке з чисел \( m,n \) більше:
\[
\Sigma=
\begin{cases}
\begin{pmatrix}
D\\
0
\end{pmatrix}, & m\ge n,\\[12pt]
\begin{pmatrix}
D & 0
\end{pmatrix}, & m<n,
\end{cases}
\qquad
D=\operatorname{diag}(\sigma_1,\sigma_2,\ldots,\sigma_t).
\]
Якщо \( r=\operatorname{rank}(A) \), то
\[
\sigma_1\ge \cdots \ge \sigma_r>0,\qquad \sigma_{r+1}=\cdots=\sigma_t=0.
\]
Коли SVD вже побудовано, псевдообернена матриця обчислюється за формулою:
\[
A^{+}=V \cdot \Sigma^{+} \cdot U^{T}.
\]
Тут \( \Sigma^{+}\in\mathbb{R}^{n\times m} \) — матриця, в якій кожне ненульове \( \sigma_i \) замінюють на \(\frac{1}{\sigma_i} \), а нулі залишають нулями:
\[
\Sigma^{+}=
\begin{cases}
\begin{pmatrix}
D^{+} & 0
\end{pmatrix}, & m\ge n,\\[12pt]
\begin{pmatrix}
D^{+}\\
0
\end{pmatrix}, & m<n,
\end{cases}
\qquad
D^{+}=\operatorname{diag}(\sigma_1^{+},\sigma_2^{+},\ldots,\sigma_t^{+}),
\]
де
\[
\sigma_i^{+}=
\begin{cases}
\dfrac{1}{\sigma_i}, & \sigma_i>0,\\[6pt]
0, & \sigma_i=0.
\end{cases}
\]
Отже, основне завдання — коректно побудувати \( U \), \( \Sigma \), \( V \). Далі формула для \( A^{+} \) застосовується прямо.
Елементи Сингулярного Розкладу: Як Їх Отримують
Добре, а звідки беруться самі матриці \( U \) і \( V \)? Для цього розглядають дві симетричні матриці:
\[
A \cdot A^{T}\in\mathbb{R}^{m\times m},\qquad A^{T} \cdot A\in\mathbb{R}^{n\times n}.
\]
Вони невід’ємно визначені, тому їхні власні значення \( \lambda_i \) невід’ємні, а власні вектори можна вибрати ортонормованими. Важливо, що власні вектори беруть саме для \( A \cdot A^{T} \) та \( A^{T} \cdot A \), а не для самої матриці \( A \). Саме тому SVD зручно будувати через спектральний розклад цих двох симетричних матриць.
Ключовий зв’язок такий:
- Стовпці \( U \) — це ортонормовані власні вектори матриці \( A \cdot A^{T} \).
- Стовпці \( V \) — це ортонормовані власні вектори матриці \( A^{T} \cdot A \).
Запишімо це формулами. Нехай
\[
A \cdot A^{T} \cdot u_i=\lambda_i \cdot u_i,\qquad i=1,2,\ldots,m,
\]
тоді
\[
U=\begin{pmatrix}u_1 & u_2 & \cdots & u_m\end{pmatrix}.
\]
Аналогічно, якщо
\[
A^{T} \cdot A \cdot v_i=\lambda_i \cdot v_i,\qquad i=1,2,\ldots,n,
\]
то
\[
V=\begin{pmatrix}v_1 & v_2 & \cdots & v_n\end{pmatrix}.
\]
Тепер — найважливіше для сингулярних чисел. Ненульові власні значення матриць \( A \cdot A^{T} \) і \( A^{T} \cdot A \) збігаються (з урахуванням кратностей). А сингулярні числа визначаються через них так:
\[
\sigma_i=\sqrt{\lambda_i},\qquad \sigma_i\ge 0.
\]
Тобто ми спочатку знаходимо \( \lambda_i \), а потім беремо квадратні корені.
Як пов’язані власні вектори ui та vi?
Для кожного \( \sigma_i>0 \) виконуються рівності:
\[
A \cdot v_i=\sigma_i \cdot u_i,\qquad A^{T} \cdot u_i=\sigma_i \cdot v_i.
\]
Тому, якщо відомі \( v_i \) та \( \sigma_i>0 \), то можна знайти
\[
u_i=\frac{1}{\sigma_i} \cdot A \cdot v_i,
\]
а якщо відомі \( u_i \), то
\[
v_i=\frac{1}{\sigma_i} \cdot A^{T} \cdot u_i.
\]
Саме так на практиці отримують узгоджені \( U \) та \( V \), а \( \Sigma \) складають із \( \sigma_i \).
І після цього завершальний крок записується вже знайомо:
\[
A^{+}=V \cdot \Sigma^{+} \cdot U^{T}.
\]
Отже, побудова псевдооберненої матриці через SVD спирається на власні значення й власні вектори двох симетричних матриць \( A \cdot A^{T} \) та \( A^{T} \cdot A \), а також на просте правило для \( \Sigma^{+} \): обернути ненульові сингулярні числа і залишити нулі.
Псевдообернена Матриця: Практична Частина з Прикладами
Щоб краще зрозуміти метод, давайте перейдемо до практичних прикладів. Крок за кроком розберемо кілька типових задач, у яких застосуємо отримані знання. Звертайте увагу не лише на кінцеві результати, а й на логіку виконання кожного етапу — це дозволить швидше орієнтуватися в подібних вправах.
Приклад 1. Які кроки потрібно виконати, щоб знайти псевдообернену матрицю?
Щоб знайти псевдообернену матрицю \( A^{+} \) через сингулярний розклад, зазвичай виконують такі кроки:
- Для заданої матриці \( A\in\mathbb{R}^{m\times n} \) обчислюють дві симетричні матриці:
\[
A \cdot A^{T}\in\mathbb{R}^{m\times m},\qquad A^{T} \cdot A\in\mathbb{R}^{n\times n}.
\]
- Для матриці \(A \cdot A^{T} \) знаходять власні значення \( \lambda_i \) та ортонормовані власні вектори \( u_i \). Із цих векторів складають матрицю
\[
U=\begin{pmatrix}u_1 & u_2 & \cdots & u_m\end{pmatrix}.
\]
- Для матриці \(A^{T} \cdot A \) знаходять власні значення \( \lambda_i \) та ортонормовані власні вектори \( v_i \). Із цих векторів складають матрицю
\[
V=\begin{pmatrix}v_1 & v_2 & \cdots & v_n\end{pmatrix}.
\]
- Із власних значень отримують сингулярні числа \( \sigma_i=\sqrt{\lambda_i} \) (\( \sigma_i\ge 0 \)). Далі з \( \sigma_i \) формують матрицю \( \Sigma\in\mathbb{R}^{m\times n} \) так, щоб ненульові \( \sigma_i \) стояли на головній діагоналі, а решта елементів були нульові.
- Складають \( \Sigma^{+}\in\mathbb{R}^{n\times m} \): на її діагоналі ставлять значення, які відповідають оберненню ненульових сингулярних чисел, а там, де \( \sigma_i=0 \), ставлять нулі.
- Записують псевдообернену матрицю за формулою:
\[
A^{+}=V \cdot \Sigma^{+} \cdot U^{T}.
\]
Приклад 2. Знайти псевдообернену матрицю для заданої матриці
\[
A=
\begin{pmatrix}
2 & 1 \\
1 & 2 \\
3 & 3
\end{pmatrix}.
\]
Починаємо з побудови симетричних матриць \( A \cdot A^{T} \) та \(A^{T} \cdot A \):
\[
\begin{gathered}
A \cdot A^{T}=
\begin{pmatrix}
2 & 1\\
1 & 2\\
3 & 3
\end{pmatrix} \cdot
\begin{pmatrix}
2 & 1 & 3\\
1 & 2 & 3
\end{pmatrix}
=
\begin{pmatrix}
5 & 4 & 9\\
4 & 5 & 9\\
9 & 9 & 18
\end{pmatrix},
\\[6pt]
A^{T} \cdot A=
\begin{pmatrix}
2 & 1 & 3\\
1 & 2 & 3
\end{pmatrix} \cdot
\begin{pmatrix}
2 & 1\\
1 & 2\\
3 & 3
\end{pmatrix}
=
\begin{pmatrix}
14 & 13\\
13 & 14
\end{pmatrix}.
\end{gathered}
\]
Далі знаходимо спектральні дані. Для \( A \cdot A^{T} \) власні значення та відповідні власні вектори можна взяти так:
\[
\lambda_1=27,\quad x_1=
\begin{pmatrix}
1\\
1\\
2
\end{pmatrix},
\qquad
\lambda_2=1,\quad x_2=
\begin{pmatrix}
-1\\
1\\
0
\end{pmatrix},
\qquad
\lambda_3=0,\quad x_3=
\begin{pmatrix}
-1\\
-1\\
1
\end{pmatrix}.
\]
Нормуємо їх і формуємо ортонормовані стовпці \( U \). У результаті отримуємо:
\[
U=
\begin{pmatrix}
\frac{1}{\sqrt{1^{2}+1^{2}+2^{2}}} & \frac{-1}{\sqrt{(-1)^{2}+1^{2}+0^{2}}} & \frac{-1}{\sqrt{(-1)^{2}+(-1)^{2}+1^{2}}} \\
\frac{1}{\sqrt{1^{2}+1^{2}+2^{2}}} & \frac{1}{\sqrt{(-1)^{2}+1^{2}+0^{2}}} & \frac{-1}{\sqrt{(-1)^{2}+(-1)^{2}+1^{2}}} \\
\frac{2}{\sqrt{1^{2}+1^{2}+2^{2}}} & \frac{0}{\sqrt{(-1)^{2}+1^{2}+0^{2}}} & \frac{1}{\sqrt{(-1)^{2}+(-1)^{2}+1^{2}}}
\end{pmatrix}=
\begin{pmatrix}
0.408 & -0.707 & -0.577\\
0.408 & 0.707 & -0.577\\
0.816 & 0 & 0.577
\end{pmatrix}.
\]
Для \( A^{T} \cdot A \) власні значення та власні вектори можна записати так:
\[
\lambda_1=27,\quad y_1=
\begin{pmatrix}
1\\
1
\end{pmatrix},
\qquad
\lambda_2=1,\quad y_2=
\begin{pmatrix}
-1\\
1
\end{pmatrix}.
\]
Після нормування формуємо \( V \):
\[
V=
\begin{pmatrix}
\frac{1}{\sqrt{1^{2}+1^{2}}} & \frac{-1}{\sqrt{(-1)^{2}+1^{2}}} \\
\frac{1}{\sqrt{1^{2}+1^{2}}} & \frac{1}{\sqrt{(-1)^{2}+1^{2}}}
\end{pmatrix}=
\begin{pmatrix}
0.707 & -0.707\\
0.707 & 0.707
\end{pmatrix}.
\]
Тепер переходимо до сингулярних чисел. Оскільки \( \sigma_i=\sqrt{\lambda_i} \), маємо:
\[
\sigma_1=5.196,\qquad \sigma_2=1.
\]
Тоді матриця \( \Sigma\in\mathbb{R}^{3\times 2} \) набуває вигляду:
\[
\Sigma=
\begin{pmatrix}
5.196 & 0\\
0 & 1\\
0 & 0
\end{pmatrix}.
\]
Далі будуємо \( \Sigma^{+}\in\mathbb{R}^{2\times 3} \). На місці \( 5.196 \) ставимо відповідне обернене значення, а \( 1 \) та нулі залишаємо без змін:
\[
\Sigma^{+}=
\begin{pmatrix}
0.192 & 0 & 0\\
0 & 1 & 0
\end{pmatrix}.
\]
Тепер застосовуємо ключову формулу:
\[
A^{+}=V \cdot \Sigma^{+} \cdot U^{T}.
\]
Після перемноження отримуємо псевдообернену матрицю:
\[
A^{+}=
\begin{pmatrix}
0.707 & -0.707\\
0.707 & 0.707
\end{pmatrix} \cdot
\begin{pmatrix}
0.192 & 0 & 0\\
0 & 1 & 0
\end{pmatrix} \cdot
\begin{pmatrix}
0.408 & 0.408 & 0.816\\
-0.707 & 0.707 & 0\\
-0.577 & -0.577 & 0.577
\end{pmatrix}=
\begin{pmatrix}
0.556 & -0.444 & 0.111\\
-0.444 & 0.556 & 0.111
\end{pmatrix}.
\]
Перевірка розмірностей: \( A\in\mathbb{R}^{3\times 2} \), тому \( A^{+}\in\mathbb{R}^{2\times 3} \), що й бачимо з отриманого результату.
Приклад 3. Знайти псевдообернену матрицю для заданої матриці
\[
A=
\begin{pmatrix}
2 & 0 & 0\\
0 & 1 & 0
\end{pmatrix}.
\]
Як і в попередньому прикладі, стартуємо з побудови симетричних матриць \( A \cdot A^{T} \) та \( A^{T} \cdot A \):
\[
\begin{gathered}
A \cdot A^{T}=
\begin{pmatrix}
2 & 0 & 0\\
0 & 1 & 0
\end{pmatrix} \cdot
\begin{pmatrix}
2 & 0\\
0 & 1\\
0 & 0
\end{pmatrix}
=
\begin{pmatrix}
4 & 0\\
0 & 1
\end{pmatrix},
\\[6pt]
A^{T} \cdot A=
\begin{pmatrix}
2 & 0\\
0 & 1\\
0 & 0
\end{pmatrix} \cdot
\begin{pmatrix}
2 & 0 & 0\\
0 & 1 & 0
\end{pmatrix}
=
\begin{pmatrix}
4 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 0
\end{pmatrix}.
\end{gathered}
\]
Тепер дивимось на спектральні дані. Для \( A \cdot A^{T} \) власні значення та власні вектори можна взяти так:
\[
\lambda_1=4,\quad x_1=
\begin{pmatrix}
1\\
0
\end{pmatrix},
\qquad
\lambda_2=1,\quad x_2=
\begin{pmatrix}
0\\
1
\end{pmatrix}.
\]
Ці вектори вже ортонормовані, тому матриця \( U \) одразу має вигляд:
\[
U=
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}.
\]
Для \( A^{T} \cdot A \) маємо:
\[
\lambda_1=4,\quad y_1=
\begin{pmatrix}
1\\
0\\
0
\end{pmatrix},
\qquad
\lambda_2=1,\quad y_2=
\begin{pmatrix}
0\\
1\\
0
\end{pmatrix},
\qquad
\lambda_3=0,\quad y_3=
\begin{pmatrix}
0\\
0\\
1
\end{pmatrix}.
\]
Вектори також уже ортонормовані, отже
\[
V=
\begin{pmatrix}
1 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 1
\end{pmatrix}.
\]
Оскільки матриця \( A \) має розмір \( 2\times 3 \), у \( \Sigma \) може бути лише \( t=\min(2,3)=2 \) сингулярні числа. Тому тут ми беремо дві величини:
\[
\sigma_1=2,\qquad \sigma_2=1.
\]
Тоді матриця \( \Sigma\in\mathbb{R}^{2\times 3} \) має вигляд:
\[
\Sigma=
\begin{pmatrix}
2 & 0 & 0 \\
0 & 1 & 0
\end{pmatrix}.
\]
Далі будуємо \( \Sigma^{+}\in\mathbb{R}^{3\times 2} \). Ненульові сингулярні числа замінюємо на відповідні обернені значення, а нульові позиції залишаємо нульовими:
\[
\Sigma^{+}=
\begin{pmatrix}
0.5 & 0\\
0 & 1\\
0 & 0
\end{pmatrix}.
\]
Тепер застосовуємо формулу:
\[
A^{+}=V \cdot \Sigma^{+} \cdot U^{T}.
\]
Оскільки \( V \) та \( U \) у цьому прикладі — одиничні, множення не змінює \( \Sigma^{+} \), тому:
\[
A^{+}=
\begin{pmatrix}
0.5 & 0\\
0 & 1\\
0 & 0
\end{pmatrix}.
\]
Псевдообернена Матриця у Коді: Спробуйте Зібрати Свій Мінікалькулятор
Уявіть, що блок-схема нижче — це не просто картинка, а чіткий план для вашого маленького програмного проєкту. Чому б не взяти її як підказку й не написати на улюбленій мові програмування невелику програму, яка обчислює псевдообернену матрицю через сингулярний розклад? Такий формат добре тренує уважність до деталей і водночас показує, як математична ідея перетворюється на практичний інструмент, який легко перевірити на власних прикладах. А ще приємно бачити результат не лише на папері, а й у вигляді коду, який дає відповідь з першого запуску.
