Werken met R bij wiskunde: Lineaire algebra in R
Stelsels oplossen via solve en rref
R heeft voldoende ingebouwde faciliteiten om stelsels lineaire vergelijkingen numeriek op te lossen. We illustreren ze aan de hand van het stelsel \[ \left\{\begin{array}{rrrrrl} x & + & 2y & + & 3z & =\;2\\ & & y & + & 2z & =\;1\\ 3x & + & y & + & z & =\;3 \end{array}\right. \] met één oplossing, namelijk \[ \cv{x\\y\\z}=
\left(\!\!\begin{array}{r} 1\\-1\\1\end{array}\right)\]
We beginnen met het stelsel van vergelijkingen in te toetsen in een R sessie via bijpassende matrixvorm
> A <- matrix(c(1, 2, 3,
+ 0, 1, 2,
+ 3, 1, 1), nrow=3, byrow=TRUE)
> A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 0 1 2
[3,] 3 1 1
> b <- matrix(c(2, 1, 3), nrow=3); b
[,1]
[1,] 2
[2,] 1
[3,] 3
We kunnen nu solve
gebruiken om de vector \(\vec{v}\) te vinden zodanig dat \(A\vec{v}=\vec{b}\)
> v <- solve(A,b); v
[,1]
[1,] 1
[2,] -1
[3,] 1
Voordeel van de matrixvorm is dat je de theorie voor het oplossen van vergelijkingen beter in de hand hebt. Zo kun je bijvoorbeeld Gauss-eliminatie toepassen om het stelsel op te lossen. De naam van de functie rref
uit het pracma
R pakket is een acroniem voor reduced row echelon form, iets wat wij de (rij)gereduceerde trapvorm noemen.
> Ab <- cbind(A,b); Ab # de gerande matrix
[,1] [,2] [,3] [,4]
[1,] 1 2 3 2
[2,] 0 1 2 1
[3,] 3 1 1 3
> library(pracma)
> M <- rref(Ab); M # berekening van de gereduceerde trapvorm
[,1] [,2] [,3] [,4]
[1,] 1 0 0 1
[2,] 0 1 0 -1
[3,] 0 0 1 1 > M(,4) # selectie van de vierde kolom
[1] 1 -1 1