ФЭНДОМ


Обра́тная ма́трица — такая матрица A-1, при умножении на которую исходная матрица A даёт в результате единичную матрицу E:

A A^{-1} = A^{-1}A = E

Квадратная матрица обратима тогда и только тогда, когда она невырожденная, т.е. её определитель не равен нулю. Для неквадратных матриц и сингулярных матриц обратных матриц не существует.

Свойства обратной матрицы Править

  • \det A^{-1} = \frac{1}{\det A}, где \det обозначает определитель.
  • (AB)^{-1} = B^{-1}A^{-1} для любых двух обратимых матриц A и B.
  • (A^T)^{-1} = (A^{-1})^T где *^T обозначает транспонированную матрицу.
  • (kA)^{-1} = k^{-1}A^{-1} для любого коэффициента k\not=0 .
  • Если необходимо решить систему линейных уравнений Ax=b, (b - ненулевой вектор) где x — искомый вектор, и если A^{-1} существует, то x=A^{-1} b. В противном случае либо размерность пространства решений больше нуля, либо их нет вовсе.

Способы нахождения обратной матрицы Править

Если матрица обратима, то для нахождения обратной матрицы можно воспользоваться одним из следующих способов:

Точные (прямые) методы Править

Метод Гаусса Править

Возьмём две матрицы: саму A и единичную E. Приведём матрицу A к единичной матрице методом Гаусса. После применения каждой операции к первой матрице применим ту же операцию ко второй. Когда приведение первой матрицы к единичному виду будет завершено, вторая матрица окажется равной A-1.

При использовании метода Гаусса первая матрица будет умножаться слева на одну из элементарных матриц \Lambda_i (трансвекцию или диагональную матрицу с единицами на главной диагонали, кроме одной позиции):

\Lambda_1 \cdot \dots \cdot \Lambda_n \cdot A = \Lambda A = E \Rightarrow \Lambda = A^{-1}.
\Lambda_m = \begin{bmatrix}
1 & \dots & 0 & -a_{1m} /a_{mm} &  0 &\dots & 0 \\
 & & &\dots & & &\\
0 & \dots & 1 & -a_{m-1m} /a_{mm} &  0 &\dots &0 \\
0 & \dots & 0 & 1/a_{mm} &  0 &\dots & 0 \\
0 & \dots & 0 & -a_{m+1m} /a_{mm} &  1 &\dots &0 \\
 & & &\dots & & &\\
0 & \dots & 0 & -a_{nm}/a_{mm} &  0 &\dots & 1 \end{bmatrix}.

Вторая матрица после применения всех операций станет равна \Lambda, то есть будет искомой. Сложность алгоритма - O(n^3).

С помощью союзной матрицы Править

A^{-1} = \frac{1}{\det A}\cdot (C^{*})^{T}

C^{*} - союзная матрица;

(C^{*})^{T} - матрица, полученная в результате транспонирования союзной матрицы;

Полученная матрица A-1 и будет обратной. Сложность алгоритма зависит от сложности алгоритма расчета определителя Odet и равна O(n2)Odet.

Использование LU/LUP-разложения Править

Если матрица A невырождена то для нее можно расчитать LUP-разложение PA=LU. Пусть PA=B, B^{-1}=D. Тогда из свойств обратной матрицы можно записать: D=U^{-1}L^{-1}. Если умножить это равенство на U и L то можно получить два равенства вида UD=L^{-1} и DL=U^{-1}. Первое из этих равенств представляет собой систему из n2 линейных уравнений для \frac{n(n+1)}{2} из которых известны правые части (из свойств треугольных матриц). Второе представляет также систему из n2 линейных уравнений для \frac{n(n-1)}{2} из которых известны правые части (также из свойств треугольных матриц). Вместе они престаляют собой систему из n2 равенств. С помощью этих равенств можно реккурентно определить все n2 элементов матрицы D. Тогда из равенства (PA)-1 = A-1P-1 = B-1 = D. получаем равенство A-1 = DP.

Ниже представлен псевдокод на языке C++ алгоритма обращения матрицы с помощью LUP-разложения.

Matrix Inverse(const Matrix &A) {
    //n - размерность квадратной матрицы A
    const int n=A.Rows();
    //при инициализации задается размерность nxn
    Matrix X(n, n);
    Matrix P(n, n);
    Matrix C(n, n);
    //предполагается что в результате следующего вызова матрица C = L + U - E
    LUP(A, C, P);
    for(int k = n-1; k >= 0; k--) {
        X[ k ][ k ] = 1;
        for( int j = n-1; j > k; j--) X[ k ][ k ] -= C[ k ][ j ]*X[ j ][ k ];
        X[ k ][ k ] /= C[ k ][ k ];
        for( int i = k-1; i >= 0; i-- ) {
            for( int j = n-1; j > i; j-- ) {
                X[ i ][ k ] -= C[ i ][ j ]*X[ j ][ k ];
                X[ k ][ i ] -= C[ j ][ i ]*X[ k ][ j ];
            }
            X[ i ][ k ] /= C[ i ][ i ];
        }
    }
    X = X*P
    return( X );
}

В случае использования вектора перестановок (см. LUP-разложение) вместо финального умножения потребуется следующий код:

int temp;
for( int i = 0; i < n; i++ ) {
    temp = i;
    while( p[ temp ] != i ) temp++;
    X.SwapColumns(i, temp);
    p[ temp ] = p[ i ];
}

В случае использования LU-разложения не требуется перестановки столбцов матрицы D но решение может разойтись даже если матрица A невырождена.

Сложность алгоритма - O(n3).

Итерационные методы Править

Методы Шульца Править

\begin{cases}\Psi_k=E-AU_k,\\
U_{k+1}=U_k \sum_{i=0}^n \Psi^i_k\end{cases}

Зейделева модификация метода Править

Оценка погрешности Править

Выбор начального приближения Править

Вообще, проблема выбора начального приближения U_0~ в рассматриваемых здесь процессах итерационного обращения матриц не позволяет относиться к ним как к самостоятельным универсальным методам, конкурирующими с прямыми методами обращения, основанными, например, на LU-разложении матриц. Имеются некоторые рекомендации по выбору U_0~, обеспечивающие выполнение условия \rho(\Psi_0)<1~ (спектральный радиус матрицы меньше единицы), являющегося необходимым и достаточным для сходимости процесса. Однако при этом, во-первых, требуется знать сверху оценку спектра обращаемой матрицы A либо матрицы AA^T~ (а именно, если A – симметричная положительно определенная матрица и \rho(A)\le\beta~, то можно взять U_0={\alpha}E~, где \alpha\in\left(0,\frac{2}{\beta}\right)~; если же A – произвольная невырожденная матрица и \rho(AA^T)\le\beta~, то полагают U_0={\alpha}A^T~, где также \alpha\in\left(0,\frac{2}{\beta}\right)~; можно конечно упростить ситуацию и, воспользовавшись тем, что \rho(AA^T)\le\mathcal{k}AA^T\mathcal{k}~, положить U_0=\frac{A^T}{AA^T}~). Во-вторых, при таком задании начальной матрицы нет гарантии, что \mathcal{k}\Psi_0\mathcal{k}~ будет малой (возможно, даже окажется \mathcal{k}\Psi_0\mathcal{k}>1~), и высокий порядок скорости сходимости обнаружится далеко не сразу.

См. также Править




Эта страница использует содержимое раздела Википедии на русском языке. Оригинальная статья находится по адресу: Обратная матрица. Список первоначальных авторов статьи можно посмотреть в истории правок. Эта статья так же, как и статья, размещённая в Википедии, доступна на условиях CC-BY-SA .


Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики