Есть ли простой способ инвертировать треугольную (верхнюю или нижнюю) матрицу?

StackOverflow https://stackoverflow.com/questions/420612

Вопрос

Я пытаюсь реализовать некоторые основные операции линейной алгебры, и одной из этих операций является инверсия треугольной (верхней и / или нижней) матрицы. Есть ли простой и стабильный алгоритм для этого?

Спасибо.

Это было полезно?

Решение

Да, используйте обратную подстановку . Стандартный алгоритм для инвертирования матрицы состоит в том, чтобы найти ее разложение 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) и объединить полученные векторы решений в одну (обязательно нижне-треугольную) матрицу.

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

Если вы говорите о вещественных значениях одинарной точности, взгляните на исходный код подпрограмм LAPACK STRTRI и STRTI2 .

Вау, это практически половина содержания курса численного анализа. Стандартные алгоритмы сделают это, и здесь есть куча стандартного кода здесь , Основным источником этой и большинства других обычных проблем численного анализа является числовые рецепты .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top