Werken met R bij wiskunde: Lineaire algebra in R
Basiseigenschappen en creatie van matrices
Matrices zijn in R 2-dimensionale arrays. Je kunt denken aan een opbouw van rijvectoren van gelijke lengte die onder elkaar gezet worden. Je kunt de afmeting van een matrix tonen en specificeren met de dim
functie.
> A <- 1:6 # 1-dimensionale array met 6 elementen
> dim(A) <- c(2,3) # converteer naar 2-dimensionale array met 2 rijen en 2 kolommmen
> A; # toon als 2x3 matrix
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> B <- matrix( 1:6, ncol=2) # alternatieve definitie van een matrix
> B
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> dim(B) # B is een 3x2 kolomsgewijs opgevulde matrix
[1] 3 2
> C <- matrix( 1:6, ncol=2, byrow=TRUE); # C is een 3x2 rijgewijs opgevulde matrix
> C
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
\(\phantom{x}\)
Andere veelgebruikte methoden om arrays te maken illustreren we aan de hand van voorbeelden.
Constructie van een matrix via herhalingslussen
> A <- matrix(0, nrow=3, ncol=4); A # 3x4 nulmatrix [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0 > for (i in 1:3) { for (j in 1:4) { A[i,j] <- i^j # definitie van een matrixelement } }
> A [,1] [,2] [,3] [,4] [1,] 1 1 1 1 [2,] 2 4 8 16 [3,] 3 9 27 81
Constructie van een matrix via een indexeringsfunctie
> A <- outer(1:3, 1:4, FUN=function(i,j){i^j}); A
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 4 8 16
[3,] 3 9 27 81
Constructie van een speciale matrix Er bestaan ook speciale functies om matrices en vectoren met enen en nullen te creëren en om diagonaalmatrices te maken, namelijkdiag
:
> Z <- matrix(0, 2, 4); Z # 2x4 nulmatrix
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
> I <- diag(3); I # 3x3 identiteitsmatrix
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
> J <- matrix(1, 3, 3); J # 3x3 matrix met alle elements gelijk aan 1
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
> D <- diag(1:3); D # diagonaalmatrix
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 2 0
[3,] 0 0 3
Constructie van een matrix door stapeling Arrays kunnen ook horizontaal en verticaal gestapeld worden:
> A [,1] [,2] [,3] [,4] [1,] 1 1 1 1 [2,] 2 4 8 16 [3,] 3 9 27 81 > I [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > AI <- cbind(A,I); AI # horizontale stapeling van matrices [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 1 1 1 1 0 0 [2,] 2 4 8 16 0 1 0 [3,] 3 9 27 81 0 0 1 > ZAZ <- rbind(Z,A,Z); ZAZ # verticale stapeling van matrices [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 1 1 1 1 [4,] 2 4 8 16 [5,] 3 9 27 81 [6,] 0 0 0 0 [7,] 0 0 0 0
Constructie van een willekeurige matrix Je kunt ook willekeurig gegenereerde matrices creëren.
> # random 3x2 matrix met getallen tussen 0 en 1
> matrix(runif(6), nrow=3)
[,1] [,2]
[1,] 0.4605161 0.03090664
[2,] 0.9818785 0.82348871
[3,] 0.4128821 0.65200366
> # random 2x2 matrix via de standaardnormale verdeling
> matrix(rnorm(4), nrow=2)
[,1] [,2]
[1,] -0.3502606 0.8576934
[2,] -1.6379942 0.9516872
> # random 2x3 matrix met gehele getallen in segment [5, 8]
> matrix(sample(5:8, 6, replace=TRUE), nrow=2)
[,1] [,2] [,3]
[1,] 8 5 7
[2,] 7 6 5