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

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

Спасибо.

Взгляните на этот пост: math.stackexchange.com/questions/1143214/… Bests

Dade 28.09.2015 18:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
1
33 117
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

Я пытаюсь получить обратную матрицу треугольный, а не квадратную матрицу. Как обратная подстановка должна помочь мне в получении обратных треугольников?

tunnuz 07.01.2009 18:13

По определению треугольные матрицы квадратные.

jason 07.01.2009 18:31

Причем только квадратные матрицы имеют обратные.

conjectures 29.04.2015 19:42

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

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

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

jason 07.01.2009 18:53

Надо сделать поворот ряда. Наивность не будет стабильной.

duffymo 07.01.2009 20:21

Поворот (например, с помощью исключения Гаусса) переводит линейную систему в треугольную форму, которая затем решается с помощью обратной подстановки. Что касается стабильности, см., Например, книгу Николаса Хайэма «Точность и стабильность численных алгоритмов», стр. 140 второго издания.

jason 07.01.2009 21:33

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

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

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

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

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

inv(L)b
with back-substitution whenever you need to do something else with inv(L).

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

inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
and so on, so you see it is much easier not to invert it at all.

Будучи B инверсией A, треугольной матрицы, вы можете использовать следующий код MATLAB:

n = size(A,1);
B = zeros(n);
for i=1:n
    B(i,i) = 1/A(i,i);
    for j=1:i-1
        s = 0;
        for k=j:i-1
            s = s + A(i,k)*B(k,j);
        end
        B(i,j) = -s*B(i,i);
    end
end

Другие вопросы по теме