• Non ci sono risultati.

1 Francesca Mazzia Dipartimento Interuniversitario di Matematica Universit`a di Bari MATLAB: Elementi di Algebra Lineare

N/A
N/A
Protected

Academic year: 2021

Condividi "1 Francesca Mazzia Dipartimento Interuniversitario di Matematica Universit`a di Bari MATLAB: Elementi di Algebra Lineare"

Copied!
24
0
0

Testo completo

(1)

Francesca Mazzia

Dipartimento Interuniversitario di Matematica Universit`a di Bari

MATLAB: Elementi di Algebra Lineare

(2)

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:

(3)

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

(4)

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

(5)

- 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

(6)

>> 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)

(7)

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:

(8)

>> 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 =

(9)

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 =

(10)

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

(11)

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 =

(12)

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 =

(13)

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;

(14)

>> 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

(15)

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:

(16)

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

(17)

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

(18)

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

(19)

>> 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 =

(20)

-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 =

(21)

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

(22)

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

(23)

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.

(24)

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

Riferimenti

Documenti correlati

Per essere usata una nuova funzione deve essere caricata nell’ambiente con l’istruzione source(“nomefunction.R”).. Per esempio possiamo scrivere il file testfun.R testfun

y vettore contenente il valore assunto nei punti in x dalla funzione spline. La funzione ` e richiamabile tramite

Le formule composte sono ottenute dividen- do l’intervallo [a, b] in un certo numero N di sottointervalli uguali, ed applicando in ognu- no di questi una formula di quadratura di

In generale al pas- so i dell’eliminazione di Gauss, ordiniamo le righe e le colonne da i a n in modo da por- tare l’elemento pi` u grande in valore assoluto in posizione i, i..

rappresentano istanti discreti di tem- po, le equazioni alle differenze del primo ordine possono essere considerate come lo strumento pi` u semplice per descrivere l’evoluzione

Per i problemi MAL CONDIZIONATI la per- turbazione nei dati dovuta alla rappresenta- zione finita genera errori elevati sul risultato, qualunque sia l’algoritmo utilizzato. Se K `

Data una matrice A, si dice rango della ma- trice, e si indica con rank(A), il rango dell’in- sieme dei suoi vettori colonna.... L’ultima relazione pu` o essere fuorviante, per- ch`

Dipartimento Interuniversitario di Matematica Universit` a di Bari. MATLAB: Elementi di Algebra