Parte 4 Programmare in Matlab – II Sommario Integrazione di Equazioni differenziali ordinarie Metodo di Eulero Esplicito Metodo di Eulero Esplicito + EsercizioEsercizio Limiti Scrittura m-file di tipo “batch” Scrittura m-file di tipo “function”
Integrazione di Equazioni Differenziali – Un po’ di teoria Le equazioni differenziali sono usate frequentemente nella scrittura di modelli per la caratterizzazione di processi chimico-fisici. In questo laboratorio faremo esclusivamente riferimento a Equazioni Differenziali Ordinarie (acronimo: EDO in italiano oppure ODE in inglese). Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Un po’ di teoria “Matematica” Una ODE è una equazione in cui compare solo una funzione di una variabile e la sua derivata. Il nostro obiettivo è di determinare la soluzione dell’equazione differenziale ovvero la x(t) in un fissato intervallo [t 0,t 1 ]. La soluzione x(t) è unica a meno di una costante: Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Un po’ di teoria “Matematica” Per la determinazione della costante è necessario conoscere il valore della x(t) al tempo t 0 Tale valore prende il nome di condizione iniziale L’assegnazione della condizione iniziale è fondamentale per la determinazione univoca della funzione incognita Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Un po’ di teoria “Matematica” È possibile considerare anche sistemi di equazioni differenziali ordinarie: Ovviamente, all’aumentare delle dimensioni del sistema il problema diventa più complesso sia dal punto di vista concettuale che operativo Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Un po’ di teoria NB: In questo laboratorio faremo riferimento solo a Problemi a Valori Iniziali (IVP, Initial Value Problem): Il valore della funzione (o delle funzioni, per problemi di dimensioni superiori) è specificata ad un fissato punto iniziale (d’ora in poi indicato con t 0 ) Si segue poi il comportamento della soluzione all’aumentare (o al diminuire) di t. Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Esempio Si consideri il caso di un reattore Batch Elementi di Matlab - 33 C A, C B C 0, (alimentata al tempo t 0 ) Si supponga il caso più semplice: Reazione isoterma irreversibile del tipo Si suppone inoltre che il volume sia costante. In questo caso è necessario scrivere solo un bilancio di materia (ovvero una sola ODE) Si suppone inoltre che la cinetica di reazione sia lineare
Integrazione di Equazioni Differenziali – Esempio Il bilancio (dopo la “chiusura” del reattore batch al tempo t=t 0 ) si scrive quindi: Dato che per t>t 0 i termini di ingresso e di uscita sono nulli Questa equazione differenziale di C A (t) ammette soluzione analitica La costante C[0] è determinata dalle condizioni iniziali, ovvero quale valore assume C A al tempo t=t 0. Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Esempio: Perché integrazione numerica? Nel caso preso in esame, l’equazione differenziale ordinaria ammette soluzione analitica e quindi è possibile calcolare in modo semplice quale valore assume la concentrazione per un qualunque tempo t. Questo, sfortunatamente è raramente possibile. Si consideri per esempio il caso di una cinetica (un poco) più complessa di tipo catalitico nel reattore Batch: Tale equazione differenziale non ammette soluzione analitica. Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Esempio: Perché integrazione numerica? Nel caso precedente non è possibile quindi sapere in forma esplicita come la concentrazione vari nel tempo È necessario quindi ricorrere a metodi numerici per la determinazione dei valori di concentrazione al variare del tempo. Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Un po’ di teoria Innanzitutto, è meglio chiarire il concetto di integrazione numerica. L’approccio normalmente usato è discretizzare il problema: Ovvero, ci limiteremo a valutare la soluzione x(t) solo per un finito insieme di punti discreti (e non su un intervallo continuo, come era possibile per una soluzione analitica) Per esempio se l’intervallo in cui si desidera ricavare la soluzione è: [t 0, t f ]=[0,1] La soluzione sarà determinata solo per determinati punti. Ad esempio: 0.01, 0.02, 0.03, …, 0.99 Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Un po’ di teoria I metodi numerici per i problemi a valori iniziali partono dal punto iniziale e provano a “seguire” la direzione della curva delle soluzioni Tali metodi sono spesso chiamati per questo motivo “marching methods” Elementi di Matlab - 33 Soluzione continua della equazione differenziale t0t0 t Valori discreti della funzione valutati a partire dai valori precedenti Condizione iniziale
Integrazione di Equazioni Differenziali – Un po’ di teoria - Metodo di Eulero Il metodo più semplice per l’integrazione numerica è il Metodo di Eulero Esplicito Sia data una equazione differenziale ordinaria del tipo È possibile approssimare la derivata con il rapporto incrementale: Dove x i è il valore che assume x al tempo t i Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Un po’ di teoria - Metodo di Eulero Una manipolazione dell’equazione appena ottenuta porta alla seguente espressione: Con cui è possibile calcolare la x i+1 (ovvero il valore che assume la x al tempo t i+1 = t i + T) una volta noti x i e t i. Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Metodo di Eulero - Esercizio Data la seguente EDO Con condizione iniziale Calcolare con il metodo di Eulero esplicito la soluzione dell’equazione nell’intervallo [0,10] Si assumi inoltre che la soluzione discretizzata sia ottenuta per intervalli T equispaziati e pari a T = 0.1, 0.5, 2 Si diagrammino i valori ottenuti Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Metodo di Eulero – Esercizio Suggerimenti: Il nostro scopo è quello di ottenere un vettore di valori di x che corrisponda alla soluzione discretizzata Questo vettore avrà una dimensione pari all’intervallo temporale diviso il campionamento T scelto (nel nostro caso quindi il vettore avrà dimensioni 100, 20, 5 rispettivamente. Mi aspetto quindi di definire in testa al mio file.m un vettore x. Per specificare le dimensioni ho parecchie alternative in Matlab: –Posso scrivere un vettore di tutti zeri e di dimensioni desiderate N con il comando x = zeros(N,1) –Posso anche usare una scrittura generica x=[ ]. Questa scrittura è interpretata da Matlab come l’assegnazione di un vettore di dimensioni qualsiasi Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Metodo di Eulero – Esercizio A partire dalla condizione iniziale x(0) è possibile valutare il primo elemento del nostro vettore x(1) Una volta noto x(1) è possibile calcolare x(2). Quindi x(3), x(4), etc. etc. Quindi, l’elemento x(i+1) del nostro vettore sarà una funzione dell’elemento x(i) precedentemente calcolato Devo scrivere quindi un ciclo. Quale istruzione si presenta più adatta per questo ciclo? Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Metodo di Eulero – Esercizio Riassumendo, il mio programma in Matlab deve essere strutturato nel seguente modo: –Innanzitutto devo assegnare il mio vettore x dove “scarico” i valori calcolati della funzione –Devo scrivere un ciclo con un numero di iterazioni uguali alle dimensioni del mio vettore x –All’interno del ciclo devo scrivere come x(i+1) dipenda da x(i) Chiudo il ciclo. Come opzione posso scegliere di rappresentarmi graficamente il vettore soluzione. Elementi di Matlab - 33
Integrazione di Equazioni Differenziali – Metodo di Eulero – Esercizio Se si analizzano i risultati: 1.Quali sono i risultati più accurati? 2.Ci sono dei risultati non plausibili dal punto di vista matematico? (Es: La soluzione diverge) Elementi di Matlab - 33
Implementazione Metodi numerici con Matlab - Conclusioni Conclusioni Un software come Matlab consente di eseguire in modo veloce una serie di operazioni che sono proibitive se fatte a mano. Inoltre, Matlab consente in modo immediato di eseguire le stesse operazioni per cui abbiamo costruito i programmi, con delle semplici istruzioni (come vedremo successivamente). Gli algoritmi interni che esso usa non differiscono concettualmente da quelli che sono stati esposti (anche se sono più sofisticati). Comunque, è necessario essere molto attenti nell’ interpretazione dei risultati, dato che anche gli algoritmi più sofisticati non sono mai al 100% affidabili. Elementi di Matlab - 33
Programmazione – Files.m - Limiti La scrittura dei programmi precedenti con la filosofia “file batch” ci ha mostrato i seguenti limiti: 1.Le variabili presenti nel programma sono automaticamente trasferite nella memoria della sessione principale di Matlab 2.Pesante nel caso di istruzioni che si ripetono (Esempio: è necessario definire ogni volta le funzioni quando sono valutate) Elementi di Matlab - 44
Programmazione – Files.m - Function Un oggetto più potente del testo è la funzione (nella sintassi di Matlab: function) Essi permettono all’utente di creare nuovi comandi Matlab Una funzione è un m-file che incomincia con l’istruzione: Il resto del testo è una serie di istruzioni che consentono di calcolare i valori di output a partire dai valori assegnati di input function [output1,output2, …] = nomecomando(input1, input2, … ) Elementi di Matlab - 44
Programmazione – Files.m - Function Quando si chiama una function, Matlab crea una sessione di lavoro locale. Le variabili elaborate nella function non sono poi scaricate nella memoria della sessione, a meno delle variabili di output desiderate Le variabili coinvolte nella sessione locale non possono riferirsi alle variabili globali (a meno che non siano opportunamente passate come variabili di input) Elementi di Matlab - 44
Programmazione – Files.m - Function Esempio: funzione sin2 = sen(x^2) function y=sin2(x) tmp=x.^2; y=sin(tmp); L’m-file è salvato in seguito con il nome sin2.m Una volta creato l’m-file, se digito l’istruzione “>>y=sin2(pi/4)” sulla finestra principale di Matlab, creo una variabile y associata al seno del quadrato di Pi/4 Non vi è però traccia della variabile tmp Intestazione della function Definizione della variabile interna tmp Il “.^” rende possibile l’operazione anche se x è un vettore Elementi di Matlab - 44
Programmazione – Files.m - Function Importante: Le variabili della function devono tutte essere dichiarate all’interno di essa e non possono richiamare valori che siano definiti solo nella sessione globale (a meno che non siano passate come variabili di input) Un modo per ovviare a questo inconveniente è di rendere globale la variabile con il comando global (per dettagli, fare riferimento alla guida on-line del software) È possibile richiamare function in altre function, come anche function in file batch Elementi di Matlab - 44
Programmazione – Files.m – Function Esercizio: Ripetere l’esercizio del metodo di Newton dove stavolta: –Il file principale è sempre un file di tipo “batch” –Le funzioni (sia la funzione che la sua derivata) sono files di tipo “function” –Bisogna essere molto cauti con le variabili di scambio! –Si deve comunque fare in modo che i parametri (Da, , B) siano “visti” anche all’interno delle function. Elementi di Matlab - 44