Есть ли простой способ инвертировать треугольную (верхнюю или нижнюю) матрицу?
-
05-07-2019 - |
Вопрос
Я пытаюсь реализовать некоторые основные операции линейной алгебры, и одной из этих операций является инверсия треугольной (верхней и / или нижней) матрицы. Есть ли простой и стабильный алгоритм для этого?
Спасибо.
Решение
Да, используйте обратную подстановку . Стандартный алгоритм для инвертирования матрицы состоит в том, чтобы найти ее разложение LU (разложение на нижнюю треугольную и верхнюю треугольную матрицы), использовать обратную подстановку на треугольных кусках, а затем объединить результаты, чтобы получить инверсию исходной матрицы. р>
Другие советы
Не переворачивайте его, если можете. Это одна из основных заповедей числовой линейной алгебры.
Гораздо быстрее и численно стабильнее сохранять саму матрицу L в памяти и вычислять
inv(L)b
с обратной заменой всякий раз, когда вам нужно сделать что-то еще с inv (L).
Обратите внимание, что обычный алгоритм для его инвертирования требует решения систем
inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
и т. д., поэтому вы видите, что намного проще вообще не инвертировать его.
Учитывая нижнюю треугольную матрицу L, обратное замещение позволяет решить систему L x = b быстро для любой правой стороны б.
Чтобы инвертировать L, вы можете решить эту систему для правых частей e1 = (1,0, ..., 0), e2 = (0,1, ..., 0), ..., en = (0,0, ..., 1) и объединить полученные векторы решений в одну (обязательно нижне-треугольную) матрицу. Р>
Если вас интересует решение в замкнутой форме, диагональные элементы обратного являются обратными к исходным диагональным элементам, и формула для остальных элементов обратного становится все более и более сложной по мере перемещения в сторону. от диагонали.
Вау, это практически половина содержания курса численного анализа. Стандартные алгоритмы сделают это, и здесь есть куча стандартного кода здесь , Основным источником этой и большинства других обычных проблем численного анализа является числовые рецепты .