• Non ci sono risultati.

Metodi diretti

N/A
N/A
Protected

Academic year: 2021

Condividi "Metodi diretti"

Copied!
18
0
0

Testo completo

(1)

SISTEMI LINEARI

Metodi diretti

(2)

Sistemi lineari

Ax = b, A ∈ R n×n , b ∈ R n b INPUT

x OUTPUT

A relazione funzionale

non ambigua ⇔ det(A) 6= 0 ( ∃ un’unica soluzione) Se det (A) = 0

rank(A) = rank(A|b) ⇒ infinite soluzioni

Se rank(A) 6= rank(A|b) ⇒ nessuna soluzione.

(Esercizio 1)

(3)

Condizionamento

Cosa accade quando i dati di ingresso (A e/o b) del problema sono affetti da errore?

Caso ”piu’ semplice“ (per la teoria): errore nel termine noto b 7→ ˜b = b + δb, Ax = b V A˜ x = ˜b

La soluzione non è più x ma x = x + δx. ˜ Si dimostra che, scelta una norma,

||δx||

||x|| ≤ ||A|| ||A −1 || ||δb||

||b||

||δx||

||x|| errore relativo sulla soluzione (errore propagato)

||δb||

||b|| errore relativo sui dati iniziali (errore inerente)

K(A) = ||A|| ||A −1 || indice di condizionamento

(4)

Condizionamento

Più in generale, se A = A + δA ˜b = b + δb ˜ si ha che l’errore relativo sulla soluzione è

||δx||

||x|| ≤ 2||A|| ||A −1 || µ ||δA||

||A|| + ||δb||

||b||

Esempio

» A=[1 1; 0.999 1]; b=[2 ;1.999]; x=A \ b

perturbiamo la matrice e calcoliamo la soluzione del sistema perturbato

» dA=0.00024*[1 1; -1 -1]; B=A+dA ; x1=B \ b Calcoliamo l’errore relativo sui dati e sulla soluzione

» errdati=norm(dA,inf)/norm(A,inf)

» errsol=norm(x-x1,inf)/norm(x,inf)

A un errore iniziale del 0.024% corrisponde un errore del 95.9% sulla

soluzione (esercizi 2,3)

(5)

Condizionamento

Comandi utili

Calcolare il rango di una matrice

» rank(A)

Calcolare una norma di matrice o vettore

» norm(A,tipo) tipo=2,1,inf calcolo dell’inversa di A

» inv(A)

calcolo dell’indice di condizionamento in norma 2 di A

» cond(A)

(6)

Esempi di matrici malcondizionate

matrici di Hilbert:

H = ³

a i,j ´

, a i,j = 1

i + j − 1 , i, j = 1, . . . , n

»H=hilb(n)

Calcolare l’indice di condizionamento delle matrici di Hilbert di

ordine 4 e 10

(7)

Esempi di matrici malcondizionate

matrice di Vandermond associata a un vettore v = [x 1 , · · · , x n ]

V =

x n 1 −1 x n 1 −2 . x 1 1 x n−1 2 x n−2 2 . x 2 1

. . . . .

. . . . .

x n n −1 x n n −2 . x n 1

V i,j = v i n−j , i, j = 1, · · · , n

»vander(v)

Calcolare l’indice di condizionamento in norma infinito delle

matrici di Vandermond associate ai vettori v 1 = [2, 3, 4] e

v 2 = [2, 2.05, 4]

(8)

Metodi diretti

Si usano per matrici piene

Metodo di eliminazione gaussiana

A =

• • • •

• • • •

• • • •

• • • •

• • • • 0 • • • 0 • • • 0 • • •

· · · → U =

• • • • 0 • • • 0 0 • • 0 0 0 •

Il metodo si arresta quando ci sono elementi pivotali nulli Il metodo è instabile.

E’ necessaria una strategia pivotale per renderlo stabile (esercizi 4,5)

(9)

Metodi diretti

Pivoting parziale pivoting totale

.. ↓ ... ..

0| • • • 0| .. ↓↑ ..

0| • • •

.. .. ¿ ..

0| • • • 0| .. ↓↑ ..

0| • • •

Il pivoting parziale risulta poco costoso e fornisce generalmente una soluzione soddisfacente (in termini di stabilità)

Il pivoting totale e più costoso ma assicura la stabilità Il metodo di eliminazione gaussiana senza pivoting, è

numericamente stabile per matrici simmetriche a diagonale dominante e per matrici simmetriche definite positive

Costo computazionale O( n 3

3

)

(10)

Metodi diretti: fattorizzazione LU

Il metodo di Gauss (con pivoting parziale) è una successione finita di trasformazioni della matrice A e del vettore b .

A ⇒ U P A = LU

P matrice che tiene conto degli scambi di righe

L matrice triangolare inferiore: contiene i moltiplicatori

Ax = b ⇒ P Ax = P b ⇒ LU x = P b ⇒ Ly = P b U x = y

Fattorizzazione LU è utile quando si devono risolvere tanti sistemi con la stessa matrice A e termini noti diversi: faccio la

decomposizione una sola volta (è la parte più costosa!) e poi risolvo

tanti sistemi triangolari ...(es: calcolo dell’inversa di A, esercizio 6)

(11)

Metodi diretti: fattorizzazione LU

