Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoRomano Colonna Modificato 8 anni fa
1
Parte 5 Sommario Uso routine di calcolo predefinite di Matlab –Risoluzione equazioni non lineariRisoluzione equazioni non lineari –Ricerca minimo di una funzioneRicerca minimo di una funzione –Integrazione numericaIntegrazione numerica –Grafica avanzata - CenniGrafica avanzata - Cenni
2
Routine predefinite di Matlab La scrittura di file di tipo “function” rende possibile la creazione di funzioni definite dall’utente Tale strumento risulta molto potente se accoppiato alle routine di calcolo predefinite di Matlab Matlab è, infatti, in grado di risolvere equazioni non lineari e equazioni differenziali con dei semplici comandi Gli algoritmi interni che esso usa sono concettualmente analoghi a quelli incontrati nelle precedenti ore di laboratorio (anche se molto più sofisticati). Elementi di Matlab - 55
3
Routine predefinite di Matlab Risoluzione equazioni non lineari: Scritta una funzione f(x) come m-file di Matlab nomefunz.m Dove “nomefunz” è il nome che è stato dato alla funzione, è possibile determinare gli zeri della equazione non lineare f(x)=0 Il comando è “fsolve” Elementi di Matlab - 55
4
Routine predefinite di Matlab Sintassi comando fsolve: >> X=fsolve( ‘nomefunz’,x0, options) Nome del file “function” in cui è stata definita la funzione Deve essere contenuta tra gli apici “ ‘ ” Alternativamente si può scrivere il nome, preceduto dal simbolo chiocciola: @nomefunz Valore di primo tentativo da cui partire. Può anche essere un vettore – In tal caso il comando restituisce il vettore degli zeri associato a ciascuna condizione iniziale Opzioni per il calcolo – Sono discusse nel seguente lucido Sono facoltative Se omesse, l’algoritmo usa dei valori predefiniti Elementi di Matlab - 55
5
Routine predefinite di Matlab Opzioni possibili. La sintassi è la seguente: Si crea una struttura di opzioni nel quale i parametri nominati ‘param’ assumono gli specifici valori value Per ulteriori dettagli ci si può riferire alla guida on-line di Matlab: >> help optimset options = optimset( ‘param1‘,value1, ‘ param2 ', value2,...) Elementi di Matlab - 55
6
Routine predefinite di Matlab Opzioni più utili: ‘MaxIter’ : è il numero massimo di iterazioni che si desidera assume un valore numero intero ‘TolX’ : Tolleranza massima desiderata sulla x, assume un valore numero reale positivo ‘TolFun’: Tolleranza massima desiderata sulla funzione, assume un valore numero reale positivo Elementi di Matlab - 55
7
Routine predefinite di Matlab Ricerca minimo di una funzione È possibile calcolare anche il minimo di una funzione con un comando analogo: In questo caso è possibile introdurre solo un valore scalare di primo tentativo >> X=fminsearch( ‘nomefunz’,x0, options) Elementi di Matlab - 55
8
Routine predefinite di Matlab Integrazione equazioni differenziali Per un generico problema a valori iniziali: Esistono diversi comandi che corrispondono a differenti algoritmi di integrazione: ode23 ode23s ode45 ode45s ode15s …ed altri ancora … Elementi di Matlab - 55 Essi differiscono per il metodo numerico utilizzato. Per i nostri problemi tutti sono generalmente soddisfacenti. Gli algoritmi 45 sono più precisi Gli algoritmi con l’indice s sono più “stabili”
9
Integrazione equazioni differenziali ordinarie Sintassi del comando: Elementi di Matlab - 55 [T,Y] = ode23(odefun,tspan,y0) Variabili di input. Secondi membri del sistema di equazioni differenziali scritte in forma di function Intervallo temporale in cui si intende integrare numericamente il sistema di ODE Vettore condizioni iniziali Variabili di output: Vettore Tempo discretizzato Vettore valori che assume Y in corrispondenza di T
10
Integrazione equazioni differenziali ordinarie In questo caso, il primo passo è la scrittura di un file di tipo function in cui siano definiti i secondi membri del mio sistema di equazioni differenziali. È richiesta però una certa cautela: anche se i secondi membri non sono una funzione esplicita del tempo, è necessario scrivere il tempo tra le variabili di output della function Elementi di Matlab - 55
11
Integrazione equazioni differenziali ordinarie - Esempio Integrare numericamente l’equazione differenziale per la reazione catalitica in batch nell’intervallo [0,10] con condizione iniziale Ca[0]=0.1 K1 = 1.0 e k2 = 10.0 Le costanti k1 e k2 devono essere assegnate con un valore numerico all’interno della function !! Elementi di Matlab - 55
12
Integrazione equazioni differenziali ordinarie - Esempio In questo caso la function dovrebbe essere scritta più o meno nel seguente modo: Il comando per l’integrazione numerica è: Elementi di Matlab - 55 function tmp = batch(t,y) tmp = - 1.*y./(1+10.*y).^2; Questa funzione è salvata nel file “batch.m” >> [tt,yy] = ode23s(@batch,[0 10],[0.1]); !! Notare la dipendenza esplicita da t !!
13
Integrazione equazioni differenziali ordinarie - Esempio È possibile rappresentare graficamente i risultati: Ulteriori accorgimenti: Generalmente, i risultati dell’integrazione forniti da Matlab non sono equispaziati nel tempo. Per ovviare a questo inconveniente, è possibile introdurre un vettore “tspan” in cui non siano solo contenuti il tempo iniziale e finale. In tal caso il programma interpreta il vettore “tspan” come l’insieme dei valori in cui si intende valutare la funzione. Esempio: Elementi di Matlab - 55 >> plot(tt,yy)>> [tt,yy] = ode23s(@batch,[0:0.01:10],[0.1]); Insieme dei punti temporali in cui intendo valutare la funzione
14
Integrazione equazioni differenziali ordinarie La sintassi esposta nel caso scalare può essere tranquillamente estesa al caso vettoriale. In questo caso la function è ancora definita per due variabili t e y, ma y è un vettore e l’argomento (la tmp) della function è ancora un vettore colonna. Elementi di Matlab - 55
15
Le equazioni assumono la seguente forma: Elementi di Matlab - 55 Esercizio: Dati i seguenti valori dei parametri: Da = 0.01 = 9.0B=22.0 Diagrammare le soluzioni del sistema di equazioni differenziali nell’intervallo [0:20]
16
Integrazione equazioni differenziali ordinarie Esempio: Consideriamo il caso del CSTR adiabatico Elementi di Matlab - 55 function dy = reac(t,y) dy = zeros(2,1); % Vettore colonna per assegnare le dimensioni a y Da = 0.01; B = 22.0; Gamma = 9.0; % y(1) -> Concentrazione adimensionale % y(2) -> Temperatura adimensionale dy(1) = -y(1) + Da*(1-y(1)) *exp((Gamma*y(2))/(y(2)+Gamma); dy(2) = -y(2) +B*Da*(1-y(1))*exp((Gamma*y(2))/(y(2)+Gamma));
17
Dal punto di vista qualitativo, si osservava che per alcune condizioni operative la non linearità della 1) implicava la possibilità di più soluzioni stazionarie. Possibili soluzioni stazionarie
18
Grafica Avanzata - Cenni Matlab è capace di produrre differenti tipi di grafici: a)Curve bidimensionali b)Superfici e curve di isolivello in 3D c)Curve parametriche in 2D e 3D Elementi di Matlab - 55
19
Grafica Avanzata – Cenni – Grafici 3D Per poter creare un grafico in 3D (o, equivalentemente, una curva di isolivello), è necessario valutare una funzione su una griglia rettangolare regolare. Questo può essere fatto usando il comando meshgrid Prima si creano i vettori che descrivono la griglia nella direzione x e nella direzione y. >> x = [0:2*pi/20:2*pi]’; >> y = [0:4*pi/40:4*pi]’; Elementi di Matlab - 55
20
Grafica Avanzata – Cenni – Grafici 3D Il passaggio successivo è “spalmare” questi vettori nelle due dimensioni usando meshgrid: L’effetto di meshgrid è di creare una matrice X con i valori di x lungo ogni riga, ed una matriceY con i valori di y lungo ogni colonna. Le dimensioni di questi nuovi oggetti saranno delle matrici di dimensioni n 1 x n 2 dove n 1 e n 2 sono rispettivamente le dimensioni degli oggetti x e y >> [X,Y] = meshgrid(x,y); Elementi di Matlab - 55
21
Grafica Avanzata – Cenni – Grafici 3D Usando quindi funzioni vettorizzate (o predefinite) è possibile valutare la funzione sulla griglia rettangolare: La funzione ora può essere rappresentate facilmente usando i comandi mesh o surf >>z=cos(X).*cos(2*Y); Da notare la necessità del punto: È necessario fare l’operazione elemento per elemento Elementi di Matlab - 55
22
Grafica Avanzata – Cenni – Grafici 3D Esempio: >> mesh(x,y,z) Elementi di Matlab - 55
23
Grafica Avanzata – Cenni – Grafici 3D Esempio: >> surf(x,y,z) Elementi di Matlab - 55
24
Grafica Avanzata – Cenni – Grafici 3D Esempio: >> contour(x,y,z) Elementi di Matlab - 55
25
Grafica Avanzata – Cenni – Grafici 3D È possibile anche diagrammare facilmente una curva parametrica (f(t),g(t)) in uno spazio bidimensionale: >> t = [0:2*pi/100:2*pi]’; >> plot(cos(t), sin(t)); Elementi di Matlab - 55
26
Ed anche tridimensionale: >> t = [0:2*pi/100:2*pi]’; >> plot3(cos(t), sin(t),t); Elementi di Matlab - 55
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.