# Matice v R for dummies pre predmet 1-PMA-215 # Autor: Radoslav Harman, KAMS, FMFI UK # Vytvorenie matice A <- matrix(c(1, 2, 3, 2, 3, 2), ncol=2); print(A) A <- matrix(c(1, 2, 3, 2, 3, 2), ncol=2, byrow=TRUE); print(A) B <- matrix(c(3, 4, 5, 1, 1, 2), ncol=2); print(B) # Sucet matic a pozlozkovy (Hadamardov) sucin matic print(A + B); print(A * B) # Transpozicia matice C<-t(B); print(C) # Vyber diagonalnych prvkov matice print(diag(A)) # Stopa matice tr<-function(X){sum(diag(X))}; print(tr(C)) # Standardny sucin matic print(A %*% C); print(C %*% A) # Overme tvrdenie tr(AC)=tr(CA) print(tr(A %*% C)); print(tr(C %*% A)) # Overme asociativnost sucinu matic print((A %*% C) %*% B); print(A %*% (C %*% B)) # Vytvorenie diagonalnej a jednotkovej matice D <- diag(c(2, 3, 4)); print(D) I5 <- diag(5); print(I5) # Zlepenie matic po stlpcoch a riadkoch E <- cbind(D, B); print(E) F <- rbind(D, C); print(F) # Vytvorme nahodnu maticu H <- matrix(sample(1:10, 25, replace=TRUE), ncol=5); print(H) # Vypocitame inverziu matice H a hned to radsej overme Hinv <- solve(H); print(Hinv) print(H %*% Hinv); print(round(H %*% Hinv, 10)) # Vypocitajme QR rozklad matice res <- qr(H); print(qr.Q(res)); print(qr.R(res)) # Dobry zvyk - overenie print(qr.Q(res) %*% qr.R(res)) - H # Nacitajme specialnu kniznicu library(MASS) # Vypocitajme zovseobecnenu inverziu matice A print(ginv(A)) # Je to naozaj zovseobecnena inverzia? G <- ginv(A); print(round( A %*% G %*% A, 10)) # Vyrobme si nejaku permutacnu maticu a pohrajme sa s nou P <- I5[c(1, 3, 4, 2, 5),]; print(P); print(P %*% t(P)) print(H); print(P %*% H); print(H %*% P) # Vyrobme si funkciu, ktora vrati rotacnu maticu typu 2x2 Ort2 <- function(x){matrix(c(cos(x), sin(x), -sin(x), cos(x)), ncol=2)} print(Ort2(pi / 4)); U <- Ort2(pi / 4); print(U %*% t(U)) # Domcek X<-matrix(c(0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0.5, 1.5, 0, 1, 0, 0, 1, 0), nrow=2) plot(X[1,], X[2,], type="l", xlim=c(-2, 2), asp=1) # Potocme si domcek Y <- Ort2(pi / 6) %*% X; plot(Y[1,], Y[2,], type="l", xlim=c(-2, 2), asp=1) Y <- Ort2(pi / 2) %*% X; plot(Y[1,], Y[2,], type="l", xlim=c(-2, 2), asp=1) # Potocme si ho este viac for(i in 0:1000){Y <- Ort2(2 * pi * (i/1000)) %*% X; plot(Y[1,], Y[2,], type="l", xlim=c(-3, 3), ylim=c(-3, 3), asp=1)}