Francesca Mazzia
Dipartimento Interuniversitario di Matematica Universit`a di Bari
MATLAB: Elementi di Algebra Lineare
Elementi di Algebra Lineare.
Una matrice `e una tabella di numeri ordinata per righe e colonne.
Definiamo ai,j elemento della matrice che si trova all’incrocio della riga i.ma con la colonna j.ma della matrice
A =
a1,1 a1,2 . . . a1,n a2,1 a2,2 . . . a2,n ... ... . .. ... am,1 am,2 . . . am,n
dove m e n dimensioni della matrice A.
Se m = n A si dice matrice quadrata di ordine n.
Se ai,j = 0 abbiamo la matrice nulla O.
Indichiamo con Rm×n l’insieme di tutte le matrici con m righe ed n colonne ad elementi reali.
Gli elementi con indici uguali sono gli elementi principali; questi sono dati da:
a1,1,· · · , ak,k, k = min(m, n) e formano la diagonale principale di A.
Vediamo quali sono le istruzioni MATLAB che ci permettono di lavorare con le matrici.
Possiamo costruire una matrice di ordine 3 i cui elementi assumono valori casuali mediante la seguente istruzione:
>> A=rand(3,3) A =
0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214
Vediamo ora alcuni particolari esempi di matrici:
Matrici quadrate:
1) matrici triangolari inferiori (ai,j = 0 per j > i):
L =
a1,1 0 . . . 0 a2,1 a2,2 . .. ... ... ... . .. 0 an,1 an,2 . . . an,n
- Estrazione della parte triangolare inferiore di A assegnando valore 0 agli elementi della parte triangolare superiore:
>> L=tril(A) L =
0.9501 0 0
0.2311 0.8913 0
0.6068 0.7621 0.8214
2) matrici triangolari superiori (ai,j = 0 per i < j):
U =
a1,1 a1,2 . . . a1,n
0 a2,2 . . . a2,n ... . .. ... ... 0 . . . 0 an,n
- Estrazione della parte triangolare superiore di A assegnando valore 0 agli elementi della parte triangolare inferiore:
>> U=triu(A) U =
0.9501 0.4860 0.4565
0 0 0.8214
3) le matrici diagonali (ai,j = 0 per i6= j):
D =
a1,1 0 . . . 0 0 a2,2 . .. ... ... . .. ... 0 0 . . . 0 an,n
che possiamo anche scrivere
D≡ diag(a1,1, a2,2, . . . , an,n);
- Estrazione della diagonale principale di A:
>> diag(A) ans =
0.9501 0.8913 0.8214
- Costruzione di una matrice diagonale avente sulla diagonale principale i valori della diagonale principale di A:
>> diag(diag(A)) ans =
0.9501 0 0
0 0.8913 0
0 0 0.8214
- Altre propriet`a della funzione diag:
>> diag([1 2 3], -1) ans =
0 0 0 0
1 0 0 0
0 2 0 0
0 0 3 0
>> diag([1 2 3], -1) +diag( [1 2 3 4],0) ans =
1 0 0 0
1 2 0 0
0 2 3 0
0 0 3 4
>> diag([1 2 3], -1) +diag( [1 2 3 4]) ans =
1 0 0 0
1 2 0 0
0 2 3 0
0 0 3 4
>> diag([1 2 3], -1) +diag( [1 2 3 4])+diag([1 2 3],1) ans =
1 1 0 0
1 2 2 0
0 2 3 3
0 0 3 4
>> diag(ones(9,1), -1) +diag(2*ones(10,1))+diag(ones(9,1),1) ans =
2 1 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0 0 0 0
0 1 2 1 0 0 0 0 0 0
0 0 1 2 1 0 0 0 0 0
0 0 0 1 2 1 0 0 0 0
0 0 0 0 1 2 1 0 0 0
0 0 0 0 0 1 2 1 0 0
0 0 0 0 0 0 1 2 1 0
0 0 0 0 0 0 0 1 2 1
0 0 0 0 0 0 0 0 1 2
Matrice identit`a:
I =
1 0 . . . 0 0 1 . .. ...
... . .. ... 0 0 . . . 0 1
-Istruzione MATLAB per costruire una matrica identit`a:
>> eye(4,4) ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>> eye(5,3)
ans =
1 0 0
0 1 0
0 0 1
0 0 0
0 0 0
Matrici di dimensioni m× n:
- matrici con n = 1 formate da una sola colonna, vettori colonna:
x =
x1 x2 ... xm
Esempio:
>> x=rand(3,1) x =
6.7214e-001 8.3812e-001 1.9640e-002
- matrici con m = 1, formate da una sola riga, vettori riga:
y = y1 y2 . . . yn Esempio:
>> x=rand(1,3) x =
6.7214e-001 8.3812e-001 1.9640e-002
Matrici a predominanza diagonale per righe e/o per colonne.
Una matrice A si dice a predominanza diagonale per righe se:
|ai,i| ≥X
j6=i
|ai,j|
ed esiste almeno un indice i per cui vale la disuguaglianza stretta.
Una matriceA si dice a predominanza diagonale per colonne se:
|aj,j| ≥X
i6=j
|ai,j|.
ed esiste almeno un indice j per cui vale la disuguaglianza stretta.
Quando le due disuguaglianze sono strette allora la matrice si dice a predominanza diagonale in senso stretto.
Sia A∈ Rm×n, si dice trasposta di A la matrice AT ∈ Rn×m ottenuta da A scambiando le righe con le colonne.
Esempio:
>> A=[1 2 3 4;5 6 7 8;9 10 11 12]
A =
1 2 3 4
5 6 7 8
9 10 11 12
>> A’
ans =
1 5 9
2 6 10
3 7 11
4 8 12
Si pu`o provare che (AT)T = A.
Infatti:
>> (A’)’-A ans =
0 0 0 0
0 0 0 0
0 0 0 0
Se AT = A, la matrice A si dice simmetrica.
Operazioni con matrici.
Siano A, B, C ∈ Rm×n
- Se C = A + B allora ci,j = ai,j + bi,j;
>> A=rand(3,3) A =
0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214
>> B=rand(3,3) B =
0.4447 0.9218 0.4057 0.6154 0.7382 0.9355 0.7919 0.1763 0.9169
Facciamo la somma tra le due matrici:
>> A+B ans =
1.3948 1.4078 0.8622 0.8466 1.6295 0.9540 1.3988 0.9384 1.7383 e otteniamo una matrice C di ordine 3.
- Se C = αA allora ci,j = αai,j.
>> 3*A ans =
2.8504 1.4579 1.3694 0.6934 2.6739 0.0555 1.8205 2.2863 2.4642 Prodotto righe per colonne:
siano A∈ Rm×q e B ∈ Rq×n
il prodotto C = AB ∈ Rm×n si ottiene ponendo:
ci,j =
q
X
s=1
ai,sbs,j, i = 1, m, j = 1, n.
>> A*B
ans =
1.0831 1.3151 1.2586 0.6660 0.8743 0.9445 1.3894 1.2668 1.7123
Il prodotto righe per colonne soddisfa le seguenti propriet`a:
1) (αA)B = A(αB) = α(AB);
>> A=rand(3,3) A =
0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214
>> B=rand(3,3) B =
0.4447 0.9218 0.4057 0.6154 0.7382 0.9355 0.7919 0.1763 0.9169
>> C=rand(3,3) C =
0.4103 0.3529 0.1389 0.8936 0.8132 0.2028 0.0579 0.0099 0.1987
>> (6*A)*B ans =
6.4987 7.8903 7.5518 3.9959 5.2457 5.6671 8.3363 7.6006 10.2736
>> A*(6*B) ans =
6.4987 7.8903 7.5518 3.9959 5.2457 5.6671 8.3363 7.6006 10.2736
>> 6*(A*B) ans =
6.4987 7.8903 7.5518 3.9959 5.2457 5.6671 8.3363 7.6006 10.2736
2) se D∈ Rm×q si ha:
(A + D)B = AB + DB;
>> D=rand(3,3) D =
0.6038 0.0153 0.9318 0.2722 0.7468 0.4660 0.1988 0.4451 0.4186
>> (A+D)*B ans =
2.0990 2.0472 2.3723 1.6157 1.7586 2.1808 2.0833 1.8524 2.5932
>> A*B+D*B ans =
2.0990 2.0472 2.3723 1.6157 1.7586 2.1808 2.0833 1.8524 2.5932
3) se C ∈ Rq×n, si ha:
A(B + C) = AB + AC;
>> A*(B+C) ans =
1.9336 2.0500 1.5798 1.5584 1.6808 1.1610 2.3670 2.1087 2.1143
>> A*B+A*C ans =
1.9336 2.0500 1.5798 1.5584 1.6808 1.1610 2.3670 2.1087 2.1143
4) se C ∈ Rn×s, allora:
A(BC) = (AB)C;
>> A*(B*C) ans =
1.6924 1.4640 0.6672 1.1092 0.9553 0.4575 1.8012 1.5372 0.7901
>> (A*B)*C ans =
1.6924 1.4640 0.6672 1.1092 0.9553 0.4575 1.8012 1.5372 0.7901
5) (AB)T = BTAT.
>> (A*B)’
ans =
1.0831 0.6660 1.3894 1.3151 0.8743 1.2668 1.2586 0.9445 1.7123
>> B’*A’
ans =
1.0831 0.6660 1.3894 1.3151 0.8743 1.2668 1.2586 0.9445 1.7123
Non vale in genere la propriet`a commutativa, cio`e non `e in genere vero che AB = BA, anche quando i due prodotti possono eseguirsi entrambi.
Esempio:
>> A=[1 2;3 4]
A =
1 2
3 4
>> B=[0 1;0 0]
B =
0 1
0 0
>> A*B ans =
0 1
0 3
>> B*A ans =
3 4
0 0
Vi sono per`o delle matrici per cui AB = BA. In tal caso si dice che le matrici A e B commutano.
Non `e in genere vero che se AB = 0, una delle due matrici A o B debba essere nulla. Esempio:
B =
0 1
0 0
>> B*B ans =
0 0
0 0
Inversa di un matrice.
Sia A∈ Rn×n.
Se esiste una matrice A−1 ∈ Rn×n tale che A−1A = AA−1 = I allora A−1 viene chiamata
inversa della matrice A.
>> A=[1 2;3 4]
A =
1 2
3 4
>> inv(A) ans =
-2.0000 1.0000 1.5000 -0.5000
Se l’inversa esiste, essa `e unica.
Infatti sia B tale che BA = AB = I, allora:
B = BI = BAA−1 = IA−1 = A−1. Vale la seguente propriet`a
(AB)−1 = B−1A−1 infatti:
(AB)B−1A−1 = A−1B−1BA = I.
>> A=[1 2;3 4]
A =
1 2
3 4
>> B=[5 6;7 8]
B =
5 6
7 8
>> inv((A*B)) ans =
12.5000 -5.5000 -10.7500 4.7500
>> inv(B)*inv(A) ans =
12.5000 -5.5000 -10.7500 4.7500
Se A `e non singolare, lo `e anche A−1. Infatti (A−1)−1 = A.
Provare che:
• (AT)−1 = (A−1)T.
>> A=[1 2;3 4]
A =
1 2
3 4
>> inv((A’)) ans =
-2.0000 1.5000 1.0000 -0.5000
>> (inv(A))’
ans =
-2.0000 1.5000 1.0000 -0.5000
• L’inversa di diag(d1, d2, . . ., dn) `e:
diag(d−11 , d−12 , . . ., d−1n )
>> A=[1 2;3 4]
A =
1 2
3 4
>> diag(diag(A)) ans =
1 0
0 4
>> inv(diag(diag(A))) ans =
1.0000 0
0 0.2500
• L’inversa di una matrice triangolare superiore (inferiore) `e una matrice dello stesso tipo.
>> A=[1 2;3 4]
A =
1 2
3 4
>> tril(A) ans =
1 0
3 4
>> inv(tril(A)) ans =
-0.7500 0.2500
• Il prodotto di matrici triangolari superiori (inferiori) `e una matrice dello stesso tipo.
> A=[1 2;3 4]
A =
1 2
3 4
>> B=[5 6;7 8]
B =
5 6
7 8
>> tril(A) ans =
1 0
3 4
>> tril(B) ans =
5 0
7 8
>> tril(A)*tril(B) ans =
5 0
43 32
Se invece prendiamo una qualunque matrice C di 4 righe e 3 colonne possiamo vedere che non `e possibile effettuare il prodotto A ∗ C perch`e il numero delle colonne di A `e diverso dal numero delle righe di C mentre `e possibile effettuare il prodotto C∗A. Ci`o si pu`o verificare mediante i seguenti comandi:
>> format short e
>> A=rand(3,3) A =
4.4470e-001 9.2181e-001 4.0571e-001 6.1543e-001 7.3821e-001 9.3547e-001 7.9194e-001 1.7627e-001 9.1690e-001
>> C=rand(4,3) C =
6.0379e-001 7.4679e-001 4.1865e-001 2.7219e-001 4.4510e-001 8.4622e-001 1.9881e-001 9.3181e-001 5.2515e-001 1.5274e-002 4.6599e-001 2.0265e-001
>> A*C
Error using ==> *
Inner matrix dimensions must agree.
>> C*A ans =
1.0596e+000 1.1817e+000 1.3274e+000
1.0778e+000 9.6371e-001 1.4339e+000 4.5406e-001 3.9380e-001 6.2793e-001
Se invece consideriamo l’operazione .* non `e possibile effettuare C.∗ A perch`e A e C hanno un numero diverso di righe:
>> A.*B ans =
1.8245e-001 3.2528e-001 5.6349e-002 5.4998e-001 6.0029e-001 1.8968e-001 4.5846e-002 1.7382e-003 1.8221e-001
>> C.*A
Error using ==> .*
Matrix dimensions must agree.
Possiamo ripetere le stesse operazioni con vettore colonna x di 3 elementi:
x =
6.7214e-001 8.3812e-001 1.9640e-002
>> A*x ans =
1.0795e+000 1.0507e+000
6.9803e-001
>> x*A
Error using ==> *
Inner matrix dimensions must agree.
Ora vediamo altre applicazioni sulle matrici:
- Determinante di A:
>> A=[1 2;3 4]
A =
1 2
3 4
>> det(A) ans =
-2
- Matrice di Toeplitz:
>> help toeplitz
TOEPLITZ Toeplitz matrix.
TOEPLITZ(C,R) is a non-symmetric Toeplitz matrix having C as its first column and R as its first row.
TOEPLITZ(R) is a symmetric (or Hermitian) Toeplitz matrix.
See also HANKEL.
possiamo risolvere il sistema B∗ x = b nel seguente modo:
>> B=rand(3,3) B =
0.1389 0.6038 0.0153 0.2028 0.2722 0.7468 0.1987 0.1988 0.4451
>> b=rand(3,1) b =
0.9318 0.4660 0.4186
>> x=B\b x =
1.2136 1.2683 -0.1678
Infatti:
>> B*x-b ans =
1.0e-15 * -0.1110
0 0