Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Risoluzione di Sistemi Lineari Vogliamo trovare un’approssimazione delle soluzioni di sistemi di n equazioni lineari in n incognite: a1,1 x1 +a1,2 x2 + · · · +a1,n xn = b1 a x +a2,2 x2 + · · · +a2,n xn = b2 2,1 1 .. .. .. .. .. (1) . . . . . an−1,1 x1 +an−1,2 x2 + · · · +an−1,n xn = bn−1 an,1 x1 +an,2 x2 + · · · +an,n xn = bn Ponendo a1,1 a2,1 .. A= . a n−1,1 an,1 a1,2 ··· a1,n−1 a1,n a2,2 .. . ··· .. . an,n−1 .. . a2,n .. . an−1,2 ··· an−1,n−1 an−1,n an,2 ··· an,n−1 an,n b1 b2 . b = .. b n−1 bn e x = [x1 x2 · · · xn−1 xn ]T , il sistema (1) diventa: Ax = b, A ∈ Rn×n , b, x ∈ Rn Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica È noto che il sistema (1) ammette un’unica soluzione se e solo se la matrice A è non singolare, cioè det(A) 6= 0. In questo caso possiamo scrivere x = A−1 b. Il metodo di risoluzione che certamente conoscete è la Regola di Cramer: xi = det(Ai ) , det(A) i = 1, . . . , n, dove Ai denota la matrice ottenuta da A sostituendo la colonna i−esima con il vettore b. I determinanti coinvolti potrebbero essere calcolati utilizzando la Regola di Laplace scritta nella forma det(A) = n X (−1)j+1 a1,j det(A1,j ), j=1 dove A1,j rappresenta la matrice di ordine n − 1 ottenuta da A eliminando la prima e la j−esima colonna. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica La Regola di Cramer non è ammissibile come metodo numerico in quanto il suo costo computazionale è dell’ordine di [(n + 1)(n − 1)n]! Supponendo di poter effettuare ogni operazione moltiplicativa in 7 · 10−8 secondi, per risolvere un sistema 20 × 20 occorrono circa 2 · 106 anni!! Si potrebbe pensare di calcolare A−1 e risolvere il sistema utilizzando la formula x = A−1 b. Tra tutti i metodi che si conoscono per il calcolo della matrice inversa, quello meno “costoso” ha un costo computazionale dell’ordine di n3 . Inoltre è necessario eseguire il prodotto A−1 b che ha un costo computazionale di n2 . In seguito vedremo dei metodi numerici per la risoluzione di un sistema lineare che sono molto più efficienti dal punto di vista computazionale. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica I metodi numerici per la risoluzione di un sistema lineare si suddividono in due classi: • Metodi diretti: in assenza di errori di arrotondamento la soluzione viene calcolata esattamente in un numero finito di passi; • Metodi iterativi: attraverso un processo iterativo viene generata una successione infinita di vettori convergente, sotto opportune condizioni, alla soluzione cercata. Anche in assenza di errori di arrotondamento non si ottiene mai la soluzione esatta perchè ad un certo punto è necessario arrestare il processo. I criteri di scelta di un algoritmo sono: • stabilità • occupazione di memoria • costo computazionale Non esiste un algoritmo “migliore” degli altri in assoluto. La scelta viene fatta in funzione delle caratteristiche della matrice A del sistema (“sparsità”, dimensione, struttura). Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Definizione Una matrice A ∈ Rn×n si dice densa se la maggior parte dei suoi elementi è non nullo. Definizione Una matrice A ∈ Rn×n si dice sparsa se il numero dei suoi elementi non nulli è dell’ordine di n. Osservazione Per memorizzare in un calcolatore una matrice sparsa (soprattutto se n è molto grande) è possibile utilizzare solo tre vettori di lunghezza n: uno per memorizzare gli elementi non nulli, uno per memorizzare i corrispondenti indici di riga ed uno per memorizzare i corrispondenti indici di colonna. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica I metodi diretti risolvono il problema iniziale trasformandolo in problemi equivalenti aventi la stessa soluzione ma matrici dei coefficienti differenti. In generale, se la matrice A del sistema è densa i metodi diretti sono più efficienti. Se, invece, la matrice A del sistema è sparsa, i metodi diretti non preservano la sparsità delle matrici coinvolte nel procedimento, anzi con il procedere del metodo il numero degli elementi non nulli presenti in queste matrici generalmente cresce e (se n è molto grande) può ben presto saturare la memoria centrale del calcolatore. In questi casi è utile e, spesso indispensabile, utilizzare i metodi iterativi perchè, invece, quest’ultimi lasciano inalterata la matrice A del sistema. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Condizionamento del problema Supponiamo di introdurre una perturbazione ∆A ∈ Rn×n sulla matrice A e una perturbazione ∆b ∈ Rn sul vettore dei termini noti b. La soluzione che calcoleremo, supponendo che i numeri siano rappresentabili con infinite cifre e che tutte le operazioni aritmetiche siano fatte esattamente, non sarà x ma y = x + ∆x, ∆x ∈ Rn , cioè la soluzione sarà a sua volta perturbata. Risolveremo allora il sistema (A + ∆A)y = (b + ∆b). Anche se la matrice A è non singolare, A + ∆A potrebbe risultare singolare. Tuttavia, supponendo che A + ∆A è non singolare e che kA−1 kk∆Ak < 12 otteniamo la seguente maggiorazione per l’errore relativo indotto sulla soluzione x: kδxk ≤ 2 cond(A) (kδAk + kδbk) , dove cond(A) = kAkkA−1 k e k · k denota una fissata norma matriciale indotta. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica La quantità cond(A) viene chiamata indice o numero di condizionamento della matrice A. cond(A) rappresenta il coefficiente di amplificazione delle perturbazioni indotte sulla matrice A e sul termine noto b. Se cond(A) è “piccolo” il problema è ben condizionato, altrimenti è mal condizionato. Osservazione Per qualunque norma matriciale indotta k · k si ha cond(A) = kAkkA−1 k ≥ kAA−1 k = kIk = 1. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Il seguente teorema precisa meglio il significato di cond(A) Teorema Per ogni matrice non singolare A ∈ Rn×n e per ogni norma matriciale indotta, la quantità (cond(A))−1 rappresenta la distanza relativa minima di A dall’insieme di tutte le matrici singolari di ordine n, cioè ½ ¾ 1 kA − Bk = min : B ∈ Rn×n singolare cond(A) kAk Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Esempi di matrici mal condizionate sono: Matrici di Hilbert 1 1 2 1 Hn = 3 . .. 1 n 1 2 1 3 1 4 1 3 1 4 1 5 ··· .. . ··· .. . 1 n+1 1 n+2 ··· .. . ··· 1 n 1 n+1 1 n+2 .. . 1 2n−1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Matrici di Vandermonde Vn = 1 1 1 ··· 1 x1 x2 x3 ··· xn x21 .. . x22 .. . x23 .. . ··· .. . x2n .. . xn−1 1 xn−1 2 x3n−1 ··· xnn−1 xi 6= xj per i 6= j Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Richiami sulle Norme di Vettori e Matrici Una norma vettoriale è una funzione che associa ad un vettore x ∈ Rn un numero reale kxk con le seguenti proprietà: 1. kxk > 0, ∀x 6= 0 e kxk = 0 ⇔ x = 0; 2. kcxk = |c|kxk, ∀c ∈ R; 3. kx + yk ≤ kxk + kyk, ∀y ∈ Rn . Le norme vettoriali più frequentemente utilizzate sono: • norma infinito: kxk∞ = max |xi | 1≤i≤n • norma 1: kxk1 = n X |xi | i=1 • norma euclidea: à kxk2 = n X ! 12 |xi | 2 = √ xT x i=1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Analogamente, una norma matriciale è una funzione che associa ad una matrice A ∈ Rn×n il numero reale kAk tale che 1. kAk > 0, ∀A 6= 0 e kAk = 0 ⇔ A = 0; 2. kcAk = |c|kAk, ∀c ∈ R; 3. kA + Bk ≤ kAk + kBk, 4. kABk ≤ kAkkBk, ∀B ∈ Rn×n ; ∀B ∈ Rn×n . Le norme matriciali più note sono: • norma infinito: kAk∞ = max 1≤i≤n • norma 1: kAk1 = max 1≤j≤n n X n X |ai,j | j=1 |ai,j | i=1 q • norma spettrale: kAk2 = ρ(AT A), dove ρ(A) è il raggio spettrale della matrice A, cioè il modulo massimo degli autovalori di A; 12 n X n X • norma di Frobenius: kAkF = |ai,j |2 . i=1 j=1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Data una norma vettoriale e una norma matriciale, si dice che le due norme sono compatibili se kAxk ≤ kAkkxk, ∀A ∈ Rn×n , x ∈ Rn . Una norma vettoriale può risultare compatibile con più norme matriciali. Ad ogni norma vettoriale possiamo associare una norma matriciale nel seguente modo: kAk = sup x6=0 kAxk = max kAxk. kxk kxk=1 Una norma cosı̀ definita viene chiamata naturale o indotta da quella del vettore. Per le norme matriciali naturali abbiamo inoltre kIk = max kIxk = 1. kxk=1 Le norme matriciali k · k∞ , k · k1 e k · k2 sono naturali. La norma k · kF non è naturale in quanto 1 2 kIkF = n . Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Si ha kxk∞ induce kAk∞ kxk1 induce kAk1 kxk2 induce kAk2 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Metodi Diretti Sistemi Triangolari Siano x = (x1 x2 · · · xn )T Denotiamo con l1,1 l2,1 .. L= . l n−1,1 ln,1 b = (b1 b2 · · · bn )T e 0 0 ··· 0 l2,2 .. . 0 .. ··· .. . 0 .. . ln−1,2 ··· ln−1,n−1 0 ln,2 ··· ln,n−1 ln,n . matrice triangolare inferiore (Low) Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica e con U = u1,1 u1,2 ··· u1,n−1 u1,n 0 0 .. . u2,2 .. . .. . ··· .. . u2,n−1 .. . u2,n .. . 0 un−1,n−1 un−1,n 0 ··· 0 0 un,n matrice triangolare superiore (Up) Vogliamo risolvere i sistemi Lx = b e Ux = b Osservazione det(L) = l1,1 l2,2 · · · ln,n 6= 0 det(U ) = u1,1 u2,2 · · · un,n 6= 0 ⇔ ⇔ li,i 6= 0 ∀i = 1, . . . , n ui,i 6= 0 ∀i = 1, . . . , n Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Algoritmo di sostituzione in avanti (forward substitution) Lx = b l1,1 x1 = b1 l2,1 x1 + l2,2 x2 = b2 l3,1 x1 + l3,2 x2 + l3,3 x3 = b3 .. .. . . ln,1 x1 + ln,2 x2 + ln,3 x3 + · · · + ln,n xn = bn b1 l1,1 b2 − l2,1 x1 x2 = l2,2 b3 − l3,1 x1 − l3,2 x2 x3 = l3,3 .. . x1 = bi − xi = i−1 X k=1 li,i li,k xk , i = 4, . . . , n Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica x1 = b1 /l1,1 ; for i=2:n xi = bi ; for k=1:i-1 xi = xi − li,k ∗ xk ; end xi = xi /li,i ; end 1 operazione i-1 operazioni 1 operazione costo computazionale n X n(n + 1) n2 i= ' 2 2 i=1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Algoritmo di sostituzione all’indietro (backward substitution) Ux = b u1,1 x1 + u1,2 x2 + u1,3 x3 + · · · + u1,n xn = b1 u2,2 x2 + u2,3 x3 + · · · + u2,n xn = b2 .. .. . . un−1,n−1 xn−1 + un−1,n xn = bn−1 un,n xn = bn bn xn = un,n bn−1 − un−1,n xn xn−1 = un−1,n−1 bn−2 − un−2,n−1 xn−1 − un−2,n xn xn−2 = un−2,n−2 .. . bi − xi = n X k=i+1 ui,i ui,k xk , i = n − 3, n − 4, . . . , 2, 1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica xn = bn /un,n ; for i=n-1:-1:1 xi = bi ; for k=i+1:n xi = xi − ui,k ∗ xk ; end xi = xi /ui,i ; end 1 operazione n-i operazioni 1 operazione costo computazionale 1 X n X n2 n(n + 1) ' n−i+1= i= 2 2 i=n i=1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Osservazione Gli Algoritmi di sostituzione in avanti e all’indietro sono ben definiti se le matrici L e U sono non singolari, cioè li,i 6= 0, ui,i 6= 0, ∀i = 1, . . . , n Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Metodo di eliminazione di Gauss Sia A ∈ Rn×n una generica matrice di ordine n due vettori colonna di lunghezza n. Scriviamo esplicitamente il sistema Ax = b. a1,1 x1 + a1,2 x2 + a1,3 x3 · · · + a1,n xn a2,1 x1 + a2,2 x2 + a2,3 x3 · · · + a2,n xn .. .. .. . . . an,1 x1 + an,2 x2 + an,3 x3 · · · + an,n xn e x, b ∈ Rn = b1 = b2 .. . = bn Supponendo che a1,1 6= 0. Possiamo eliminare l’incognita x1 dalla 2a , 3a , . . . , n−esima equazione sommando all’i−esima equazione i = 2, . . . , n la prima equazione moltiplicata per mi,1 = − ai,1 , a1,1 i = 2, . . . , n. Eseguiamo, cioè, le seguenti combinazioni lineari (2) a i,j = ai,j + mi,1 a1,j i, j = 2, . . . , n (2) bi = bi + mi,1 b1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Il nuovo sistema, equivalente a quello precedente, diventa a1,1 x1 + a1,2 x2 + a1,3 x3 + · · · + a1,n xn = b1 (2) (2) (2) (2) a x + a x + · · · + a x = b 2 3 n 2,2 2,3 2,n 2 (2) (2) (2) (2) a3,2 x2 + a3,3 x3 + · · · + a3,n xn = b3 .. .. .. .. . . . . (2) (2) (2) (2) an,2 x2 + an,3 x3 + · · · + an,n xn = bn Supponendo che a2,2 6= 0. Possiamo eliminare l’incognita x2 dalla 3a , 4a , . . . , n−esima equazione sommando all’i−esima equazione i = 3, . . . , n la seconda equazione moltiplicata per (2) mi,2 = − ai,2 (2) a2,2 , i = 3, . . . , n. Eseguiamo, cioè, le seguenti combinazioni lineari (3) (2) (2) a = a + m a i,2 i,j 2,j i,j (3) (2) (2) bi = bi + mi,2 b2 i, j = 3, . . . , n Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Il nuovo sistema, equivalente a quello precedente, diventa a1,1 x1 + a1,2 x2 + a1,3 x3 + · · · + a1,n xn = b1 (2) (2) (2) (2) a x + a x + · · · + a x = b 2 3 n 2,2 2,3 2,n 2 (3) (3) (2) a3,3 x3 + · · · + a3,n xn = b3 .. .. .. .. . . . . (3) (3) (2) an,3 x3 + · · · + an,n xn = bn (2) (3) Gli elementi a1,1 , a2,2 , a3,3 , . . . , che compaiono durante le successive eliminazioni vengono detti elementi pivot. Dopo (n − 1) passi, supponendo che tutti gli elementi pivot siano non nulli, si ottiene il seguente sistema triangolare superiore equivalente ai precedenti a1,1 x1 + a1,2 x2 + a1,3 x3 + · · · + a1,n xn = b1 (2) (2) (2) (2) a x + a x + · · · + a x = b 2,2 2 2,3 3 2,n n 2 (3) (3) (3) a3,3 x3 + · · · + a3,n xn = b3 .. .. . . (n) (n) an,n xn = bn che può essere risolto con l’Algoritmo di sostituzione all’indietro. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Esempio Consideriamo il seguente sistema 2x1 − x2 + x3 − 2x4 = 0 2x2 − x4 = 1 x1 − 2x3 + x4 = 0 2x + x + x =4 2 3 4 applicando il metodo di Gauss con m2,1 = 0, m3,1 = − 1 2 m4,1 = 0 si ottiene il sistema 2x1 − x2 + x3 − 2x4 2x −x 2 1 2 x2 4 − 52 x3 + 2x4 2x2 + x3 + x4 =0 =1 =0 =4 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Con m3,2 si ha 1 =− 4 m4,2 = −1 2x1 − x2 + x3 − 2x4 2x −x =0 = − 14 2 4 − 52 x3 + 94 x4 x3 + 2x4 Infine, con m4,3 si ottiene =1 =3 2 = 5 2x1 − x2 + x3 − 2x4 2x −x =0 = − 14 2 4 − 52 x3 + 94 x4 29 10 x4 =1 = Da cui, sostituendo all’indietro, si ha µ ¶µ ¶ 1 9 2 x4 = 1, x3 = − − x4 − = 1, 4 4 5 29 10 x2 = 1 + x4 = 1, 2 x2 − x3 + 2x4 x1 = =1 2 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Ponendo (1) ai,j = ai,j e (1) bi = bi , i, j = 1, . . . , n, il seguente schema di calcolo riassume il metodo di eliminazione di Gauss: Per k = 1, 2, . . . , n − 1 (k) a i,k m = − i,k (k) a k,k (k) (k) (k+1) + m a = a a i,k k,j , i,j i,j (k+1) (k) bi = bi + mi,k bk i, j = k + 1, . . . , n Osservazione Il metodo di Gauss si può applicare se e soltanto se ad ogni (k) passo k = 1, . . . , n − 1 l’elemento pivot ak,k 6= 0. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Consideriamo le sottomatrici di A Ak = (ai,j )i,j=1,...,k , k = 1, . . . , n, dette matrici principali di testa di A. Vale il seguente teorema Teorema Sia A ∈ Rn×n . Gli elementi pivot (k) ak,k , k = 1, . . . , n, sono tutti diversi da zero se e soltanto se tutte le matrici principali di testa di A sono non singolari, cioè det(Ak ) = 6 0, ∀k = 1, . . . , n. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Esempi di matrici per le quali la condizione det(Ak ) = 6 0, ∀k = 1, . . . , n, è verificata sono: • matrici a diagonale dominante per righe, cioè |ai,i | > n X |ai,j |, i = 1, . . . , n; j=1 j6=i • matrici a diagonale dominante per colonne, cioè |aj,j | > n X |ai,j |, j = 1, . . . , n, ; i=1 j6=i • matrici simmetriche definite positive, cioè AT = A e xT Ax > 0, ∀x ∈ Rn , x 6= 0. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica ··· for k=1:n-1 for i=k+1:n ai,k = −ai,k /ak,k ; 1 operazione for j=k+1:n ai,j = ai,j + ai,k ∗ ak,j ; n-k operazioni end bi = bi + ai,k ∗ bk ; 1 operazione end end U=triu(A); Si risolve il sistema triangolare superiore U x = b con l’algoritmo di sostituzione all’indietro costo computazionale n−1 X k=1 n−1 n−1 2 X X n n2 2 2 =2 [2(n − k) + (n − k) ] + i+ i + 2 2 i=1 i=1 n(n − 1) n(n − 1)(2n − 1) n2 =2 + + 2 6 2 n3 5 n3 n3 2 2 = +n − n≤ +n ' 3 6 3 3 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Pivoting e stabilità (k) Se al k−esimo passo si trova ak,k = 0, il metodo di Gauss, cosı̀ come è stato descritto, non può proseguire. (k) Se ak,k = 0 necessariamente qualche altro elemento (k) ai,k , i = k + 1, . . . , n, della colonna k−esima della matrice dei coefficienti deve essere non nullo, altrimenti la matrice dei coefficienti sarebbe singolare. (k) Se, ad esempio, ar,k 6= 0, basta scambiare l’equazione k−esima con la r−esima e poi procedere con le eliminazioni. Dunque, ogni sistema non singolare può essere sempre ricondotto alla forma triangolare superiore con il metodo di Gauss più eventuali scambi di equazioni. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Per assicurare una migliore stabilità numerica al metodo di eliminazione di Gauss è spesso necessario permutare l’ordine delle equazioni anche quando l’elemento pivot non è esattamente zero, ma è molto piccolo (in valore assoluto) rispetto agli altri elementi. Per cercare di evitare catastrofiche propagazioni di errori è di solito necessario scegliere, al generico passo k−esimo, l’elemento pivot seguendo una delle seguenti strategie: • Pivoting parziale: si sceglie r uguale al più piccolo intero ≥ k tale che (k) (k) |ar,k | = max |ai,k | k≤i≤n e, se r 6= k, si scambia l’equazione k−esima con l’r−esima; • Pivoting totale: si sceglie la coppia (r, s), con r, s ≥ k tale che (k) |a(k) | = max |a r,s i,j | k≤i,j≤n e si scambiamo l’equazione k−esima con l’r−esima e l’incognita k−esima (con il suo coefficiente) con l’s−esima. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica La strategia di pivoting parziale è la meno “costosa” e, poichè, in generale, risulta soddisfacente, essa è la strategia più utilizzata. Osservazione Il metodo di eliminazione di Gauss senza pivoting è comunque numericamente stabile quando: • la matrice A del sistema è simmetrica e a diagonale dominante (la strategia di pivot non produce scambi); • la matrice A del sistema è simmetrica e definita positiva. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Esempio Consideriamo il sistema lineare Ax = b di ordine n = 18, dove µ ¶ 2i − 1 ai,j = cos (j − 1) π , i, j = 1, . . . , n, 2n e bi = n X ai,j , i = 1, . . . , n, j=1 la cui soluzione esatta è x = (1, 1, . . . , 1)T . cond(A) = kAk∞ kA−1 k∞ = 16.90251471518910 Risolvendo il sistema con il metodo di eliminazione di Gauss senza e con la strategia di pivoting parziale, si ottengono i seguenti risultati: Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Gauss Gauss + pivoting parziale 9.999999968425205e-001 9.999999999999993e-001 1.000000005848771e+000 1.000000000000000e+000 9.999999953310822e-001 1.000000000000001e+000 1.000000003291504e+000 1.000000000000001e+000 9.999999977773912e-001 9.999999999999997e-001 1.000000001703849e+000 1.000000000000000e+000 9.999999983501708e-001 1.000000000000000e+000 1.000000001767299e+000 1.000000000000001e+000 9.999999982508074e-001 9.999999999999998e-001 1.000000001433063e+000 9.999999999999999e-001 9.999999991425489e-001 9.999999999999993e-001 1.000000000200525e+000 1.000000000000000e+000 1.000000000347843e+000 9.999999999999996e-001 9.999999993163441e-001 9.999999999999990e-001 1.000000000800448e+000 9.999999999999996e-001 9.999999992564082e-001 1.000000000000000e+000 1.000000000564552e+000 1.000000000000000e+000 9.999999996959291e-001 9.999999999999999e-001 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Metodo di Gauss e Fattorizzazione LU Il metodo di eliminazione di Gauss consiste nel costruire una successione di matrici [A|b] = [A(1) |b(1) ] . . . [A(k) |b(k) ] . . . [A(n) |b(n) ] in modo tale che, per k = 1, . . . , n − 1, [A(k+1) |b(k+1) ] = M (k) [A(k) |b(k) ] dove M (k) = 1 0 ... 0 .. . 1 .. 0 .. . . ... .. . 0 0 1 0 0 mk+1,k 1 0 .. . 0 .. . mk+2,k .. . 0 .. . 0 ... 0 mn,k 0 .. . .. . .. . .. ... 0 . 0 .. . .. . 0 1 è la matrice elementare di Gauss. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Si ha A = [M (1) ]−1 A(2) = [M (1) ]−1 [M (2) ]−1 A(3) = · · · = [M (1) ]−1 · · · [M (n−1) ]−1 A(n) e b = [M (1) ]−1 · · · [M (n−1) ]−1 b(n) . Ponendo L = [M (1) ]−1 · · · [M (n−1) ]−1 , U = A(n) e y = b(n) , otteniamo A = LU e b = Ly, dove L è una matrice triangolare inferiore e U è una matrice triangolare superiore. Dunque, il sistema Ax = b diventa LU x = Ly e, dopo aver applicato il metodo di eliminazione di Gauss, rimane da risolvere il sistema triangolare superiore U x = y. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Osservazione Il metodo di eliminazione di Gauss calcola esplicitamente la matrice U . La matrice L è 1 0 ... ... 0 .. 0 . −m2,1 1 .. .. .. .. . . . . .. .. . 1 . L= .. .. . . −mk+1,k 1 .. .. . . −m k+2,k .. .. .. . . . 1 0 −mn,1 . . . . . . −mn,k . . . . . . −mn,n−1 1 Calcolate le matrici L e U , per risolvere il sistema Ax = b, basta risolvere i sistemi Ly = b e U x = y, il primo triangolare inferiore e il secondo triangolare superiore. 3 Il costo computazionale è n3 + n2 di cui sola fattorizzazione A = LU . n3 3 − n 3 ≤ n3 3 per la Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Eseguire la fattorizzazione LU di A può essere utile se: • è necessario risolvere p sistemi Ax1 = b1 , Ax2 = b2 , ..., Axp = bp , cioè il sistema A ∈ Rn×n , X, B ∈ Rn×p ³ 3 ´ Il costo computazionale p n3 + n2 si riduce a AX = B, n3 3 con + pn2 . Se p = n e B = I, risolvere il sistema AX = B, è equivalente a calcolare A−1 . • si vuole calcolare il det A. Infatti det(A) = det(LU ) = det(L) det(U ) = det(U ) = n Y ui,i . i=1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Il metodo di Gauss con la variante del pivot esegue ΠA = LU e Πb = Ly dove Π ∈ Rn×n , detta matrice di permutazione, contiene le informazioni relative agli scambi di righe. Vale il seguente Teorema Per ogni matrice A ∈ Rn×n esiste una matrice di permutazione Π ∈ Rn×n tale che ΠA = LU. Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Metodo di Cholesky Sia A ∈ Rn×n una matrice simmetrica definita positiva. Vale il seguente Teorema Se A ∈ Rn×n è una matrice simmetrica definita positiva esiste ed è unica la fattorizzazione A = LLT . Posto A = (ai,j )i,j=1,...,n e L = (li,j )i,j=1,...,n , si ha ai,j = n X T li,k lk,j = k=1 n X li,k lj,k . k=1 Poichè la matrice è simmetrica, possiamo considerare solo gli elementi di A con j ≤ i. Otteniamo ai,j = j−1 X li,k lj,k + li,j lj,j , i = 1, . . . , n, j = 1, . . . , i − 1 k=1 e ai,i = i−1 X 2 2 li,k + li,i , i = 1, . . . , n. k=1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Da cui v u i−1 X u 2 li,k li,i = tai,i − k=1 " # j−1 X 1 li,k lj,k li,j = lj,j ai,j − i = 1, . . . , n j = 1, . . . , i − 1 k=1 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica ··· for i=1:n li,i = 0; for k=1:i-1 2 li,i = li,i + li,k ; i − 1 operazioni end p li,i = ai,i − li,i ; 1 operazione for j=1:i-1 li,j = 0; for k=1:j-1 li,j = li,j + li,k ∗ lj,k ; j − 1 operazioni end li,j = (ai,j − li,j )/lj,j ; 1 operazione end end Si risolve il sistema triangolare inferiore Ly = b con l’algoritmo di sostituzione in avanti e il sistema triangolare superiore LT x = y con l’algoritmo di sostituzione all’indietro Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica Costo computazionale n X i=1 i + i−1 X j + n2 = j=1 n X i+ i=1 = = = ' 2 i=1 n X n + n2 n 1X 2 1X i+ i − i + n2 2 i=1 2 i=1 i=1 n = n X i(i − 1) n 1X 1X 2 i+ i + n2 2 i=1 2 i=1 n(n + 1) (n + 1)n(2n + 1) + + n2 4 12 n3 3 n + n2 + 6 2 3 n3 6 Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis