Matrizes

Propaganda
Matrizes
• As matrizes arranjam a informação em duas dimensões.
– Em contraposição aos vectores que a arranjam numa só dimensão.
• Em R as matrizes não são mais do que vectores com duas
dimensões.
– Podemos guardar um conjunto de valores numa matriz da seguinte
forma:
> m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5)
> m
[,1] [,2] [,3] [,4] [,5]
[1,]
45
66
33
56
78
Número de linhas
[2,]
23
77
44
12
23
Número de colunas
Luís Torgo, 2002
FEP, UP
> m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5)
[,1] [,2] [,3] [,4] [,5]
Os números foram
[1,]
45
66
33
56
78
[2,]
23
77
44
12
23
por coluna.
“espalhados”
• Podemos espalhar os números por linha da seguinte forma:
> m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5,byrow=T)
> m
[,1] [,2] [,3] [,4] [,5]
[1,]
45
23
66
77
33
[2,]
44
56
12
78
23
• Podemos aceder aos elementos de uma matriz da seguinte forma:
> m[2,4]
[1] 78
> m[1,1]
[1] 45
• Podemos aceder a todos os elementos de uma dimensão da seguinte forma:
> m[1,]
[1] 45 23 66 77 33
> m[,3]
[1] 66 12
Luís Torgo, 2002
1ª linha
Note : o resultado é um vector.
3ª coluna
FEP, UP
• As regras da reciclagem também são usadas com
matrizes
> preços.lojas.2002 <matrix(c(10.4,12,32,34,32.3,30.2,343,350),2,4)
> preços.lojas.2002
[,1] [,2] [,3] [,4]
[1,] 10.4
32 32.3 343
[2,] 12.0
34 30.2 350
> (preços.lojas.2003 <- 1.04 * preços.lojas.2002)
[,1] [,2]
[,3]
[,4]
[1,] 10.816 33.28 33.592 356.72
[2,] 12.480 35.36 31.408 364.00
Luís Torgo, 2002
FEP, UP
Dar nomes às dimensões
• Por vezes é mais simples usarmos nomes nas dimensões.
>
>
>
>
preços.lojas.2002 <- matrix(c(10.4,12,32,34,32.3,30.2,343,350),2,4)
colnames(preços.lojas.2002) <- c('p1','p2','p3','p4')
rownames(preços.lojas.2002) <- c('porto','lisboa')
preços.lojas.2002
p1 p2
p3 p4
porto 10.4 32 32.3 343
lisboa 12.0 34 30.2 350
> preços.lojas.2002['porto','p3']
[1] 32.3
> preços.lojas.2002['lisboa',]
p1
p2
p3
p4
12.0 34.0 30.2 350.0
> preços.lojas.2002[,'p2']
porto lisboa
32
34
> preços.lojas.2002[,2]
Continuamos a poder usar os
porto lisboa
números
32
34
Luís Torgo, 2002
FEP, UP
Álgebra Matricial
• Para obtermos a multiplicação matricial de duas matrizes
usamos:
> m1 <- matrix(c(45,23,66,77,33,44),2,3)
> m1
[,1] [,2] [,3]
[1,]
45
66
33
[2,]
23
77
44
> m2 <- matrix(c(5,3,466,54.5,3.2,-34),3,2)
> m2
[,1] [,2]
[1,]
5 54.5
[2,]
3
3.2
[3,] 466 -34.0
> m1 %*% m2
[,1]
[,2]
[1,] 15801 1541.7
[2,] 20850
3.9
Luís Torgo, 2002
FEP, UP
• Transposta de uma matriz
> m1
[,1] [,2] [,3]
[1,]
45
66
33
[2,]
23
77
44
> t(m1)
[,1] [,2]
[1,]
45
23
[2,]
66
77
[3,]
33
44
• Determinante e inversa de uma matriz quadrada
> m <- matrix(c(34,-23,43,5),2,2)
> det(m)
[1] 1159
> solve(m)
[,1]
[,2]
[1,] 0.004314064 -0.03710095
[2,] 0.019844694 0.02933563
Luís Torgo, 2002
FEP, UP
Resolução de sistemas de equações lineares
• A função solve() também pode ser usada para resolver
este tipo de sistemas.
• Exemplo:
>
>
>
>
coefs <- matrix(c(-4,54.3,0.3,-4),2,2)
colnames(coefs) <- c('x','y')
rownames(coefs) <- c('eq1','eq2')
coefs
x
y
eq1 -4.0 0.3
eq2 54.3 -4.0
> ys <- c(12.3,45)
> solve(coefs,ys)
x
y
216.2069 2923.7586
Luís Torgo, 2002
− 4 x + 0.3 y = 12.3
54.3 x − 4 y = 45
FEP, UP
Download