Una equazione differenziale ordinaria (ODE) è definita da:
˙x=f(t,x)
x:R↦Rn
Informalmente, una eq. diff. ord. definisce un sistema dinamico
È sufficiente limitarsi alla derivata del primo ordine
Per esempio:
¨x=at2
Introducendo y=˙x, diventa:
(˙x˙y)=(yat2)
Quando si risolve una ODE, l’obiettivo è determinare x
Ma x è una funzione! Quindi vogliamo determinarne l’andamento
In questo modo otteniamo un problema ai valori inziali:
˙x=f(t,x)x(0)=x0
Intuitivamente, si tratta di simulare il sistema dinamico
Matlab mette a disposizione diversi risolutori di ODE
Quello che utilizzeremo principalmente è accessibile mediante:
Per quanto riguarda i parametri di ingresso/uscita:
f
è la funzione che definisce la ODE. La sua interfaccia deve essere:t
è il “tempo”x
è lo stato corrente (un vettore)dx
è la derivata dello stato corrente (un vettore colonna)Matlab mette a disposizione diversi risolutori di ODE
Quello che utilizzeremo principalmente è accessibile mediante:
Per quanto riguarda i parametri di ingresso/uscita:
tspan
è un vettore con i due estremi dell’intervallo di simulazione
tspan = [0, 3600]
x0
è lo stato inizialeT
contiene tutti gli istanti di tempo visitati dall’algoritmoX
contiene uno stato visitato
simulate
L’attrattiva principale dell’Expo 1964 fu un sottomarino
Per muoversi in verticale un sottomarino carica/scarica acqua
In questo modo esso varia la sua densità
Per precisione, il sottomarino è soggetto a tre forze principali:
Sia L il volume dell’acqua a bordo, allora abbiamo che:
La forza di gravità è data da (asse cartesiano orientato verso l’alto):
Fg=−g(m+ρL)
La forza di galleggiamento è data da (principio di Archimede):
Fb=gρV
Sia L il volume dell’acqua a bordo, allora abbiamo che:
Ft=−12ρACDv|v|
Supponiamo che l’acqua a bordo vari nel modo seguente:
In pratica, L varia secondo una funzione lineare a tratti
interp1
Tp
e Lp
che definiscono la funzione sono in es_submarine.m
Si desidera calcolare la quota del PX-8 nel tempo
¨x=1m+ρL(Fg+Fb+Ft)
Dobbiamo risolvere un problema ai valori iniziali
Per farlo, dovremo invocare:
function [T, X] = ode45(f, tspan, x0)
Quindi dobbiamo determinare:
f
che ne calcola la derivataPer definire f
è utile procedere nel solito modo:
function dx = dstate(t,x,g,V,M,rhoW,Cd,S,Tp,Lp)
% x(1) = altitudine, x(2) = velocita'
Fb = g * rhoW * V; % Galleggiamento
L = interp1(Tp, Lp, t); % Carico d'acqua
Fg = -(g*M + g*rhoW * L); % Gravità
Ft = -0.5 * x(2) * abs(x(2)) * Cd * S * rhoW;
% Calcolo le derivate
dx(1) = x(2);
dx(2) = (Fb+Fg+Ft) / (M + rhoW * L);
end
Per definire f
è utile procedere nel solito modo:
La funzione anonima potrà essere utilizzata per invocare ode45
dX = @(t, x) dstate(t,x,g,V,M,rhoW,Cd,S,Tp,Lp)';
x0 = [-5, 0]; % Stato iniziale
tspan = [0, 1800];
[t, X] = ode45(dX, tspan, x0);
dX
deve restituire un vettore colonna…dstate
A questo punto possiamo recuperare quota e velocità
Possiamo disegnare l’andamento della quota:
A questo punto possiamo recuperare quota e velocità
Ed ottenere la quota dopo 10, 20, 30 minuti:
interp1
perché la “funzione quota” x
è definita per puntiUna BMW i8 accelera a tavoletta su un rettilineo
Una BMW i8 accelera a tavoletta su un rettilineo
Supponiamo che il motore eroghi una forza costante F
Si oppone alla direzione del moto la forza di trascinamento:
Ft=−12ρCDSv|v|
Quindi il sistema è definito dall’ODE:
¨x=1m(F+Ft)
Tutti i dati sono nel file es_bmw.m
Vogliamo riscaldare una stanza con un convettore
Possiamo modellare il sistema utilizzando un circuito RC equivalente:
Vogliamo ottenere un modello tempo-continuo
Ogni capacità si può modellare con una equazione differenziale:
˙Ta=1Ca(wca−waw)˙Tw=1Cw(waw−wwo)
Vogliamo ottenere un modello tempo-continuo
I flussi invece si calcolano mediante equazioni lineari:
wca=1Rca(Tc−Ta)waw=1Raw(Ta−Tw)wwo=1Rwo(Tw−To)
Quindi nel complesso abbiamo le equazioni differenziali:
˙Ta=1Ca(wca−waw)˙Tw=1Cw(waw−wwo)
Dove:
wca=1Rca(Tc−Ta)waw=1Raw(Ta−Tw)wwo=1Rwo(Tw−To)
Tutti dati del problema sono disponibile ne file es_heating2.m
Nel libro di Jule Verne “Dalle Terra alla Luna”…
Durante il viaggio, la navicella è soggetta a forze gravitazionali
Esse sono regolate dalla legge di gravitazione di Newton:
F12=−Gm1m2r12‖
Si desidera modellare il moto della navicella
\ddot{x} = \frac{1}{m_s} (F_{se} + F_{sm})
Inoltre, assumiamo che:
La navicella deve così raggiungere la quota D-r_M
I dati del problema sono nel file es_moonshot.m
Tre serbatoi comunicano attraverso condotte
Tre serbatoi comunicano attraverso condotte
Il sistema è descritto dalle equazioni differenziali:
\begin{align} & \dot{P}_1 = \frac{1}{C_1} (q_{31} - q_{12}) && \dot{P}_2 = \frac{1}{C_2} (q_{12} - q_{23}) \\ & \dot{P}_2 = \frac{1}{C_3} (q_{23} - q_{31}) \end{align}
Con:
\begin{align} & q_{12} = \frac{1}{R_{12}} (P_1 - P_2) && q_{23} = \frac{1}{R_{23}} (P_2 - P_3) \\ & q_{31} = \frac{1}{R_{31}} (P_3 - P_1) \end{align}
Tutti i dati del problema sono nel file es_tubes.m