LU Разложение с использованием R - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь запустить разложение LU, используя R. Вот воспроизводимый код.Я не понимаю, почему моя матрица перестановок отличается от решения.Матрицы L и U правильные.Но для матрицы перестановок 1-я и 2-я строки и 3-я и 4-я строки чередуются.Следовательно, я не получаю правильное решение системы линейных уравнений.Буду признателен за вашу помощь.

install.packages("Matrix")
library(Matrix)
(A <- matrix(c(4, 3, -2, 5, 2, -4, 6, 1, -1, 2, -5, 6, 3, 5, -2, -3), nrow = 4))
(B <- matrix(c(16.9, -14, 25, 9.4), nrow = 4))

luA <- lu(A)
elu <- expand(luA)
(L <- elu$L)
(U <- elu$U)
(P <- elu$P)

(Y <- solve(L) %*% P %*% B)
(X <- solve(U) %*% Y)

1 Ответ

0 голосов
/ 14 сентября 2018

С реализацией R кажется, что у нас есть A = PLU (вместо PA = LU).Следовательно, следующие работы:

all.equal(Matrix(A), with(elu, P %*% L %*% U))
# TRUE

(Y <- solve(L, solve(P) %*% B)) # solve LY = inv(P).B instead of LY = PB
(X <- solve(U, Y))

X
#4 x 1 Matrix of class "dgeMatrix"
#     [,1]
#[1,]  4.5
#[2,]  1.6
#[3,] -3.8
#[4,] -2.7 

all.equal(X, Matrix(solve(A, B)))
# TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...