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

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

Спасибо.

Ответы

Ответ 1

Да, используйте обратную замену. Стандартный алгоритм инвертирования матрицы состоит в том, чтобы найти ее LU-декомпозицию (разложение на нижнетреугольную и верхнетреугольную матрицу), использовать обратную подстановку на треугольных кусках, а затем объединить результаты, чтобы получить обратную исходную матрицу.

Ответ 2

Не инвертируйте его, если сможете. Это одна из основных заповедей числовой линейной алгебры.

Гораздо быстрее и численно более стабильно хранить матрицу L в памяти и вычислять

inv(L)b
с помощью обратной подстановки всякий раз, когда вам нужно что-то делать с inv (L).

Обратите внимание, что обычный алгоритм его инвертирования требует решения систем

inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
и т.д., поэтому вы видите, что гораздо проще не инвертировать его вообще.

Ответ 3

Учитывая нижнюю треугольную матрицу L, backsubstitution позволяет вам решить систему L x = b быстро для любой правой части b.

Чтобы инвертировать L, вы можете решить эту систему для правых частей e1 = (1,0,..., 0), e2 = (0,1,..., 0),..., en = (0,0,..., 1) и объединить полученные векторы решения в единую (обязательно нижнетреугольную) матрицу.

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

Ответ 4

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

Ответ 5

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