la funzione MATLAB che esegue la fattorizzazione LU (con pivoting parziale) è

» [L,U,P]=lu(A) Divisione a sinistra

L’operatore \ calcola automaticamente la soluzione x del sistema Ax = b con il metodo di eliminazione gaussiana

» x=A \ b

La function "divisione a sinistra e’ molto sofisticata...leggere l’help (mldivide \ , mrdivide / )

Per esempio nei casi particolari di sistemi con matrice A triangolare

inferiore o superiore risolve con il metodo di sostituzione in avanti o

all’ indietro rispettivamente....

(12)

Metodi diretti: fattorizzazione di Cholesky

Se A è simmetrica definita positiva

A = L L T L matrice triangolare inferiore

Il comando matlab che fornisce la fattorizzazione di Cholesky è

» L=chol(A)

costo computazionale O( n 6

3

)

(13)

Raffinamento iterativo

Ax = b ⇒ ¯ A¯ x = ¯b A, ¯ ¯ x, ¯b rappresentazioni macchina di A, b, x.

Sappiamo che detta x 0 la soluzione ottenuta con il metodo di Gauss si ha

r 0 = ¯b − ¯ Ax 0 ⇒ ¯ Ae 0 = r 0 dove e 0 = ¯ x − x 0

Quindi x 1 = x 0 + e 0 dovrebbe essere più vicina a x ¯ (se il sistema è ben condizionato).

Posso iterare il procedimento iterativo. Questo converge

rapidamente a x ¯ che è la massima precisione raggiungibile partendo

con i dati A ¯ e ¯b.

(14)

Raffinamento iterativo

Il raffinamento iterativo può essere utile per depurare

l’approssimazione x 0 , ottenuta con Gauss, dagli errori introdotti dal metodo stesso dovuti a una non perfetta stabilità.

Attenzione: per non perdere cifre significative, il residuo DEVE essere calcolato con una precisione doppia. (Svantaggio: aggravio dei costi computazionali)

Si rivela molto utile quando si lavora in precisione singola

Matlab lavora in precisione doppia. È possibile definire le variabili in singola precisione con il comando single

»A=single([ 5 7 6 5; 7 10 8 7; 6 8 10 9; 5 7 9 10]);

»b=single([23;32;33;31])

Tutte le operazioni fatte su A e b saranno fatte in singola precisione.

Per convertire una variabile dalla precisione singola alla doppia si

usa il comando double

(15)

Raffinamento iterativo

Come fare con matlab a calcolare il residuo con una precisione doppia, ovvero con 32 cifre?

Si può usare il comando vpa variable-precision arithmetic per calcolare una espressione con d cifre decimali. Ogni elemento del risultato è una espressione simbolica

» digits(32)

» vpa( ¯b − ¯ A ∗ x 0 )

Attenzione, tornare alle 16 cifre impostando

» digits(16)

Esercizio. Applicare il procedimento di raffinamento al sistema

5 7 6 5

7 10 8 7 6 8 10 9 5 7 9 10

=

 23 32 33 31

(16)

Matrici sparse: effetto Fill in

Consideriamo una matrice A sparsa ovvero con un 70% − 80% di

elementi nulli. Cosa accade quando calcoliamo la fattorizzazione LU di A ?

Le matrici L e U sono molto piu’ piene di A : si perdono i vantaggi della sparsità avendo una occupazione maggiore di memoria

(esercizio 8).

0 50 100

0

20

40

60

80

100

nz = 398

0 50 100

0

20

40

60

80

100

nz = 5198

(17)

Matrici sparse

Se una matrice è sparsa, si deve EVITARE di memorizzare tutta la matrice: si memorizzano solo gli elementi diversi da zero

si usa il formato sparse di matlab

» S=sparse(A)

il comando full converte il formato sparso nel formato pieno

» A=full(S)

Comandi per generare matrici sparse

» R=sprand(m,n,density)

genera una matrice m × n sparsa con density*m*n elementi diversi

da zero distribuiti uniformemente nella matrice

(18)

Matrici sparse

Il comando spdiags

» A=spdiags(B,d,m,n)

crea una matrice sparsa m × n prendendo le colonne di B e mettendole al posto delle diagonali specificate nel vettore d Esempio

»n=100

» e=ones(n,1);

» b=[e, -e, 6*e, -e, 2*e];

» d=[-n/2 -1 0 1 n/2];

» a=spdiags(b,d,n,n);

Per visulalizzare graficamente la matrice si puo’ usare il comando spy che evidenzia solo gli elementi diversi da zero

» spy(a)

Riferimenti

Documenti correlati

Dite se le seguenti affermazioni sono senz’altro vere (VERO), senz’altro false (FALSO) o impos- sibili da classificare nel modo in cui sono espresse (INCERTO).. Scrivete le

Corso di Laurea in Ingegneria Elettrica, Elettronica ed

Risolvere ricorrendo alla serie di Fourier, la seguente equazione differenziale nell’in- tervallo [−3, 3]1. 3y 00 + 2y =

Correzione prova intermedia di Matematica Applicata 14 novembre 2011. Compito numero

Le risposte devono essere concise, ma giustificate e scritte solamente negli spazi

[r]

Una matrice quadrata in cui tutti gli elementi con indici diversi sono nulli si dice

[r]