Werken met R bij wiskunde: Lineaire algebra in R
Rijreductie en determinant
Het R pakket pracma
biedt rij- en kolomoperaties om veegoperaties in matrices numeriek uit te rekenen, maar voor het berekenen van de rijgereduceerde trapvorm (row-reduced echelon form) van een matrix is er het commando rref
. Hiermee kun je ook de methode van rijreductie voor het berekenen van een inverse matrix uitvoeren.
Inverse van een matrix berekenen
> A <- matrix(c(3, 1, -4, -1, 0, 2, 1, 1, -1), nrow=3, byrow=TRUE)
> library(pracma)
> AI <- cbind(A,diag(3)); AI # gerande matrix
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 3 1 -4 1 0 0
[2,] -1 0 2 0 1 0
[3,] 1 1 -1 0 0 1
> rref(AI) # rijgereduceerde trapvorm
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 2 3 -2
[2,] 0 1 0 -1 -1 2
[3,] 0 0 1 1 2 -1
> .Last.value[,4:6] # deelmatrix die gelijk is aan inverse van A
[,1] [,2] [,3]
[1,] 2 3 -2
[2,] -1 -1 2
[3,] 1 2 -1
> inv(A) # inverse van een matrix via inv functie
[,1] [,2] [,3]
[1,] 2 3 -2
[2,] -1 -1 2
[3,] 1 2 -1
De determinant van de matrix \(A\) uit bovenstaand voorbeeld kan berekend worden met het commando det
en de uitkomst toont aan dat de matrix inverteerbaar is. We geven hieronder ook een voorbeeld van een niet-inverteerbare matrix omdat de determinant gelijk aan 0 is en de gereduceerde trapvorm ongelijk is aan een identiteitsmatrix. Als je toch probeert de inverse te bereken, krijg je overigens wel een resultaat met bijpassende waarschuwing. Wees bij berekening ook altijd op je hoede voor numerieke afrondingsfouten.
Determinant van een matrix
> A <- matrix(c(3, 1, -4, -1, 0, 2, 1, 1, -1), nrow=3, byrow=TRUE)
> A # inverteerbare matrix
[,1] [,2] [,3]
[1,] 3 1 -4
[2,] -1 0 2
[3,] 1 1 -1
> det(A) # determinant van matrix A
[1] -1
> B <- matrix(c(1, -2, -2, 1, 14, 14, 4, -24, -24), nrow=3, byrow=TRUE)
> B # niet-inverteerbare matrix (singuliere matrix)
[,1] [,2] [,3]
[1,] 1 -2 -2
[2,] 1 14 14
[3,] 4 -24 -24
> det(B) # determinant van matrix B
[1] 0
> qr(B)$rank # rang van matrix B (via QR decompositie)
[1] 2
> library(pracma)
> Rank(B) # rang van matrix B (via pracma package)
> rref(B) # rijgereduceerde trapvorm van B
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 1
[3,] 0 0 0
> inv(B) # poging om inverse van B te berekenen
[,1] [,2] [,3]
[1,] Inf Inf Inf
[2,] Inf Inf Inf
[3,] Inf Inf Inf
Warning message:
In inv(B) : Matrix appears to be singular.