Псевдообернена матриця потрібна тоді, коли звична обернена матриця не визначена. Так буває, якщо матриця прямокутна або квадратна, але вироджена. І що робити в такій ситуації, якщо треба розв’язати систему, знайти наближений розв’язок або отримати стабільний результат у чисельних обчисленнях? Саме тут псевдообернення дає практичний інструмент. У цій статті ми розберемо означення, ключові властивості та обчислення через сингулярний розклад, а також пояснимо, звідки беруться елементи матриць \( 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}. \]
Псевдообернена Матриця у Коді: Спробуйте Зібрати Свій Мінікалькулятор
Уявіть, що блок-схема нижче — це не просто картинка, а чіткий план для вашого маленького програмного проєкту. Чому б не взяти її як підказку й не написати на улюбленій мові програмування невелику програму, яка обчислює псевдообернену матрицю через сингулярний розклад? Такий формат добре тренує уважність до деталей і водночас показує, як математична ідея перетворюється на практичний інструмент, який легко перевірити на власних прикладах. А ще приємно бачити результат не лише на папері, а й у вигляді коду, який дає відповідь з першого запуску.
