Analisi numerica e metodi di integrazione numerica L'analisi numerica (detta anche calcolo numerico o calcolo scientifico) è una branca della matematica applicata che risolve i modelli prodotti dall'analisi matematica, riducendoli alle scomposizioni finite normalmente praticabili tramite l’utilizzo di calcolatori, coinvolgendo il concetto di approssimazione. I suoi strumenti, detti algoritmi, sono caratterizzabili in base a velocità di convergenza, stabilità numerica e computabilità. In generale, l'analisi numerica è una scienza sia teorica che sperimentale. Infatti usa assiomi, teoremi e dimostrazioni, come il resto della matematica, ma usa anche i risultati empirici delle elaborazioni eseguite per studiare i metodi migliori per risolvere i problemi. In ogni disciplina scientifica e tecnica si creano modelli matematici che approssimano l’evolversi di un evento oggetto di studio; tale modello permette di simularne il comportamento del fenomeno in esame, e quindi prevedere lo sviluppo futuro del fenomeno, senza dover effettuare fisicamente esperimenti complessi. Un esempio si ha nella fluidodinamica computazionale, che si occupa appunto della risoluzione dei modelli matematici generati con le leggi della fluidodinamica, che descrivono ad esempio l’aerodinamica di un velivolo o di un automobile: tramite simulazioni al computer, è possibile ricavare la forma delle ali di un velivolo, costruendo successivamente un prototipo per raffinarne lo sviluppo, riducendo enormemente i costi e i tempi di sviluppo. Per eseguire lo studio di un fenomeno naturale, si procede generalmente secondo i seguenti punti: Una prima fase di modellizzazione del fenomeno in esame, tramite la quale si associa al problema reale un modello matematico che ne approssimi l’evoluzione. Si consideri il seguente esempio, che mette in evidenza come un modello matematico, per quanto raffinato che sia, è sempre un’approssimazione del problema reale, in quanto una modellizzazione senza errori è impossibile, ma anche inutile perché considererebbe elementi non utili al fine della risoluzione del problema: nel modello matematico per la costruzione di un ponte, è richiesto il bilancio delle forze esercitate sui vari elementi del ponte stesso. Non si tiene però conto delle forze gravitazionali esercitate sugli elementi del ponte dalla luna o dal sole; tali forze sono realmente esistenti e non nulle, e quindi dovrebbero essere considerate in un modello matematico esatto, ma possono di fatto essere trascurate in un modello che approssima il problema reale con errori contenuti; Analisi qualitativa del modello matematico, per determinarne una possibile evoluzione; Individuazione di metodi e algoritmi di risoluzione del modello in esame ed analisi dell’efficienza degli stessi; Implementazione dei metodi di risoluzione precedentemente trovati tramite calcolatore, sfruttando un adeguato linguaggio di programmazione (C o C++ con librerie adeguatamente sviluppate oppure un programma di calcolo numerico come Matlab). Si nota come, i modelli generato dall’analisi matematiche, non sono sempre esprimibili come funzioni elementari o combinazione delle stesso e non sono risolvibile con un numero finito di passi. Il problema quindi si sposta dall’analisi simbolica all’analisi numerica che, con un numero finito di passi, sfruttando un algoritmo appositamente concepito, ricava un valore approssimato della soluzione. L’entità dell’approssimazione deve naturalmente essere adeguata al problema in esame. L’analisi numerica ha assunto una notevole importanza e un grande sviluppo con l’avvento dei calcolatori, che hanno permesso di eseguire calcoli impensabili da svolgere a mano; con l’introduzione dei calcolatori, si sono quindi trattati problemi con una quantità sempre maggiore di dati, che hanno fatto emergere problemi si rappresentazione dei dati in un’algebra finita, aprendo le porte alla branca dell’analisi numerica che si occupa dell’analisi degli errori: si pensi ad esempio come modelli di fluidodinamica posso generare sistemi di decine di milioni di equazioni. I campi di studio nei quali si concentra l’analisi numerica possono essere riassunti nei seguenti: Analisi dell’errore; Determinazione degli zeri di una funzione polinomiale; Risoluzione di funzioni non lineari; Approssimazione di funzioni non lineari con funzioni lineari; Metodi di risoluzione di sistemi lineari; Interpolazione ed estrapolazione di funzioni; Calcolo numerico di derivate di funzioni assegnate; Integrazione numerica. Gli errori che si producono durante la risoluzione sono principalmente dovuti al fatto che il calcolatore opera su dati numerici rappresentati per mezzo di una sequenza finita di cifre, data dalla particolare rappresentazione di tati in memoria adottata: è detto errore di rappresentazione, e si presenta quando si inseriscono i dati, quindi ancora prima di eseguire qualunque operazione. La rappresentazione con un numero finito di cifre impone inoltre l'uso di un'aritmetica approssimata (aritmetica finita) che introduce errori anche nell'esecuzione delle operazioni aritmetiche stesse. Esistono quindi, per uno stesso problema, procedimenti di calcolo che possono generare errori in misura diversa. Si sfruttano problemi elementari, dei quali si conosce l’esatta soluzione, per distinguere facilmente gli algoritmi numericamente instabili, ossia quelli per cui si presenta una elevata propagazione dell'errore, da quelli numericamente stabili. In generale nei problemi concreti tale distinzione non è facile ed è quindi molto importante disporre di tecniche per stabilire a priori se un dato algoritmo è numericamente stabile o instabile. Trovano quindi notevole importanza, nell’ambito dell’analisi numerica, lo studio del condizionamento di un problema, della stabilità numerica di un algoritmo, della complessità computazionale di un problema, e delle questioni legate alla discretizzazione di un problema continuo. Infatti i problemi di analisi matematica hanno generalmente natura continua, e devono essere discretizzati perché gli algoritmi di risoluzione numerica hanno carattere discreto poiché sono finiti. Un algoritmo si dice numericamente stabile se un errore, una volta che è stato generato, non cresce troppo durante il calcolo. Per alcuni problemi non esistono algoritmi stabili, in quanto per variazioni arbitrariamente piccole dei dati del problema, la soluzione varia comunque di molto. Tali problemi sono detti mal condizionati. Per quanto riguarda le equazioni di primo e secondo grado esistono soluzioni dirette semplici, date dalle formule generalmente note. Per le equazioni di terzo e quarto grado, esistono ancora formule che permettono la risoluzione esatta, esprimibile come funzioni razionali ed irrazionali, ma sono formule complesse e di elevato costo computazionale (richiedono ad esempio la valutazione di complesse radici cubiche). Queste formule non vengono quindi generalmente utilizzate e si ricorre ai metodi dell’analisi numerica per la risoluzione di tali funzioni. I metodi dell’analisi numerica permettono di determinare la risoluzione del polinomio, quindi gli zeri dello stesso, in un numero di iterazioni dell’algoritmo tali da ottenere l’approssimazione richiesta dal problema in esame: infatti, tutti i metodi utilizzati, devono convergere alla soluzione esatta quando il numero di iterazioni tendere ad infinito: in tali situazioni, l’algoritmo di dice convergente, in quanto, ad un aumento del numero di iterazioni dello stesso, si giunge sicuramente ad un approssimazione migliore della soluzione esatta del problema. Si usa naturalmente un numero di passi tale per cui, data una stima dell’errore commesso (difficilmente determinabile, ma stimabile, perché non si conosce generalmente il risultato esatto), si abbia un valore finale determinato con un approssimazione minore di quella richiesta. Per le equazione di grado pari o superiore al quinto, non sono presenti metodi di risoluzione generale, ma soltanto per alcuni casi semplificati; per metodi di risoluzione generale, si intendono relazioni che esprimano la soluzione come una qualunque combinazione delle quattro operazioni fondamentali, dell’elevamento a potenza e dell’estrazione di radice. Il teorema fondamentale dell'algebra implica che ogni equazione di quinto grado abbia esattamente cinque soluzioni nei numeri complessi e, per vari secoli, la ricerca di una formula risolutiva per queste equazioni è stata uno dei problemi matematici più studiati, fino a quanto non si dimostrò l’inesistenza di tale formula generale (teorema di Abel-Ruffini). Molte equazioni presentano soluzioni che non sono determinabili con metodi algebrici, come ad esempio molte funzioni trascendentali che non sono riconducibili alle forme elementare di cui sono note le risoluzioni simboliche o che, tali risoluzioni, non sono numericamente valutabili in quanto richiedono la determinazione del valore di alcune funzioni non note, se non con approssimazioni numeriche (si pensi ad esempio alle funzioni trigonometriche inverse). Per la risoluzione di tali equazioni, si usano gli stessi metodi delle funzioni polinomiali, precedentemente descritte, in quanto per risoluzione di una funzione si intende la determinazione degli zeri della stessa. Un problema che frequentemente si presenta in matematica applicata è quello dell'approssimazione di funzioni, che consiste nel determinare una funzione g(x), appartenente ad una classe prescelta di funzioni, che meglio approssima una funzione data f(x). La funzione di partenza è una funzione nota della matematica, in generale non razionale. Lo scopo è quello di produrre una funzione più semplice, cioè più facilmente trattabile (ad esempio più facilmente calcolabile, derivabile o integrabile) della funzione di partenza. Nella risoluzione di sistemi di equazioni, svolge un ruolo determinante la determinazione del costo computazionale di un determinato algoritmo, in quanto sono generalmente problemi contenenti decine di migliaia di equazioni, se non milioni, quindi si punta ad utilizzare metodi sempre più efficienti che convergano più velocemente alla soluzione esatta, o meglio, ad una sua adeguata approssimazione. I metodi diretti costruiscono l'esatta soluzione, a meno di errori di arrotondamento e di rappresentazione, in un numero finito di passi. I metodi iterativi conducono alla soluzione del sistema in un numero teoricamente infinito di passi: partendo da un'approssimazione iniziale della soluzione, forniscono una serie di approssimazioni che, sotto opportune ipotesi, convergono alla soluzione esatta. Il processo iterativo viene arrestato non appena la precisione desiderata è stata raggiunta. I metodi di interpolazione stimano il valore di una funzione incognita dato il valore della funzione stessa in alcuni punti: tale situazione si verifica molto spesso nella matematica applicata, quando si hanno dati sperimentali, che caratterizzano un dato fenomeno, da analizzare. Il più semplice metodo di interpolazione è l'interpolazione lineare, che suppone che la funzione sconosciuta sia lineare fra ogni coppia di punti consecutivi. Si hanno poi metodi più complessi, che approssimazione l’andamento della funzione con dei polinomi di determinato grado, che possono o meno passare per tutti i punti sperimentalmente trovati (tale condizione non è generalmente rispettata perché richiederebbe un funzione di elevato grado, che assumerebbe un comportamento oscillatorio all’aumentare del grado; generalmente quindi si minimizza la distanza dai dati sperimentali alla funzione interpolante). L'estrapolazione, a differenza dall'interpolazione, stima la funzione in punti esterni ai punti per cui la funzione è nota. Il calcolo della derivata puntuale di una funzione può essere approssimato dal suo rapporto incrementale, scegliendo un opportuno valore del passo di incremento, tale da avere un errore minore di quello voluto e avere un tempo di risoluzione, quindi un numero di calcoli, adeguato al problema in esame. L'integrazione numerica, nota anche come quadratura numerica, stima il valore di un integrale definito. Un integrale definito è determinabile per via analitica tramite la valutazione dell’integrale indefinito ai due estremi in integrazione (come conseguenza del teorema fondamentale del calcolo integrale), tuttavia l’integrale indefinito non sempre è calcolabile con i metodi classici dell’analisi matematica, oppure l’espressione finale ottenuta, rispetto a quella di partenza, è talmente complicata da suggerire la ricerca approcci più semplici. Inoltre l’eventuale soluzione analitica potrebbe coinvolgere funzioni elementari e non, che devono poi venire valutate (e quindi approssimate). Tali considerazioni valgono per funzioni continue, ma se invece la funzione è nota solo per punti, l’approccio analitico, per ovvi motivi, non può neppure essere preso in considerazione. L’integrazione numerica si applica solo ad integrali definiti e permette sempre di giungere ad una soluzione, seppur approssimata, del problema; tali risoluzioni si prestano bene ad essere rappresentate come algoritmi, e quindi ad essere eseguite mediante calcolatori. I metodi utilizzati per la quadratura numerica (nome con il quale è anche conosciuta l’integrazione numerica), si basano sul significato geometrico di integrale definito, quindi sul calcolo dell’area, in modo approssimato, del trapezoide che la funzione forma con l’asse delle ascisse. I metodi di quadratura più comuni sono i seguenti: Metodo dei rettangoli; Metodo dei trapezi o di Bézout; Metodo delle parabole o di Cavalieri – Simpson; Se la dimensione del dominio di integrazione diventa elevata, questi metodi diventano proibitivamente costosi in termini di calcolo computazione, quindi di tempi di esecuzione dell’algoritmo al calcolatore. In questa situazione si può usare un metodo Monte Carlo. Si vuole determinare in modo numerico il valore dell’integrale definito dato dalla seguente espressione: 𝑏 ∫ 𝑓(𝑥) 𝑑𝑥 𝑎 Per tutti i metodi di integrazione descritti nel seguito si considerano valide le seguenti ipotesi: Funzione f(x) continua nell’intervallo di integrazione [a; b]; f(x) positivo in [a; b], anche se valgono le stesse condizioni nel caso la funzione fosse negativa. Si procede dividendo l’intervallo di integrazione [a; b] in n parti di uguale ampiezza, data da: ℎ= 𝑏−𝑎 𝑛 Dove b-a è l’ampiezza dell’intervallo h e n il numero di divisioni dello stesso. Si determinano quindi n+1 punti di ascisse di coordinate: 𝑥0 = 𝑎, 𝑥1 = 𝑎 + ℎ, 𝑥2 = 𝑎 + 2ℎ, … 𝑥𝑛 = 𝑎 + 𝑛 ℎ Per il metodo dei rettangoli, alle ascisse precedentemente calcolate, si fanno corrispondere i seguenti valori della funzione: 𝑦0 = 𝑓(𝑎), 𝑦1 = 𝑓(𝑥1 ), 𝑦2 = 𝑓(𝑥2 ), … 𝑦𝑛−1 = 𝑓(𝑥𝑛−1 ), 𝑦𝑛 = 𝑓(𝑏) Il metodo dei rettangoli si basa sulla costruzione di una serie di rettangoli, chiamati rispettivamente plurirettangoli, che hanno come base un intervallo di suddivisione e come altezza il segmento determinato dal valore della funzione calcolato nel primo estremo dell’intervallo preso come base, oppure nel secondo. Nel primo caso si ha un valore che approssima per difetto il valore reale dell’integrale, mentre nel secondo per eccesso. Siccome si suppone che la funzione presa in esame sia integrabile, le due somme convergono allo stesso valore, pari appunto al valore dell’integrale stesso, al tendere di n all’infinito, ovvero al limite dell’intervallo h tendente a zero. La differenza fra questi due valori può quindi essere resa piccola a piacere aumentando opportunamente il numero degli intervalli di suddivisione. Si ottengono quindi le due successioni come: 𝑛−1 𝑆𝑛′ 𝑏−𝑎 𝑏−𝑎 [𝑓(𝑎) + 𝑦1 + 𝑦2 + ⋯ + 𝑦𝑛−1 ] = = ∑ 𝑓(𝑥𝑖 ) 𝑛 𝑛 𝑖=0 𝑛 𝑆𝑛′ 𝑏−𝑎 𝑏−𝑎 [𝑦1 + 𝑦2 + ⋯ + 𝑦𝑛−1 + 𝑓(𝑏)] = = ∑ 𝑓(𝑥𝑖 ) 𝑛 𝑛 𝑖=1 Si può dimostrare che, se la funzione ammette derivata prima continua, l’errore connesso alla determinazione dell’integrale è minore od uguale alla quantità: 𝜀𝑛 = (𝑏 − 𝑎)2 𝑀 2𝑛 Dove M rappresenta il massimo del valore assoluto della derivata prima della funzione nell’intervallo [a; b]; In simboli si ha: 𝑀 = max |𝑓 ′ (𝑥)| 𝑎≤𝑥≤𝑏 Come esempio si consideri la funzione: 3 ∫ 𝑥 3 𝑑𝑥 2 Si fissa 𝑛 = 10, quindi si ottiene la seguente tabella di ascisse e corrispondenti valori della funzione: a b n h Xi Y1 2 3 10 0,1 2 2,1 2,2 2,3 2,4 2,5 2,6 2,7 2,8 2,9 3 8 9,261 10,648 12,167 13,824 15,625 17,576 19,683 21,952 24,389 27 S'n 15,3125 Sn 17,2125 I dati sono stati ottenuti mediante un foglio Excel, utilizzando le formule precedentemente esposte. I due valori che approssimano l’integrale sono quindi: 3 ∫ 𝑥 3 𝑑𝑥 ≅ 15.3125 2 3 ∫ 𝑥 3 𝑑𝑥 ≅ 17.2125 2 Il metodo dei trapezi, al posto che sostituire la funzione da integrare con delle rette orizzontali, la sostituisce un delle corde sottese, ovvero con dei segmenti che congiungono i punti del grafico della funzione corrispondenti al primo e al secondo estremo dell’intervallo di suddivisione considerato. Si ottengono così n trapezi aventi tutti uguale altezza, pari a h. Si determina il valore approssimato dell’integrale, come precedentemente fatto per il metodo dei rettangoli, come la somma di tutte le aree dei singoli trapezi. Si ottiene così la seguente formula dei trapezi: 𝑏 ∫ 𝑓(𝑥) 𝑑𝑥 ≅ ℎ 𝑎 = 𝑓(𝑎) + 𝑦1 𝑦1 + 𝑦2 𝑦𝑛−1 + 𝑓(𝑏) +ℎ + ⋯+ ℎ = 2 2 2 𝑏 − 𝑎 𝑓(𝑎) − 𝑓(𝑏) [ + 𝑦1 + 𝑦2 + ⋯ + 𝑦𝑛−1 ] 𝑛 2 Se la funzione ammette derivata seconda continua, si dimostra che l’errore connesso al metodo numerico in esame, è minore od uguale alla quantità: 𝜀𝑛 = (𝑏 − 𝑎)3 𝑀 12𝑛2 Dove M rappresenta il massimo del valore assoluto della derivata seconda della funzione nell’intervallo [a; b]; In simboli si ha: 𝑀 = max |𝑓 ′′ (𝑥)| 𝑎≤𝑥≤𝑏 Considerando l’esempio del precedente integrale definito, si ottiene, sempre tramite calcolo con foglio elettronico: 3 ∫ 𝑥 3 𝑑𝑥 ≅ 16.2625 2 Il metodo delle parabole consiste nell’approssimazione del grafico della funzione con archi di parabola opportunamente scelti. Come noto, una parabola può essere individuata da tre punti non allineati, quindi ciascun arco approssimante è individuato da tre punti del grafico. Il valore approssimato dell’integrale si calcola come mostrato precedentemente per gli altri due metodi analizzati, ovvero sommando le aree dei trapezoidi delimitati da tali archi di parabola. Si può dimostrare (teorema) che, l’area S di un trapezoide avente come base l’intervallo [𝑥0 ; 𝑥2 ] e delimitato dal grafico di una parabola passante per i punti (𝑥0 ; 𝑦0 ), (𝑥1 ; 𝑦1 ), (𝑥2 ; 𝑦2 ) dove 𝑥1 = 𝑥0 + 𝑥2 2 È il punto medio dell’intervallo, è data dalla seguente formula: 𝑆= ℎ (𝑦 + 4𝑦1 + 𝑦2 ) 3 0 Dove ℎ = 𝑥1 − 𝑥0 = 𝑥2 − 𝑥1 Da notare che, rispetto ai metodi precedenti, tale approssimazione richiede la suddivisione dell’intervallo di integrazione in un numero pari di sottointervalli, in quanto si approssimazione la funzione con una parabola ogni due sottointervalli. Si considerano quindi 2n parti di uguale ampiezza h, data da: ℎ= 𝑏−𝑎 2𝑛 Si considerano due intervalli per volta e si applica la formula data dal precedente teorema, calcolando l’area delimitata dagli archi di parabola passanti per ciascuna terna di punti: ℎ ℎ [𝑓(𝑎) + 4𝑦1 + 𝑦2 ], (𝑦2 + 4𝑦3 + 𝑦4 ), …, 3 3 ℎ [𝑦 + 4𝑦2𝑛−1 + 𝑓(𝑏)] 3 2𝑛−2 La somma delle precedenti aree permette di ottenere la forma generale di Cavalieri – Simpson: 𝑏 ∫ 𝑓(𝑥) 𝑑𝑥 ≅ 𝑎 ℎ [𝑓(𝑎) + 𝑓(𝑏) + 2 (𝑦2 + 𝑦4 + ⋯ + 𝑦2𝑛−2 ) + 4 (𝑦1 + 𝑦3 + ⋯ + 𝑦2𝑛−1 )] 3 Se la funzione ammette derivata quarta continua, si dimostra che l’errore connesso è minore od uguale alla quantità data da: 𝜀𝑛 = (𝑏 − 𝑎)5 𝑀 2880𝑛4 Dove M rappresenta il massimo del valore assoluto della derivata quarta della funzione nell’intervallo [a; b]; In simboli si ha: 𝑀 = max |𝑓 𝐼𝑉 (𝑥)| 𝑎≤𝑥≤𝑏 La formula di Cavalieri – Simpson permette di giungere, con un numero di passi minore, al valore di approssimazione desiderato. Se si osservano le espressioni che determinano l’errore massimo commesso in funzione del numero di intervalli di suddivisione della funzione precedentemente date, si nota come, il denominatore della seconda sia maggiore di quello della prima, ma minore di quello della seconda: si conclude che l’ultimo metodo esposto converge in un numero minore di passi al valore esatto della funzione rispetto ai precedenti. Tale formula fornisce quindi in generale il valore più vicino a quello atteso. Se si osservano con attenzione i metodi precedentemente esposti, si conclude che differiscono soltanto per la modalità con la quale si approssima la funzione integranda: più in particolare, lo scopo di tali metodi numerici è quello di spostare il calcolo dell’area ad un problema più semplice, determinabile tramite funzioni elementari già note. Per quanto riguarda l’implementazione dei problemi relativi al calcolo numerico, si hanno almeno tre categorie di software numerico: Librerie per programmatori (Netlib, IMSL, NAG, GNU Scientific Library, BLAS, LAPACK, FFTw); Ambienti interattivi per risolvere problemi della matematica e delle scienze computazionali (Mathematica, MATLAB, Maple, Scilab, GNU Octave, IDL) detti Problem Solving Enviroments (PSE); Applicazioni per risolvere problemi di particolari aree applicative, ad esempio per l'ingegneria (software CAE). Gli algoritmi di analisi numerica sono applicati quotidianamente per risolvere molti problemi scientifici e tecnici. Ne sono esempi la progettazione di strutture come ponti e aeroplani, le previsioni meteorologiche e l'analisi di molecole (chimica computazionale). Gli algoritmi di analisi numerica sono anche alla base dei programmi di CAE, e quasi tutti i supercomputer sono costantemente impegnati a eseguire algoritmi di analisi numerica. Un esempio su tutti, considerato come il classico successo dell’analisi matematica, consiste nell’algoritmo FFT (trasformata veloce di Fourier) utilizzato in moltissimi ambiti della tecnica, quali, soltanto per citarne alcuni, la risonanza magnetica, il riconoscimento di immagini di tomografia assiale e la compressione di immagini, musica e video, nei più comuni conosciuti dagli utenti.