
# come costruire/riempire una matrice

# 1) per righe
A = rbind( c(1, 3), c(-3, 5) )

# esempi di accesso
A[1,1]
A[1,2]

A[1,]
A[,2]

A[1,] = -1 * A[1,]
A[,2] = 2 * A[,2]
# (utile per il metodo di eliminazione di Gauss)

diag(A)
t(A)
diag(A) = c(7, -7)   

# 2) per colonna
B = cbind( c(1, 3), c(-3, 5) )

# ordinamento interno in memoria (è sempre per colonne)
as.vector(A)
as.vector(B)

# dimensioni
dim(A)

# 3) elementi + dimensioni
C = matrix(1:4, c(2,2))

# 3a) ma è sufficiente dare anche solo in nr di righe o di colonne
D = matrix(1:6, c(2,3))
D = matrix(1:6, nrow=2)
D = matrix(1:6, ncol=3)

# le dimensioni possono essere cambiate
dim(D) = c(3,2)

# 4) scrivere la matrice tale e quale (se corta...) con opzione byrow=TRUE
A <- matrix(c(4, 2, 1,
              5, 6, 7,
              1, 0, 3), nrow=3, byrow=TRUE)


# operazioni fra matrici 
# (i vettori sono visti come matrici di una sola colonna)
A %*% B

# A %*% D   # dà errore
D %*% A   # ok

1:3 %*% 1:3     # curiosamente funziona
t(1:3) %*% 1:3  # più rigorosamente

# per trasformare in semplice 'numero' (in realtà un vettore)
as.vector( t(1:3) %*% 1:3 )

1:3 %*% t(1:3)

outer(1:3, 1:3) # ricordate?

# matrice inversa
iA = solve(A)
iA %*% A
A %*% iA







