Esercizio 1
Sia data una cisterna che scarica acqua attraverso un tubo
Si determinini la portata in uscita (in L/s) nella situazione iniziale
Esercizio 1
Determinazione del valore del carico totale
- Assumento una velocità nulla per il pelo libero...
- ...Per la sorgente della condotta abbiamo
H1=pρg+z1+v212g=z1=3m
- Per il terminale della condotta abbiamo:
H2=pρg+z2+v222g=v222g
- Dove
v2
equivale alla velocità nella condotta
Esercizio 1
Le uniche perdite di carico sono quelle distribuite:
W12=4fLDv22g
- Per il fattore di attrito possiamo usare con l'equazione di Churchill
Poiché la cisterna contiene acqua abbiamo:
ν=μρ=10−3103m2s=10−6m2s
Esercizio 1
Per risolvere il problema possiamo:
Codificare la funzione:
f(v)=H1−H2−W12
In altervativa, si può usare come variabiele Q
. Poi:
- Utilizzare un metodo tipo-bisezione (i.e.
fzero
)
- Utilizzare un metodo tipo-Newton Raphson (i.e.
fsolve
)
Una possibile soluzione è disponibile sul sito del corso
- Per maggiori dettagli, si veda la registrazione della lezione
Variabili Globali in Octave
La soluzione dell'esercizio 1 utilizza delle variabili globali
Una variabile globale è una variabile che:
- Può essere utilizzata da una funzione...
- ...senza che sia stata passata come parametro
Per esempio, la maggior parte dei dati del nostro problema:
- devono essere noti alla funzione
f(x)
...
- ...ma non possono essere passati come parametri...
- ...perché
fzero
e fsolve
lavorano con un solo parametro
Utilizzando delle variabili globali si aggira il problema
Variabili Globali in Octave
Per utilizzare una variabile globale:
- Occorre definirla come tale nel file di script:
global L = 15;
- Per accedervi da una funzione, va indicare l'intenzione di farlo:
function target_function(v)
global L;
...
end
Variabili Globali in Octave
Attenzione a non esagerare!
In particolare per due buone ragioni:
1) Passare i parametri in modo implicito riduce la leggibilità!
2) Se una variabile globale viene definita due volte:
global x = 1;
global x = 2;
- La seconda definizione viene ignorata
- Conseguenza: se eseguite uno script, moficare
x
e rieseguite...
- ...la modifica viene ignorata!
- Soluzione: "pulite" l'abiente con
clear all
Esercizio 2
Sia data una cisterna che scarica acqua attraverso un tubo
Quale è la massima scabrezza perché la portata iniziale sia ≥
2L/s?
Esercizio 2
Come nel caso predente, possiamo codificare:
f(ε)=H1−H2−W12
- E poi usare
fzero
o fsolve
Una possibile soluzione è disponibile sul sito del corso
- Per maggiori dettagli, si veda la registrazione della lezione
Esercizio 3
Siano date due cisterne d'acqua comunicanti in questa situazione:
Si calcoli la velocità (iniziale) nei due tratti della condotta
Esercizio 3
Il carico totale ai due estremi è dato da:
H1=ρgh1ρg+z1+v212gH2=ρgh2ρg+z2+v212g
H1−H2=h1−h2
Esercizio 3
Le perdite di carico vanno calcolate per le due tratte:
W12=WA+WB
- Le perdite di carico sono date da:
WA=4fLADAv2A2g+kv2A2gWB=4fLBDBv2B2g
- Per ridurre il problema ad una sola variabile, sfruttiamo:
vA=Qπ4D2AvB=Qπ4D2B
Esercizio 4
Di nuovo, si può risolvere l'esercizio con fzero
o fsolve
La funzione di cui dobbiamo trovare lo zero è:
f(Q)=H1−H2−W12
- Una volta determinata la portata...
- ...possiamo risalire alle due velocità
Una possibile soluzione è disponibile sul sito del corso
- Per maggiori dettagli, si veda la registrazione della lezione
Esercizio 4
Si consideri la situazione dell'esercizio precedente:
Si calcolino le velocità quando a sx ci sono 2/1.5/1/0.5m
di acqua
Esercizio 4
Va solo risolto l'esercizio precedente con quattro diversi valori per h1
- Invece di definire quattro funzioni completamente diverse...
- ...è utile introdurre una singola funzione con due parametri:
function z = fbase(Q, h1)
- Ed utilizzarla per definire quattro "funzioni bersaglio". E.g.:
function z = target_function1(Q)
global h1;
z = fbase(Q, h1(1));
end
Un esempio di soluzione è disponibile sul sito del corso
Esercizio 4
Ancora meglio, è possibile utilizzare delle funzioni anonime:
Una funzione anonima consiste in:
- Una funzione senza nome...
- ...che può essere assegnata ad una variabile
Una funzione anonima è definita da una singola espressione:
<variabile> = @(<variabile>) (<espressione>)
@(<variabile>) (<espressione>)
- La funzione può accedere alle variabili...
- ...definite nell'ambiente in cui viene costruita (e.g. lo script)
Esercizio 4
Usiamo come esempio questo esercizio:
function z = fbase(Q, h1)
...
end
f1 = @(Q) ( fbase(Q, 2) )
x0 = <stima inziale>
[X, FVAL, INFO] = fsolve(f1, x0)
- La funzione anonima chiama
fbase
con h1 = 2
- La funzione viene memorizzata in una variabile...
- ...E può esere utilizzata in
fsolve