Consideriamo una reazione chimica nella forma:
ν1C1+ν2C2+...⟶…νn−1C3+νnC4
Le quantità ni delle sostanze all’equilibrio devono soddisfare:
lnK=(Pntot)∑ni=1νin∏i=1nνii
Vedrete (avete visto?) questi argomenti nel corso di termodinamica
La quantità ni di ogni sostanza all’equilibrio…
…dipende dal “grado di avanzamento” ξ della reazione:
ni=n(0)i+ξνi
Quindi, dobbiamo trovare uno ξ tale che valga:
lnK=(Pntot)∑ni=1νin∏i=1nνiicon: ni=n(0)i+ξνintot=n∑i=1ni
Si tratta quindi di risolvere una equazione non lineare
Come caso specifico, consideriamo la reazione:
CH4+H2O⟶CO+3H2
Trattiamo la nostra equazione come una funzione da azzerare:
lnK−(Pntot)∑ni=1νin∏i=1nνii=0
Per prima cosa, dovremo incapsularla in una funzione Matlab
Ci conviene fare i calcoli un passo per volta:
I parametri sono:
n0
con le quantità inizialixi
nu
K
P
Nota: usando dei vettori il codice potrà funzionare per qualsiasi reazione!
Ci conviene fare i calcoli un passo per volta:
Corrisponde a:
ni=n(0)i+νiξ
Ci conviene fare i calcoli un passo per volta:
Corrisponde a:
ntot=n∑i=1νi
Ci conviene fare i calcoli un passo per volta:
Corrisponde a:
lnK⏟A−(Pntot)∑ni=1νin∏i=1nνii=0
Ci conviene fare i calcoli un passo per volta:
function z = thermoeq(n0, xi, nu, K, P)
n = n0 + xi .* nu;
ntot = sum(n);
A = log(K);
B = (P / ntot)^sum(nu);
end
Corrisponde a:
lnK−(Pntot)∑ni=1νi⏟Bn∏i=1nνii=0
Ci conviene fare i calcoli un passo per volta:
function z = thermoeq(n0, xi, nu, K, P)
n = n0 + xi .* nu;
ntot = sum(n);
A = log(K);
B = (P / ntot)^sum(nu);
C = prod(n.^nu);
end
Corrisponde a:
lnK−(Pntot)∑ni=1νin∏i=1nνii⏟C=0
Ci conviene fare i calcoli un passo per volta:
function z = thermoeq(n0, xi, nu, K, P)
n = n0 + xi .* nu;
ntot = sum(n);
A = log(K);
B = (P / ntot)^sum(nu);
C = prod(n.^nu);
z = A - B * C;
end
Corrisponde all’intera equazione:
lnK−(Pntot)∑ni=1νin∏i=1nνii=0
A partire dal file es_thermoeq.m
Codificare (come visto nelle slides precedenti) la funzione:
fzero
thermoeq
assume che xi
sia uno scalarefzero
per individuare il punto di equilibrio
Supponiamo di voler calcolare la lunghezza di una curva ellittica
Per farlo, ci serve una descrizione formale della traiettoria
F:R↦Rn
In particolare, una ellissi è descritta da:
F(t)=(f1(t)f2(t))=(acostbsint)
Il risultato può essere qualcosa di questo genere:
Il risultato può essere qualcosa di questo genere:
Il risultato può essere qualcosa di questo genere:
F′(t)=(f′1(t)f′2(t))=(−asintbcost)
Il risultato può essere qualcosa di questo genere:
La lunghezza di un vettore tangente è quindi data da:
‖
Il risultato può essere qualcosa di questo genere:
La lunghezza della curva si ottiene integrando quella del vett. tangente:
\int_{t_0}^{t_1} \|F'(t)\| dt = \int_{t_0}^{t_1} \sqrt{{f'_1(t)}^2 + {f'_2(t)^2}} dt
Matlab offre due funzioni principali per effettuare integrazione:
Funzionano in modo radicalmente diverso:
integral
richiede una funzione F
che abbia un singolo parametro:
XMIN
..XMAX
viene diviso in sotto-intervalliF
viene invocata per ottenere campioniMatlab offre due funzioni principali per effetturare integrazioni:
Funzionano in modo radicalmente diverso:
trapz
utilizza il metodo dei trapezi
X
e Y
contengono le coordinate x e y dei campioniLa funzione trapz
è particolarmente utile per dati sperimentali
Nel caso della nostra ellissi, abbiamo:
L = \int_{0}^{2 \pi} \sqrt{(- a \sin t)^2 + (b \cos t)^2} dt
Per calcolare l’integrale, innanzitutto definiamo la funzione da integrare
function
integral
e trapz
funzionano manipolando vettoriIl prossimo passo dipende dal metodo di integrazione scelto
Se vogliamo usare integral
, possiamo scrivere:
Se vogliamo usare trapz
, possiamo scrivere:
Vogliamo progettare una pista ellittica
Sappiamo che la lunghezza della pista è data da:
L(a) = \int_{0}^{2 \pi} \sqrt{(a \sin t)^2 + (b \cos t)^2} dt
Se L^* è la lunghezza desiderata, deve valere:
L(a) = L^*
Si tratta di una equazione non lineare in a!
Dobbiamo risolvere:
L(a) - L^* = 0
Quindi potremmo scrivere:
Molti problemi di progettazione si possono affrontare così
A questo punto:
F(x) = y^*
Vedremo diversi esempi di qui alla fine del corso!
Un piccolo bacino idrico è riempito artificialmente
Un piccolo bacino idrico è riempito artificialmente
La portata d’acqua in ingresso (in m^3/h) è data da:
q(t) = a + b \sin\left(2\pi \frac{t}{24}\right) + c \sin\left(2\pi \frac{t}{13}\right)
I dati del problema sono nel file es_flow.m
Q1: Si definisca una funzione:
t0
e t1
(misurati in ore)Si determini quanta acqua entra nel bacino in 72 ore
Q2: Quanto tempo ci vuole perché entrino 200\, m^3 d’acqua?
Un bacino idrico artificiale è alimentato naturalmente
La portata in ingresso (in m^3/h) è misurata ad intervalli regolari
flow.xlsx
es_flow2.m
Q1: Si stimi la quantità d’acqua entrata nel periodo considerato
trapz
)Si assuma poi che parte della portata in ingresso sia dirottabile
In particolare, dirottiamo tutta la portata sopra un certo limite
\min(L, \mathit{pwl}(T, Q, t))
interp1
Si assuma poi che parte della portata in ingresso sia dirottabile
Con L = 13, la portata limitata appare così:
Q2: Si definisca la funzione:
T
e Q
con i tempi e le portate misurate…limit
del limite L…In pratica, la funzione deve calcolare:
\int_{\min(T)}^{\max(T)} \min(L, \mathit{pwl}(T, Q, t))\, dt
Si calcoli la quantità d’acqua arrivata, assumendo L = 13
Q3: Si determini il valore di L perché arrivino 8,000\, m^3 d’acqua
Si deve posizionare una pompa su una condotta:
Le due utenze verranno servite:
Vogliamo determinare la posizione ottimale della pompa
La distanza totale della pompa dalle due utenze è data da:
dist(a) = \sqrt{(a - x_0)^2 + y_0^2} + \sqrt{(x_1 - a)^2 + y_1^2}
La posizione ottimale è quella che minimizza la distanza
Possiamo così calcolare il minimo risolvendo:
dist(a)' = 0
La derivata può essere calcolata in forma analitica:
dist(a)' = -\frac{x_0-a}{\sqrt{(x_0-a)^2 + y_0^2}} -\frac{x_1-a}{\sqrt{(x_1-a)^2 + y_1^2}}
In alternativa, possiamo approssimare la derivata per via numerica:
dist(a)' \simeq \frac{dist(a+\delta) - dist(a)}{\delta}
eps
Il file es_pump_location.m
contiene i dati del problema
Si calcoli il valore di a che minimizza la distanza, risolvendo dist'(a) = 0
f
è la funzione da derivare):Confrontate i due risultati
Un aeroplanino di carta viene lanciato in orizzontale
Un aeroplanino di carta viene lanciato in orizzontale
La traiettoria nel tempo è descritta da una curva parametrica:
F(t) = \left(\begin{array}{c} v_x t \\ y_0 - \frac{1}{2}cgt^2 \end{array}\right)
I dati del problema sono disponibili nel file es_glide.m
Q1: Si definisca la funzione:
function L = glide_length(vx, g, c, t0, tf)
t0
e tf
Si determini la strada percorsa tra i due istanti specificati nel file
NOTA: strada percorsa = lunghezza della traiettoria percorsa
Q2: Si determini con che velocità v_x^* deve avvenire il lancio…
Si vuole piazzare un misuratore di velocità su un tratto di pista
Il tratto è definito da una parabola con estremi e coefficienti noti
La parabola può essere vista come una curva parametrica
F(x) = \left(\begin{array}{c} x \\ a x^2 + b x + c \end{array}\right)
es_halfway.m
Q1: si definisca una funzione:
p
e due estremi per la coordinata x…x0
e x1
polyder
Si utilizzi la funzione per calcolare la lunghezza del tratto di pista
Q2: Il misuratore deve essere collocato a metà del tratto
Il secondo quesito è un problema di stima di parametri
Le distanze sono uguali se la loro differenza è nulla, i.e.:
F((x, y)) = 0
Dove: