Consideriamo una reazione chimica nella forma:
\[\nu_1 C_1 + \nu_2 C_2 + ... \longrightarrow \ldots \nu_{n-1} C_3 + \nu_{n} C_4\]
Le quantità \(n_i\) delle sostanze all’equilibrio devono soddisfare:
\[\ln K = \left(\frac{P}{n_{tot}}\right)^{\sum_{i=1}^n \nu_i} \prod_{i=1}^n n_i^{\nu_i}\]
Vedrete (avete visto?) questi argomenti nel corso di termodinamica
La quantità \(n_i\) di ogni sostanza all’equilibrio…
…dipende dal “grado di avanzamento” \(\xi\) della reazione:
\[n_i = n_i^{(0)} + \xi \nu_i\]
Quindi, dobbiamo trovare uno \(\xi\) tale che valga:
\[\begin{align} & \ln K = \left(\frac{P}{n_{tot}}\right)^{\sum_{i=1}^n \nu_i} \prod_{i=1}^n n_i^{\nu_i} \\ \text{con: } & n_i = n_i^{(0)} + \xi \nu_i \\ & n_{tot} = \sum_{i=1}^n n_i \end{align}\]
Si tratta quindi di risolvere una equazione non lineare
Come caso specifico, consideriamo la reazione:
\[CH_4 + H_2O \longrightarrow CO + 3H_2\]
Trattiamo la nostra equazione come una funzione da azzerare:
\[\ln K - \left(\frac{P}{n_{tot}}\right)^{\sum_{i=1}^n \nu_i} \prod_{i=1}^n n_i^{\nu_i} = 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:
\[n_i = n_i^{(0)} + \nu_i \xi\]
Ci conviene fare i calcoli un passo per volta:
Corrisponde a:
\[n_{tot} = \sum_{i=1}^n \nu_i\]
Ci conviene fare i calcoli un passo per volta:
Corrisponde a:
\[\underbrace{\ln K}_{A} - \left(\frac{P}{n_{tot}}\right)^{\sum_{i=1}^n \nu_i} \prod_{i=1}^n n_i^{\nu_i} = 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:
\[\ln K - \underbrace{\left(\frac{P}{n_{tot}}\right)^{\sum_{i=1}^n \nu_i}}_{B} \prod_{i=1}^n n_i^{\nu_i} = 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:
\[\ln K - \left(\frac{P}{n_{tot}}\right)^{\sum_{i=1}^n \nu_i} \underbrace{\prod_{i=1}^n n_i^{\nu_i}}_{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:
\[\ln K - \left(\frac{P}{n_{tot}}\right)^{\sum_{i=1}^n \nu_i} \prod_{i=1}^n n_i^{\nu_i} = 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: \mathbb{R} \mapsto \mathbb{R}^n\]
In particolare, una ellissi è descritta da:
\[F(t) = \left(\begin{array}{c} f_1(t) \\ f_2(t) \end{array}\right) = \left(\begin{array}{c} a \cos t \\ b \sin t \end{array}\right)\]
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) = \left(\begin{array}{c} f'_1(t) \\ f'_2(t) \end{array}\right) = \left(\begin{array}{c} -a \sin t \\ b \cos t \end{array}\right)\]
Il risultato può essere qualcosa di questo genere:
La lunghezza di un vettore tangente è quindi data da:
\[\|F'(t)\| = \sqrt{{f'_1(t)}^2 + {f'_2(t)}^2}\]
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: