Octave: Zeri di Funzioni
Octave offre due metodi per trovare gli zeri di una funzione:
Metodo 1: La funzione
[X, FVAL, INFO] = fzero(FUN, X0)
- Trova uno zero per una funzione univariata e scalare
- Utilizza una combinazione di metodi simili a quello della bisezione
X0
dovrebbe essere un vettore tale che...
X0(1)
e X1(2)
racchiudono uno zero (la funzione cambia di segno)
X0
può essere uno scalare...
- ...In questo caso Octave tenta di trovare l'altro punto da solo
Octave: Zeri di Funzioni
Octave offre due metodi per trovare gli zeri di una funzione:
Metodo 1: La funzione
[X, FVAL, INFO] = fzero(FUN, X0)
FUN
è una funzione, passata come valore:
- Se
la_mia_funzione
è il nome di una funzione...
- ...è possibile passarla ad
fzero
come parametro...
- ...Utilizzando la notazione
@la_mia_funzione
Octave: Zeri di Funzioni
Octave offre due metodi per trovare gli zeri di una funzione:
Metodo 1: La funzione
[X, FVAL, INFO] = fzero(FUN, X0)
All'interno di fzero
:
- La funzione passata viene memorizzata nella variabile
FUN
- E può essere invocata con
FUN(<parametri>)
Octave: Zeri di Funzioni
Octave offre due metodi per trovare gli zeri di una funzione:
Metodo 1: La funzione
[X, FVAL, INFO] = fzero(FUN, X0)
Per quanto riguarda i valori di ritorno:
X
è lo zero (se si è arrivati a convergenza)
FVAL
è il valore della funzione nello zero
INFO
è un numero che rappresenta lo stato della soluzione
- Se vale
1, 2, 3
c'è convergenza
- Se
INFO = 0
il metodo non è riuscito a convergere
Octave: Zeri di Funzioni
Octave offre due metodi per trovare gli zeri di una funzione:
Metodo 2: La funzione
[X, FVAL, INFO] = fsolve(FUN, X0)
Trova uno zero di una funzione f:Rn→Rn
- Utilizza dei metodi simili a quello di Newton-Raphson
X0
è la stima di partenza
- Gli altri parametri e valori di ritorno sono come per
fzero
Octave: Zeri di Funzioni
Octave offre due metodi per trovare gli zeri di una funzione:
Metodo 2: La funzione
[X, FVAL, INFO] = fsolve(FUN, X0)
Se FUN
non è univariata e scalare (casi dei sistemi non lineari):
- Deve avere come singolo parametro un vettore
- Deve restituire come singolo parametro un vettore
fsolve
cercherà un vettore di X
che annulli tutte le uscite
Esercizio 1
Data una condotta per il trasporto di acqua con le seguenti proprietà:
D=0.154L=4828H1−H2=6.35ε=0.045×10−3
Si determini la velocità dell'acqua nella condotta:
- Utilizzando il metodo della bisezione
- Utilizzando la funzione
fzero
di Octave
In particolare, si trovia uno zero dalla funzione:
f(x)=H1−H2−W12
Si basi l'implementazione sullo StartKit disponibile sul sito del corso
Esercizio 1
Si implementi la funzione (nel file bisection.m
):
function [X, FVAL, INFO] = bisection(f, a, b,
n=1e5, tol=1e-7)
f
è una funzione passata come valore
a
e b
sono gli estremi inziali dell'intervallo
n
è il numero di iterazioni e tol
è la tolleranza
- Se si arriva a convergenza, si resittuisca
INFO = 1
...
- ...Altrimenti
INFO = 0
Si individuino due valori di partenza a
e b
:
- Per farlo, sarà utile disegnare la funzione
f(x)
Esercizio 2
Si trovi una soluzione dell'equazione:
f(x)=−14x4+13x3−32x2+34x+1
- Utilizzando la funzione
fsolve
di Octave
- Utilizzando il metodo di Newton-Raphson
- Si calcoli la derivata a partire dalla sua forma analitica
Si basi l'implementazione sullo StartKit disponibile sul sito del corso
Esercizio 2
Si codifichi la funzione:
function [fx, dfx] = target_function(x)
x
è il valore (scalare) per cui fare il calcolo
fx
rappresenta il valore di f(x)
dfx
rappresenta il valore di f′(x)
Si disegni la funzione in un intervallo che contiene uno zero.
Esercizio 2
Si codifichi poi la funzione (nel file newton_raphson_d.m
):
function [X, FVAL, INFO] = newton_raphson_d(f, x,
n=1e5, tol=1e-7)
- Che esegue il metodo di Newton-Raphson
f
è una funzione passata come valore
- HP:
f
restituisce sia il valore di f(x)
che di f′(x)
x
è il valore da cui partire
- Gli altri parametri sono come per
fsolve
Esercizio 3
Data la condotta per il trasporto di acqua dell'esercizio 1, con:
D=0.154L=4828H1−H2=6.35ε=0.045×10−3
Si determini la velocità dell'acqua nella condotta:
- Utilizzando la funzione
fsolve
di Octave
- Utilizzando il metodo di Newton-Raphson
- Si approssimi la derivata utilizzando un rapporto incrementale
Si basi l'implementazione sullo StartKit disponibile sul sito del corso
Esercizio 3
Si codifichi la funzione (nel file newton_raphson.m
):
function [X, FVAL, STATUS] = newton_raphson(f, x,
n=1e5, tol=1e-7)
f
è una funzione passata come valore e restituisce f(x)
Si codifichi la sottofunzione:
function y = df(f, x, tol=1e-7)
- Che deve restituire il valore approssimato di
f′(x)
- Il valore dell'epsilon di macchina è ottenibile con
eps
Esercizio 4
Si risolva il sistema non lineare:
x2+y2=1√y=sin(x)
Utilizzando la funzione fsolve
di Octave.
Si basi l'implementazione sullo StartKit disponibile sul sito del corso
- In particolare, si implementi in modo opportuno:
function z = target_function(x)
Esercizio 5
Data una condotta in due tratte con le seguenti proprietà:
DA=0.20DB=0.30ν=1×10−6ε=0.010
Si determini la portata della condotta:
- Utilizzando la funzione
fsolve
di Octave
- Utilizzando l'IPF
In particolare, si utilizzi la relazione:
Q=√18175.7+103,388fA+34,037fB
Esercizio 5
Si basi l'implementazione sullo StartKit disponibile sul sito del corso
- L'algoritmo IPF è disponibile nel file
ipf.m
- Per il calcolo di
fA
e fB
si utilizzi l'equazione di Churchill...
- ...disponibile nel file
churchill.m
Si implementino le funzioni:
function z = transition_function(Q)
function z = target_function(Q)
- Usate rispettivamente da IPF e
fsolve