• Save
Appunti di Elaborazione automatica dei dati: matrici e matlab
Upcoming SlideShare
Loading in...5
×
 

Appunti di Elaborazione automatica dei dati: matrici e matlab

on

  • 1,493 views

Appunti universitari per l'esame di Elaborazione automatica dei dati: matrici e matlab

Appunti universitari per l'esame di Elaborazione automatica dei dati: matrici e matlab

Statistics

Views

Total Views
1,493
Views on SlideShare
1,491
Embed Views
2

Actions

Likes
0
Downloads
0
Comments
1

1 Embed 2

http://profland.altervista.org 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • avviso ai naviganti
    per scaricare i file degli appunti universitari:
    1. cercare profstudio su un motore di ricerca
    2. oppure, andare su http://profland.altervista.org e cliccare sulla sezione ’appunti universitari’
    3. se volete comunicare con me conviene andare su: http://profland.altervista.org/mail.htm

    :)
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Appunti di Elaborazione automatica dei dati: matrici e matlab Appunti di Elaborazione automatica dei dati: matrici e matlab Document Transcript

    • Appunti d’esame:le matrici e matlab Visto su: Profland Appunti di Elaborazione automatica dei dati: le Matrici ed il MatlabSi ricorda che:• luso degli appunti qui presenti è consentito per solo uso personale e di studio;• la consultazione è gratuita ed ogni forma atta a ricavarne lucro è vietata!• gli appunti sono fatti da studenti che non possono assumersi nessuna responsabilità in merito;• il materiale qui presente non è sostitutivo ma complementare ai libri di testo: - devi (e ti consiglio) di consultare e comprare i libri di testo;• il materiale qui presente è distribuito con licenza Creative CommonsTi ricordo che se vuoi contribuire mandando degli appunti o quantaltro possa essere utile ad altri puoi farloinviando il materiale tramite: http://profland.altervista.org/mail.htmSpero che ciò che hai scaricato ti possa essere utile.Profman Il file è stato scaricato/visualizzato in forma gratuita da Profland: http://profland.altervista.org sezione Profstudio http://profland.altervista.org/profstudio/profstudio.htm oppure da qualche mirror, come: www.profland.cjb.net www.profland.135.it o dalla pagina dedicata su slideshare.net: www.slideshare.net/profman 1/18
    • Appunti d’esame:le matrici e matlab Visto su: Profland Le Matrici (autore: jiji from naples)Riconsideriamo il sistema:  ax + by = c  ax+ by = cQuesto è un sistema 2×2, cioè con 2 equazioni in due incognite x ed y.In generale, un sistema sarà n×m, cioè con n equazioni in m incognite. Infatti, ingenerale, non è detto che il numero di equazioni debba essere uguale al numero diincognite; in tal caso si parla di sistema rettangolare. Un sistema rettangolare avràuna rappresentazione del tipo:  a11x1 + a12 x2 +  + a1m xm = b1  a x + a x + + a x = b  21 1 22 2 2m m 2          an1x1 + an 2 x2 +  + anm xm = bn Come vedete per i coefficienti a si usa una notazione matriciale, mentre le incognitex sono distinte dal pedice. Ci sono n equazioni cioè n righe ed m incognite cioè mcolonne. Per cui i coefficienti a costituiscono una matrice n×m che possiamo indicarecon A e chiamare matrice dei coefficienti, le incognite x costituiscono un vettore cheindicheremo con x e così pure i termini noti b costituiscono un vettore cheindicheremo con b . Il sistema precedente, allora, può essere scritto sinteticamente informa matriciale così: Ax = bNoi, per ora, ci occuperemo solo di sistemi quadrati n×n, in cui cioè il numero delleequazioni è uguale al numero delle incognite.Nel caso del sistema 2×2 visto allinizio, la matrice dei coefficienti ed i vettori delleincognite e dei termini noti si possono scrivere così:  a b  x  c A=   a b   x=    y b =   c      Col computer scriveremo i sistemi in forma matriciale, la matrice ed i vettori liinseriremo con le regole di Matlab, faremo dei calcoli per ottenere il vettore dellesoluzioni. La soluzione, quindi, è un vettore; i numeri che lo costituiscono sono lecomponenti del vettore.Il problema, comunque, può ammettere:• ununica soluzione,• nessuna soluzione, 2/18
    • Appunti d’esame:le matrici e matlab Visto su: Profland• infinite soluzioni.Ogni sistema di equazioni può essere rapportato ad un problema geometrico. Nel caso2×2 il sistema rappresenta lintersezione fra due rette e noi sappiamo che due rettepossono:• intersecarsi in un sol punto (unica soluzione),• non intersecarsi mai, perché sono parallele (nessuna soluzione),• intersecarsi in tutti i punti, perché sono sovrapposte, cioè coincidono (infinite soluzioni).Se scriviamo il sistema in forma matriciale e se la matrice dei coefficienti èinvertibile, vuol dire che esiste la matrice inversa A-1. Per cui moltiplicando per A-1primo e secondo membro dellespressione A x = b otteniamo: A− 1 A x = A− 1 bpoiché sappiamo che A-1A=I cioè è la matrice identica che moltiplicata per il vettorex fa x, possiamo scrivere che: x = A− 1 bQuindi, dal punto di vista formale qualunque sistema si risolve semplicementemoltiplicando la matrice inversa dei coefficienti per il vettore dei termini noti. Taleespressione fornirà ununica soluzione, perché come sapete se la matrice inversaesiste essa è unica! Può succedere che la matrice inversa non esista ed, in tal caso, ilsistema potrebbe non ammettere soluzione o avere infinite soluzioni a seconda dicome è fatto il vettore dei termini noti b .Quello che stiamo dicendo non è un concetto nuovo, perché è simile a quello che si faper risolvere unequazione di primo grado: ax=bla soluzione di questa equazione è: b x= ache si può anche scrivere come: x=a-1bin tal caso, come ricordate, la soluzione esisteva ed era unica, purché "a" fossediversa da zero! Se, invece, a è uguale a zero lequazione è del tipo: 0x=bin tal caso se b è diverso da zero, tale equazione non ammette nessuna soluzione;mentre se b è uguale a zero, tale equazione ammette infinite soluzioni. Alla luce diquesto possiamo dire che i sistemi di equazioni non sono che una semplicegeneralizzazione delle equazioni di primo grado.Nel caso dei sistemi, però, perché esista soluzione non basta dire che la matrice deicoefficienti A deve essere diversa dalla matrice nulla, cioè quella fatta di tutti zero.Infatti, sappiamo che la condizione di esistenza della matrice inversa è una questionepiù ampia. Le matrici che non ammettono inversa sono tutte quelle che hannodeterminante nullo. Pertanto, per i sistemi per i quali il determinante di A è diversoda zero, esiste la matrice inversa A-1 ed esiste ununica soluzione. Invece, per i sistemi 3/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflandper i quali il determinante di A è zero potremo dire che o non esiste nessuna soluzioneo esistono infinite soluzioni a seconda di come è fatto il vettore b dei termini noti.Ricordiamo che per decidere se ci sono o non ci sono soluzioni, si può ancheconfrontare il rango della matrice A con quello della matrice che si ottiene prendendotutte le colonne di A ed affiancando in fondo a destra il vettore colonna b dei termininoti:  a11 a12  a1n b1     a 21 a 22  a 2n b2           a an2  a nn bn   n1 Se i due ranghi sono uguali il sistema ammette soluzione, se sono diversi le soluzioninon ci sono! Per indicare questa matrice userò la notazione [A , b] tipica di Matlab.In passato voi già avete affrontato questo problema e lavete risolto facendo degliesercizi con carta e penna, noi ora ci proponiamo di risolverlo servendoci di Matlab.Per inserire la matrice dei coefficienti A in Matlab si useranno le regole checonoscete: A=[………]Così pure per il vettore dei termini noti che è un vettore colonna:   b=    Attenzione che se lo scrivete come vettore riga Matlab si offende!Poi, possiamo controllare se esiste o non esiste linversa, calcolando il determinantedi A. Questo Matlab lo fa velocemente e senza problemi. Cè una funzione che hacome input la matrice e come output produce il determinante. La funzione si chiama"det". Per cui se in Matlab introduciamo prima una matrice A e poi scriviamo det (A)lui calcola il determinate e fa uscire un numero. Se questo numero è diverso da zerocè linversa, se questo numero è zero vuol dire che non esiste linversa di A. Selinversa esiste la posso calcolare con unaltra funzione di Matlab che si chiama "inv".Per cui se in Matlab scriviamo inv (A) lui calcola linversa di A e fa uscire unamatrice. Ciò fatto, la soluzione si ottiene semplicemente moltiplicando questa matriceinversa, così ottenuta, per il vettore colonna dei termini noti. Quindi, dal punto divista matematico non cè alcun problema.Se il determinante di A è uguale a zero, per capire se non ci sono soluzioni o ce nesono infinite dobbiamo confrontare il rango della matrice A con quello della matriceche si ottiene aggiungendo ad A il vettore dei termini noti b . Per calcolare il rangopossiamo utilizzare unaltra funzione di Matlab che si chiama "rank". Se scriviamorank (A), Matlab fornisce un numero che rappresenta il rango di A. Se chiamo C lamatrice ottenuta aggiungendo ad A il vettore dei termini noti b e ne calcolo il rangocon Matlab scrivendo rank (C), otterrò un altro numero che rappresenta il rango di C.Confronto i due numeri così ottenuti e so che se sono uguali ci sono soluzioni, mentrese sono diversi non ci sono soluzioni. Se non ci sono soluzioni ho finito, perché ilsistema non ammette soluzioni. Se, invece, ci sono soluzioni non ho finito perché ledevo trovare, vediamo come si fa al livello concettuale. 4/18
    • Appunti d’esame:le matrici e matlab Visto su: ProflandTorniamo a scrivere: Ax = bdove A è una matrice quadrata n×n ed abbiamo detto che siamo nel caso in cui ildeterminante di A è nullo: det (A) = 0Inoltre, abbiamo detto che se il rango di A è minore di quello della matrice [A , b]ottenuta aggiungendo ad A il vettore dei termini noti b , non ci sono soluzioni ed hofinito: rank (A) < rank (A , b)Se, invece, trovo che i due ranghi sono uguali: rank (A) = rank (A , b)so che ci sono soluzioni, vediamo come possiamo trovarle.Innanzi tutto, diciamo che la soluzione è il vettore x i cui componenti sono n. Ilrango rappresenta il numero di colonne linearmente indipendenti. Poiché A è unamatrice quadrata con n colonne e siccome il determinante di A è uguale a zero ciòvuol dire che non tutte le colonne sono linearmente indipendenti; perciò, il rango nonpuò essere n, deve essere un numero più piccolo di n. Cioè, le colonne di A non sonotutte linearmente indipendenti, ma ce ne saranno alcune che sono linearmentedipendenti dalle altre.Ad esempio, se il rango di A è 100 mentre la matrice A ha 101 colonne, questosignifica che di queste 101 colonne solo 100 sono indipendenti, mentre una èdipendente dalle altre.Se il rango fosse 90, ciò significherebbe che delle 101 colonne che compongono lamatrice A, 90 sono indipendenti e le altre 11 sono dipendenti. Concettualmente ciòvuol dire che le incognite relative a quelle 11 colonne possono essere assegnate inmaniera arbitraria. Assegnate queste 11 incognite in maniera arbitraria, poi calcolo lerimanenti 90 ed ottengo una possibile soluzione. Se assegno le 11 incognite in mododiverso otterrò unaltra soluzione e così via. Si scrive ∞11 e si dice che esistono"infinito a 11" modi di risolvere il sistema. Allora, a livello concettuale se la miamatrice A ha 101 colonne ed ha rango 90, so che ci sono 11 colonne linearmentedipendenti; quello che devo fare è trovarle!Concettualmente è chiaro, poi bisogna vedere in pratica come si fa a trovarle!Lidea concettuale è che io ho una certa matrice fatta da tante colonne, alcune diqueste sono dipendenti. Poiché, io posso scambiare la disposizione delle colonnesenza alterare la matrice, immaginiamo di portare le colonne dipendenti tutte in fondoa destra e di lasciare quelle indipendenti tutte a sinistra: 5/18
    • Appunti d’esame:le matrici e matlab Visto su: Profland n colonne Colonne Colonne indipendenti dipendentiTutta la matrice A aveva n colonne ed n righe perché era quadrata, ma il pezzo dimatrice formato dalle colonne indipendenti non è più una matrice quadrata, perché haun numero di colonne minore di n ed un numero di righe ancora pari ad n. Dallateoria sappiamo, però, che il numero di colonne linearmente indipendenti èsempre uguale al numero di righe linearmente indipendenti! Cioè, dalla teoriasappiamo che il rango è un numero che rappresenta contemporaneamente sia ilnumero di colonne sia il numero di righe linearmente indipendenti! Nel nostroesempio vuol dire che se ci sono 11 colonne dipendenti ci saranno anche 11 righedipendenti. Che vuol dire che una riga è dipendente? Una riga è una delle equazionidel sistema, dire che è dipendente, vuol dire che essa non fornisce nessunainformazione utile, è in più, è ridondante. Perciò si può cancellare! Tutte le righedipendenti si possono portare in basso e si possono cancellare, perché tanto nonservono. Otterremo così ancora una matrice quadrata, più piccola di n×n in cui tuttele colonne e tutte le righe sono linearmente indipendenti, per cui il suo determinante ènecessariamente diverso da zero. Ciò vuol dire che tale matrice può essere invertita. n colonne Matrice con colonne e righe tutte indipendentiLe colonne dipendenti che ho messo in fondo a destra posso portarle fuori dallamatrice dei coefficienti e metterle nel termine noto del sistema, perché sonovalori che posso assegnare arbitrariamente. Questa è la strategia che si usa. Pertrovare la sottomatrice formata da tutte colonne e righe linearmente indipendenti,devo andare a valutare le varie sottomatrici estraibili da A, finché non ne trovo unache ha determinante diverso da zero. Quando lho trovata so che questa sottomatrice è 6/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflandquella su cui devo operare. Ovviamente questa ricerca è possibile su una matrice dipiccole dimensioni, mentre diventa sempre più difficile man mano che crescono ledimensioni. Quindi, anche se a livello concettuale abbiamo chiaro cosa dobbiamofare, il problema resta complesso! Se la matrice fosse molto grande, le possibilisottomatrici da indagare sarebbero talmente tante che trovare quella giusta sarebbeunimpresa lunga e complessa. Comunque, si potrebbe lasciare che un calcolatoretrovi tale matrice, è solo una questione di tempo!Fortunatamente, noi risolveremo solo sistemi che nascono da qualche modelloeconomico-finanziario progettato per risolvere situazioni concrete. Un modelloviene progettato per risolvere un problema; pertanto, un modello per essere utile devenecessariamente portare ad un sistema che ammetta una soluzione, cioè deve portaread una matrice in cui il determinante sia diverso da zero. Non avrebbe senso costruireun modello che non porta ad alcuna soluzione! Quindi, noi ci troveremo sempre insituazioni in cui il determinante è diverso da zero.Solo, per esercizio, talvolta risolveremo qualche situazione in cui cè una matrice condeterminante nullo. E vi ho detto come procedere a livello matematico. Fin dora,però, vi deve essere chiaro che quando tratteremo matrici legate a modellieconomico-finanziari, esse avranno sempre determinante non nullo.Adesso, ritorniamo al discorso di partenza.Abbiamo il nostro sistema: Ax = be supponiamo che il determinante sia diverso da zero: det (A) ≠ 0In queste condizioni, abbiamo detto che la soluzione esiste ed è unica e si puòscrivere così: x = A− 1 bAbbiamo detto che, assegnata la matrice A, possiamo calcolare con Matlab ildeterminante. Se esso è diverso da zero possiamo calcolare la matrice inversa A -1 emoltiplicarla per il vettore b ottenendo il vettore x .Tutto ciò sembra semplice, ma dobbiamo ricordarci che i calcoli eseguiti con uncalcolatore sono inevitabilmente affetti da piccoli errori. La presenza di questipiccoli errori rende il problema, che appariva semplice, un po più delicato!Supponiamo che il determinante sia diverso da zero, ma sia molto piccolo; adesempio, supponiamo che sia 10-20. In tal caso, quando Matlab esegue i calcolipotrebbe commettere un errore, potrebbe addirittura far uscire zero! Oppure, potrebbeaccadere che il determinante è veramente zero, Matlab lo calcola e, invece di zero, fauscire 10-20. Come faccio a sapere se quel 10 -20 rappresenta un numero piccolo, ma 7/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflanddiverso da zero oppure è uscito così perché Matlab ha fatto un troncamento? Lamatematica distingue in maniera precisa e netta matrici con determinante nullo damatrici con determinante molto piccolo, ma diverso da zero. Un calcolatore, invece,potrebbe confondere questi due tipi di matrici!Oltre a questo problema, ce nè anche un altro legato alle perturbazioni. Cioèassegnando i dati in un certo modo piuttosto che in un altro potremmo avere soluzionidiverse!Quindi, nei calcoli col calcolatore cè qualche problema di cui bisogna tener conto inqualche modo.Vi dico fin dora che alcuni artifici per risolvere questi problemi già sono stati inseritiin Matlab.A questo punto vediamo quali sono gli artifici che si possono studiare per risolverequesti problemi.Iniziamo a calcolare la matrice inversa A -1. Dalla teoria matematica sappiamo che lamatrice inversa è uguale alla matrice trasposta dei complementi algebrici divisa per ildeterminante di A, cioè: 1 A− 1 = ( complementi algebrici ) T det ALa matrice trasposta dei complementi algebrici è detta comunemente "matriceaggiunta" di A. Il complemento algebrico A11 è il determinante della matrice che siottiene da A cancellando la riga 1 e la colonna 1. In generale, il complementoalgebrico Aij è il determinante della matrice che si ottiene da A cancellando la riga i-sima e la colonna j-sima.Vi ricordate in matematica come si fa a calcolare un determinante?Tenete presente che il determinante è un concetto che si può applicare solo amatrici quadrate! Il determinante è la somma dei prodotti ottenuti moltiplicando glielementi di una riga (o di una colonna) per i rispettivi complementi algebrici. Cioè, simoltiplica ogni elemento di una riga (o di una colonna) per il determinante di ordinen-1 che si ottiene cancellando la riga e la colonna cui lelemento appartiene. Si trattadi un processo induttivo. Per calcolare un determinate di ordine n devo calcolare deideterminanti di ordine n-1 e così via a ritroso fino ad arrivare a determinanti di ordine2. Questi ultimi si calcolano moltiplicando gli elementi della diagonale principale esottraendo il prodotto degli elementi della diagonale secondaria: a a  A =  11 12  a  det A = a11 ⋅ a22 − a12 ⋅ a21  21 a22 Per calcolare un determinante di ordine 2 sono necessarie quindi 2 moltiplicazioni.Ma, per calcolare un determinante di ordine 3 sono necessarie 3 moltiplicazioni perdeterminanti di ordine 2, cioè in tutto 3×2 moltiplicazioni. Per calcolare undeterminante di ordine 4 sono necessarie 4 moltiplicazioni per determinanti di ordine3, cioè in tutto 4×3×2 moltiplicazioni. Per calcolare un determinante di ordine 5dovremo fare 5×4×3×2 moltiplicazioni. Per calcolare un determinante di ordine n 8/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflanddovremo fare n! moltiplicazioni. Per cui, come vedete, più grande è la matrice, piùcrescono i calcoli. Notate, inoltre, che il numero di moltiplicazioni cresce in manieraestremamente rapida; pensate che per calcolare il determinante di una matrice diordine 14 sono necessarie 14! moltiplicazioni, cioè circa 87 miliardi dimoltiplicazioni; per calcolare il determinante di una matrice di ordine 15 sononecessarie 15! moltiplicazioni, cioè circa 1300 miliardi di moltiplicazioni.Le CPU oggi raggiungono i 2Ghz, cioè fanno quasi 2 miliardi di operazionielementari al secondo (clock). Il prodotto non è unoperazione elementare, èunoperazione complessa che coinvolge più passi elementari. Per fare un prodotto civogliono circa 10 clock. Pertanto un calcolatore sarà in grado di fare circa 200milioni di prodotti al secondo. Perciò per calcolare un determinante di ordine 14 cimetterà circa 7 minuti. Ricordate che per calcolare un determinante di ordine 15dobbiamo calcolare un determinante di ordine 14 per ogni elemento della matriceaggiunta, cioè dobbiamo calcolare 15×15 determinanti di ordine 14, per cui civorranno circa 26 ore! Per calcolare un determinante di ordine 20 ci vorrà più di unsecolo! Invece, se accendiamo Matlab ed inseriamo una matrice di ordine 20riusciamo ad ottenere velocemente il valore del determinante. Come è possibile?La verità è che Matlab per il calcolo non utilizza la strategia che abbiamo descrittoche deriva dalla definizione matematica del determinante. Nella matematica si usanodelle formule di rappresentazione che quasi mai coincidono con i metodi utilizzati neicalcolatori per eseguire i calcoli. Anche la formula di rappresentazione che abbiamoappena visto per il calcolo della matrice inversa non è quella adottata da Matlab pereseguire il calcolo. Matlab esegue il calcolo della matrice inversa passando attraversoun certo numero di sistemi.Abbiamo il nostro sistema: Ax = bla cui soluzione si può scrivere simbolicamente come: x = A− 1 bse invece di un vettore b di termini noti avessimo una matrice B di termini noti, alposto del vettore x delle incognite si avrebbe una matrice X delle incognite.Avremmo cioè una serie di sistemi che simbolicamente potremmo rappresentarecome: A = XBAvremo tanti sistemi per quante sono le colonne della matrice B. Anche la soluzioneè una matrice X fatta da tante colonne per quante sono quelle di B. Ciò postoutilizziamo come matrice B la matrice identica I, avremo: A = XI 9/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflandda cui si ha: X = A − 1I = A − 1perché la matrice identica I è lelemento neutro del prodotto, cioè moltiplicata perqualsiasi matrice dà la matrice di partenza.Allora, siamo giunti ad un paradosso. Per calcolare la soluzione del sistema: Ax = bdevo calcolare la matrice inversa A-1 e per calcolare la matrice inversa devo risolveren sistemi. Questo vuol dire che la teoria matematica che passa per il calcolodellinversa è una teoria astratta!Vediamo allora come si fa a risolvere un sistema senza passare attraverso ilsimbolismo della matematica.Il metodo di Cramer non va bene perché utilizza la divisione per un determinante cheè il problema che ci ha bloccato prima. Il metodo di sostituzione non è applicabileperché le incognite coinvolte sono troppe. Non resta che ilMETODO DI GAUSSSi tratta di effettuare certi calcoli prendendo la prima riga ed addizionandolaopportunamente alle successive, allo scopo di far diventare zero gli elementi dellaprima colonna. Che significa addizionare in maniera opportuna? Vuol dire che per acancellare, ad esempio, lelemento a21 devo moltiplicare la riga 1 per il rapporto 21 a11Ad esempio se ho la matrice:  3 2 1    1 3 2  2 4 3  per azzerare lelemento 1 nella seconda riga devo sommare ad essa la prima riga dopoaverla moltiplicata per -1/3 avrò: 3 2 1     0 73 5  3 2 4 3   per azzerare lelemento 2 nella terza riga devo sommare ad essa la prima riga dopoaverla moltiplicata per -2/3 avrò: 3 2 1    0 7 5   3 3 0 8 7   3 3Ripetendo il procedimento posso azzerare lelemento 8/3 nella terza riga, sommandoad essa la seconda riga dopo averla moltiplicata per -8/7 avrò: 10/18
    • Appunti d’esame:le matrici e matlab Visto su: Profland 3 2 1    0 7 5   3 3 0 0 3   7Quindi, operando in questo modo passo ad un sistema del tipo: Cx = ddove la matrice C è una matrice triangolare. In tal caso il sistema è risolto perchédallultima relazione ottengo lultima componente. Nota questa posso inserirla nellapenultima relazione ed ottenere la penultima componente e così via a ritroso.Ovviamente, il meccanismo descritto rappresenta il caso che esista ununicasoluzione. Il ragionamento fatto si dovrà inceppare da qualche parte quando non cisono soluzioni o quando le soluzioni sono infinite. Infatti, il ragionamento si inceppaquando lultimo elemento in basso è zero: 3 2 1     0 73 5  3 0 0 0   in tal caso se il termine noto è zero avrò infinite soluzioni, se il termine noto è diversoda zero non esistono soluzioni.In Matlab è implementato il metodo di Gauss.Ricordiamo che tra le proprietà dei determinanti ce nè una che afferma che seprendo una matrice e sommo una riga ad unaltra il determinante non cambia.Pertanto il determinante della matrice triangolare ottenuta col metodo di gauss è lostesso della matrice di partenza. Ma cè un grosso vantaggio. Il determinante di unamatrice triangolare si calcola semplicemente moltiplicando tra loro gli elementidella diagonale principale! Il Metodo di Gauss non solo risolve il sistema, ma ciaiuta anche a semplificare il calcolo del determinante. Ecco perché Matlab riesce acalcolare rapidamente anche i determinanti di matrici di ordine elevato; le trasformaprima in matrici triangolari col metodo di Gauss e, poi, fa il prodotto degli elementidella diagonale principale.Facciamo unosservazione importante!Quando operiamo a mano il processo di Gauss dobbiamo tener conto di unaltraproprietà dei determinanti che afferma che se si scambiano due righe in unamatrice il determinante cambia segno. Pertanto il valore del determinante dovràessere preso con il proprio segno o col segno opposto a seconda del numero di scambioperati. Matlab conta gli scambi operati e restituisce il valore giusto.Se strada facendo un elemento lungo la diagonale si annulla il determinate sarà nullo,per cui siamo nel caso in cui il sistema non ha soluzioni o ha infinite soluzioni. 11/18
    • Appunti d’esame:le matrici e matlab Visto su: ProflandAndiamo ora a scrivere le formule di Gauss.Abbiamo una prima riga del tipo: a11 a12  a1n b1questa riga viene sottratta dalle successive. In particolare, se consideriamo la secondariga che è del tipo: a 21 a 22  a 2 n b2il nuovo valore assunto da a21 sarà: nuovo a 21 a 21 = a 21 − a11 a11analogamente, il nuovo valore assunto da a22 sarà: nuovo a 21 a 22 = a 22 − a12 a11e così via fino a: nuovo a 21 a 2n = a 2n − a1n a11 nuovo a 21 b2 = b2 − b1 a11Il ragionamento va poi ripetuto iterativamente per triangolarizzare la matrice. Silascia ferma la prima riga e si utilizza la seconda riga con lo stesso criterio esposto.La formula sarà strutturata sempre allo stesso modo, essa è basata sostanzialmente suuna differenza ed un prodotto.I calcoli teorici sono esatti, mentre i calcoli eseguiti dal calcolatore sono affetti daun errore di troncamento, legato alla precisione della macchina che stiamoutilizzando. Nel caso di Matlab lerrore interviene sulla 14ª cifra. Tale errore sitrasferisce al calcolo successivo e si può amplificare o ridurre. Se lerrore si riduce, ilcalcolo rimane stabile; perché il calcolo successivo avrà anche lui un errore a cui sisomma lerrore precedente, ma poiché lerrore precedente si è ridotto il calcolo rimanestabile. Se, invece, lerrore si amplifica, avrò una catena di errori che si amplifica cheporterà ad un risultato sballato.La moltiplicazione può amplificare o ridurre lerrore, a seconda che ilmoltiplicatore abbia un valore maggiore di 1 o minore di 1. Il valore di a11, a causadel troncamento introdotto dal calcolatore, non è esatto, è un a11+ε . Se lo moltiplicoper 100 avrò 100a11+100ε per cui lerrore si è amplificato di 100 volte. Se, invece, lomoltiplico per 0,01 ottengo 0,01a11+0,01ε per cui lerrore si è ridotto di 100 volte. a21Nella formula di Gauss il termine che può amplificare o ridurre lerrore è a11 . 12/18
    • Appunti d’esame:le matrici e matlab Visto su: ProflandPer cui se tale rapporto assume un valore maggiore di 1 gli errori si propaganoamplificandosi, se tale rapporto assume un valore minore di 1 gli errori si propaganoriducendosi ed il calcolo si stabilizza. Ecco perché in certi casi il metodo di Gauss,così come lo abbiamo descritto, non funziona e possono uscire dei valori sballati.Questo fatto ci chiarisce anche perché abbiamo avuto risultati diversi quando ieriabbiamo considerato lesempio del sistema in cui abbiamo invertito i dati. Mettendo idati in un certo ordine io posso aver moltiplicato per un fattore molto grande.Scambiando i dati è successo che quello che avevo usato come moltiplicatore lhousato come divisore, per cui è diventato molto piccolo e questo ha stabilizzato ilcalcolo. Ora capiamo perché se un sistema lo scrivo con un certo criterio mi dà unarisposta e se lo scrivo con un altro criterio ottengo unaltra risposta.Capito il problema, vediamo come lo risolviamo.Il ragionamento che si fa sta alla base di quello che chiamiamo metodo di Gaussmodificato o anche metodo di Gauss con il pivot. a21Se riuscissimo a rendere il rapporto a11 sempre minore di 1, il processo di calcolosarebbe sempre stabile. Ma per far questo basta fare in modo che il termine a11, oltread essere diverso da zero, sia anche il più grande di tutti. Questo è facile, perché bastaconfrontarlo con gli altri elementi della sua colonna: a21, a31, … fino ad an1 e se, percaso, troviamo un termine più grande possiamo sempre scambiare la riga che locontiene con la prima riga. In questo modo la prima riga avrà sempre un a11 che èdiverso da zero ed è il più grande dei termini, per cui tutti i rapporti che hanno aldenominatore a11 saranno minori di 1 ed il calcolo sarà stabile.Analogamente, quando ripeto il procedimento per la seconda equazione, consideroa22 e verifico che sia diverso da zero e che sia il più grande degli elementi lungo lasua colonna a scendere, se questo non avviene scambio le righe come prima.In questa maniera il processo viene stabilizzato per questo tipo di errore.Purtroppo anche la differenza introduce un errore. Lidea del pivot ci aiuta adeliminare lerrore legato alla moltiplicazione, ma non rende il calcolo finaletotalmente immune da errore. Per cui dobbiamo avere la consapevolezza che ilrisultato finale non è mai esatto al 100%, ma è sempre affetto da un errore che noidovremo cercare di misurare.Ora, utilizziamo Matlab per fare qualche esercizio su quello che abbiamo visto.Iniziamo con inserire una matrice. Per inserire una matrice in Matlab dobbiamodigitare una lettera maiuscola seguita dal segno "=" e racchiudere fra parentesi quadreuna serie di numeri separati da virgole o da spazi; per andare a capo alla fine di unariga possiamo usare il tasto "Invio" oppure il punto e virgola. Ad esempio scriveremo: A = [1 2 3 456 7 8 9] 13/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflandpoi premeremo il tasto "invio" e Matlab memorizzerà la matrice. A questo puntopossiamo usare la funzione di Matlab per calcolare il determinante. Scriveremo: det(A)premendo il tasto "invio" Matlab ci risponderà con: ans = 0ciò vuol dire che se questa fosse la matrice di un sistema di equazioni, noi giàsapremmo che il sistema ha infinite soluzioni oppure nessuna a seconda di come èfatto il termine noto.Inoltre, possiamo calcolare il rango di tale matrice. Poiché essa ha tre colonne giàsappiamo che il rango può valere al massimo 3 e siccome abbiamo calcolato che ildeterminante è zero già sappiamo che il rango deve essere minore di 3. Infatti, ilrango rappresenta il numero massimo di colonne e di righe linearmente indipendentie si calcola considerando i minori estraibili dalla matrice che hanno determinantediverso da zero. Ma lunico minore di ordine 3 estraibile dalla matrice A è ildeterminante che vale zero, per cui il rango non può essere 3. Quindi, il suo rango è 2oppure 1. Per saperlo, dovremmo teoricamente estrarre i minori del 2° ordine evedere se ce nè almeno uno che ha determinante diverso da zero, nel qual caso ilrango è 2. Se non se ne trovano il rango è 1. Per la matrice considerata si vede aocchio che cè un minore del secondo ordine diverso da zero, per cui il rango è 2.Quindi, le prime due righe o le prime due colonne sono linearmente indipendenti.Verifichiamo se Matlab ce lo conferma, scriviamo: rank(A)premendo il tasto "invio" Matlab ci risponderà con: ans = 2confermando ciò che ci aspettavamo.Adesso proviamo a calcolare un sistema. Inventiamovi un termine noto, ad esempio: b=[1 2 3]lapostrofo che mettiamo serve a far capire a Matlab che si tratta di un vettorecolonna. Adesso dobbiamo vedere se il sistema che si può costruire con la matrice Aed il vettore b considerati ammette soluzioni. Per sapere se ammette o non ammettesoluzioni dobbiamo valutare il rango di A e lo abbiamo fatto; poi, dobbiamo valutareil rango della matrice che si ottiene aggiungendo ad A il vettore b. Per far questopotremmo materialmente inserire in Matlab una matrice B in cui scriviamo le primetre colonne uguali ad A e lultima uguale a b. Oppure, possiamo vedere se esiste una 14/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflandfunzione di Matlab che fonde insieme la matrice A ed il vettore b già inseriti. Bastascrivere: B=[A , b]Premendo il tasto "invio" Matlab creerà la matrice B prendendo le tre colonne di A edaffiancandoci in fondo a destra la colonna b. Quindi, il separatore virgola "," facapire a Matlab che noi vogliamo affiancare due strutture precedentementedefinite. Naturalmente perché ciò sia possibile le due strutture devono essereaffiancabili, cioè devono avere lo stesso numero di righe, se non ce lhanno Matlabnon le può affiancare. Ad esempio, se scriviamo: C = [A , [1 2 3]]In tal caso sto tentando di affiancare alla struttura A la struttura costituita dal vettoreriga [1 2 3]. Ciò non è possibile perché la prima struttura è fatta da tre righe e laseconda e fatta da una sola riga. Se premiamo il tasto "invio" Matlab ci risponderàcon un messaggio di errore:??? All matrices on a row in the bracketed expression must have the same number of rows.Avvertendoci che le strutture da affiancare devono avere lo stesso numero dirighe.Oltre ad affiancare due strutture possiamo anche metterne una sotto laltra, per farequesto dovremo usare la seguente sintassi: C = [A ; [1 2 3]]Quindi, il separatore punto e virgola ";" fa capire a Matlab che noi vogliamomettere una struttura sotto unaltra precedentemente definita. Questa voltastiamo tentando di aggiungere la riga [1 2 3] in fondo in basso alla matrice A, ciò èpossibile perché la riga che stiamo tentando di aggiungere ha lo stesso numero dicolonne di A; se non avesse lo stesso numero di colonne di A, Matlab ci avviserebbecon un messaggio di errore, avvertendoci che le strutture da mettere una sottolaltra devono avere lo stesso numero di colonne.Torniamo al nostro esempio di partenza. Avevamo la matrice A con determinantenullo e rango 2. Ed abbiamo costruito la matrice B=[A , b] affiancando il vettorecolonna b ad A. Calcoliamo il rango di B, scriviamo: rank(B)premendo il tasto "invio" Matlab ci risponderà con: 15/18
    • Appunti d’esame:le matrici e matlab Visto su: Profland ans = 2Questo significa che A e B hanno lo stesso rango per cui il sistema ammettesicuramente soluzione. Quante sono le soluzioni?Se il rango di A fosse stato 3 la soluzione sarebbe stata unica.Poiché il rango di A è 2, le possibilità che avevamo erano:• che il sistema non ammetteva soluzione, se il rango di B fosse stato maggiore di 2,• che il sistema ammetteva infinite, se il rango di B fosse stato anchesso 2.Poiché abbiamo verificato che B ha rango 2, le soluzioni sono infinite.Come si ottengono tali soluzioni?Per quanto abbiamo detto prima, dobbiamo cancellare una riga di A e spostare unacolonna dal lato del termine noto. Siccome il minore: 12 45è diverso da zero, le prime due righe sono linearmente indipendenti. Per cui possiamo 3cancellare lultima riga di A "7 8 9" e la colonna che resta a destra 6 la portiamo dallato del termine noto. Pertanto, il sistema che in origine era Ax=b, cioè:  1 2 3   x1   1        4 5 6   x2  =  2   7 8 9  x   3   3  si riduce al seguente sistema:  1 2   x1   1   3  4 5   x  =  2  − x3  6           2    Per trovare le soluzioni si assegna un valore arbitrario ad x3 e, in dipendenza di questovalore, si calcolano i valori delle altre due incognite x1 e x2.Per scrivere tutto ciò in Matlab usiamo la seguente sintassi. La matrice ridotta AAottenuta da A cancellando lultima riga e spostando lultima colonna la scriviamo inMatlab come: AA = A(1:2 , 1:2)Cioè stiamo dicendo a Matlab che AA è la sottomatrice ottenuta da A prelevando iprimi due elementi di riga e di colonna. Questa sottomatrice ha determinante diversoda zero. Controlliamo che ciò sia vero, scriveremo: det(AA) 16/18
    • Appunti d’esame:le matrici e matlab Visto su: Proflandpremendo il tasto "invio" Matlab ci risponderà con: ans = -3Analogamente, possiamo costruire il nuovo termine noto estraendolo dal vecchiotermine noto, scriveremo in Matlab: bb = b(1:2)A questo punto, abbiamo tutti i termini per far calcolare a Matlab le soluzioni.Ricordiamo che dobbiamo anche assegnare un valore ad x3, per semplicità scegliamodi porre x3 = 0. In corrispondenza di x3 = 0 calcoleremo i valori delle altre dueincognite. Tra tutte le soluzioni, quella ottenuta ponendo uguali a zero le incognitearbitrarie è detta soluzione basica. In tal caso, in Matlab potremo scrivere: x = inv(AA)∗bbpremendo il tasto "invio" Matlab ci risponderà con: ans = -0.3333 0.6667La soluzione completa è quindi: x1 = - 0.3333 x2 = 0.6667 x3 = 0Per trovare unaltra delle infinite soluzioni, dobbiamo assegnare un altro valore ad x3.Voglio farvi notare che il modo con cui abbiamo scritto la soluzione, passando per ilcalcolo della matrice inversa inv(AA) non è efficiente. Perché il calcolo della matriceinversa comporta di per sé, come abbiamo già detto, la soluzione di due sistemi. Perrendere il calcolo più efficiente bisogna dire a Matlab di non passare per la matriceinversa, per fare questo in Matlab è possibile scrivere: x = AA bbpremendo il tasto "invio" Matlab ci risponderà con: ans = -0.3333 0.6667Il simbolo back slash "" è un comando di Matlab che ci ricorda che questa è unapseudo-divisione; cioè, è una divisione fra matrici in cui, a differenza di quello cheaccade nelle divisioni normali, è importante anche la posizione dei termini. 17/18
    • Appunti d’esame:le matrici e matlab Visto su: Profland Il file è stato scaricato/visualizzato in forma gratuita da Profland: http://profland.altervista.org sezione Profstudio http://profland.altervista.org/profstudio/profstudio.htm oppure da qualche mirror, come: www.profland.cjb.net www.profland.135.it o dalla pagina dedicata su slideshare.net: www.slideshare.net/profman 18/18