
Funkce pro manipulaci s maticemi
nrow(), ncol() | počet řádků a sloupců pole |
dim() | dimenze pole |
t() | transpozice matice |
diag(A) | vypíše diagonálu matice A |
diag(v) |
vytvoří diagonální matici se složkami vektoru v na diagonále
|
diag(k) |
pro každé přirozené číslo k vygeneruje jednotkovou matici rozměrů k x k
|
lower.tri() upper.tri() |
výstupem je matice logických hodnot stejných rozměrů jako matice v argumentu. Hodnoty TRUE odpovídají prvkům v dolní/horní trojúhelníkové matici. Implicitní nastavení diag=FALSE nezahrnuje diagonálu.
|
det() | determinant matice |
eigen() |
výstupem je seznam o dvou položkách - values (vlastní čísla) a vectors (vlastní vektory). V případě, že nás zajímají pouze vlastní čísla, popř. pouze vlastní vektory matice, použijeme operátoru $:eigen()$values, popř. eigen()$vectors.
|
qr() |
QR rozklad. Jedním z výstupů je i hodnost matice, chceme-li zjistit pouze hodnost matice, můžeme použít příkaz qr()$rank
|
svd() | singulární rozklad trojúhelníkové matice |
norm() |
norma matice. Je potřeba nainstalovat a načíst podpůrný balíček Matrix pomocí příkazů install.packages("Matrix") a library(Matrix). Volitelnými argumenty můžeme zvolit typ normy:
"O", "o" nebo "1" pro maximální součty ve sloupcích, implicitní nastavení,
"I" nebo "i" pro maximální součty v řádcích,
"F" nebo "f" pro Frobeniovu normu (euklidovská norma vektor, když je na vstupní matici nahlíženo jako na vektor)
|
sum(diag()) | stopa matice |
> (A <- matrix(c(3, 2, -1, 0), 2))
> (v <- diag(A))
[1] 3 0
> diag(v)
> diag(2)
> lower.tri(A)
> A[lower.tri(A)] <- 0 horní trojúhelníková matice
> eigen(A)
> eigen(A)$values |
Násobení matic
Pro násobení matic po složkách se používá operátor *, navíc musí mít násobené matice souhlasné rozměry. Pro součin matice a vektoru (v libovolném pořadí) se uplatňuje pravidlo recycling rule, tzn. jednotlivé složky matice jsou po sloupcích postupně násobeny složkami vektoru.
> u <- c(1, 0, 0)
> u * A použití pravidla recycling rule
> v * A použití pravidla recycling rule. Výstup navíc obsahuje varovné hlášení, neboť počet prvků matice není dělitelný délkou vektoru v
Warning message:
In v * A : longer object length is not a multiple of shorter object length
|
Pro maticové násobení se používá operátor %*% oba činitelé musí být odpovídajících rozměrů (vnitřní rozměry obou činitelů musí být shodné).
> A %*% u
> B <- matrix(c(0, 1, 1, 1, 0, 1, 0, 1), ncol=4)
> A %*% B nesouhlasné rozměry matic
Error in A %*% B : non-conformable arguments
> B %*% A
|
Zatímco v systému MATLAB operaci násobení po složkách zajišťuje operátor .*, v jazyce R je to *. Operátor * v systému MATLAB označuje maticové násobení, v jazyce R je to operátor %*%.
|
Řešení lineárních rovnic a inverze
Řešení lineárních rovnic je inverzní operací k maticovému násobení
> b <- A %*% x
A značí čtvercovou matici koeficientů pro lineární systém, b je vektor nebo matice pravé strany. Vektor/matice x je řešením systému lineárních rovnic Ax=b, které získáme příkazem solve(A, b). V lineární algebře řešení formálně dostaneme x=A-1b , kde A-1 značí matici inverzní k matici A. Matici inverzní můžeme v R spočítat pomocí solve(A).
> (A <- matrix(c(1, 3, 1, -1), 2))
> (b <- matrix(c(3, 1), 2))
> solve(A, b)
> solve(A) %*% b
|
Příkaz backsolve(A, b, k, upper.tri, transpose) rovněž slouží k řešení lineárních rovnic s horní (upper.tri=TRUE, implicitně) nebo dolní trojúhelníkovou maticí (upper.tri=FALSE). Vektor b je vektor/matice pravých stran, k je počet sloupců matice A, které mají být použity. Pro transpose=TRUE řešíme systém A'x=b, implicitní nastavení je transpose=FALSE.
> backsolve(A, b, upper.tri=TRUE) řeší systém lineárních rovnic
|
Poznámka. Stejně jako u maticového násobení, ani u funkcí solve() a backsolve() není nezbytně nutné zadávat vektory pravé strany jako sloupcové vektory. Pro vstupní řádkový vektor bude výstupem řádkový vektor.