Supponiamo di aver misurato la velocità di un fluido in condotta
x0=1.5,x1=7.8,x2=14.1
y0=0.8,y1=1.3,y2=0.82
(in m/s)Visualmente, abbiamo a disposizione i dati seguenti:
Supponiamo di aver misurato la velocità di un fluido in condotta
x0=1.5
, x1=7.8
, x2=14.1
x0=0.8
, x1=1.3
, x2=0.82
(in m/s)Vogliamo stimare la velocità media del fluido
Innanzitutto dobbiamo definire cosa si intenda per velocità media:
f(x)
rappresenta la velocità in funzione della posizione...¯v=1b−a∫baf(x)dx
a
e b
sono gli estremi dell'intervallo di calcoloFocalizziamoci sul calcolo dell'integrale:
La nostra difficoltà è che f(x)
non è disponibile
...Però possiamo inferirla mediante interpolazione!
Possiamo individuare il polinomio interpolante:
f(x)=n∑j=0βjxj
Poi otteniamo la funzione integrale per via analitica:
F(x)=n∑j=0βj1j+1xj+1+C
E calcoliamo l'integrale come:
∫baf(x)dx=F(b)−F(a)
Visualmente, andiamo a calcolare questa area:
Risolviamo l'esempio utilizzando Octave:
x = [1.50, 7.80, 14.10];
y = [0.80, 1.30, 0.82];
a = 0; b = 15.0;
n = length(x)-1; % grado del polinomio
p = polyfit(x, y, n) % polinonio approssimante
P = polyint(p) % funzione integrale
V = polyval(P, b) - polyval(P, a) % integrale
vm = V ./ (b-a) % velocità media
1.0669
Possiamo disegnare il risultato con:
xp = linspace(x_l, x_u, 200); % range
yp = polyval(p, xp); % valori del polinomio
hold on
plot(xp, yp, 'k', 'linewidth', 2) % polinomio
col_area = [0.9, 0.9, 0.9];
area(xp, yp, 'facecolor', col_area) % area
scatter(x, y, 8, 'r', 'o', 'filled') % punti
hold off
xlim([x_l, x_u])
ylim([y_l, y_u])
grid()
Come ci comportiamo se le misurazioni sono ancora da effettuare?
In linea di principio, possiamo procedere come prima
Però conviene essere furbi!
In particolare, è possibile ottenere delle formule di integrazione
f(x)
è nota...Vediamo un esempio:
La pressione di un gas in condizioni isoentropiche è data da:
p=p0[1+(1−1γ)MRT0g(z0−z)]γγ−1
p0
e T0
sono la pressione e la temperature a quota z0
M
è la massa, γ
un parametro del gasR
è la costante dei gas perfettiSupponiamo di trovarci nella situazione:
M=10Kg
, p0=1atm
, T_0 = 295\, \mathrm{°K}
Ci interessa calcolare la pressione media:
z_0 - z = -10\, {\rm m}
(10 metri sopra z_0
)\gamma
tra 1.1
e 2.0
Integrare la funzione in \gamma
è abbastanza complesso:
f(\gamma) = \left[ 1 + \left(1 - \frac{1}{\gamma}\right) \frac{10}{295\, R} g (-10) \right]^{\frac{\gamma}{\gamma - 1} }
...Anche se nel range considerato, la funzione è molto semplice!
Le formule di Newton-Cotes si applicano ad integrali nella forma:
\int_a^b f(x) dx
E permettono di calcolarne il valore approssimato
f(x)
f(x)
per punti equispaziatiSi ottengono così formule diverse a seconda del numero di punti
Innanzitutto, si normalizza l'intervallo di integrazione
[a, b] \longrightarrow [-1, 1]
Vediamo un esempio grafico...
Partendo dalla funzione originale...
Otteniamo una funzione identica, definita su [-1, 1]
Formalmente, definiamo x
rispetto ad una nuova variabile y
:
x = \phi(y) = \frac{a+b}{2} + \frac{b-a}{2} y
\begin{align}
y = -1 & \leftrightarrow x = a\\
y = 1 & \leftrightarrow x = b\\
y = 0 & \leftrightarrow x = (a+b)/2
\end{align}
f
direttamente, lavoreremo con:
g(y) = f(\phi(y))
Per concludere, cambiamo la variabile di integrazione:
\int_a^b f(x)\,{\rm d}x = \int_{-1}^{1} f(\phi(y))\, \phi'(y)\, {\rm d}y = \frac{b-a}{2} \int_{-1}^{1} g(y)\,{\rm d}y
A questo punto procediamo come segue:
g(y)
utilizzando il polinomio di LagrangeG(y)
G(1) - G(-1)
Il risultato dipende dal numero di punti di interpolazione
Cominciamo usando un solo punto di interpolazione:
In particolare, scegliamo y_0 = 0
(punto intermedio)
g(y) = g(y_0) \frac{1}{1} = f\left(\frac{a+b}{2}\right)
Perché g(0) = f(\phi(0))
e \phi(0) = (a+b)/2
A questo punto otteniamo la funzione integrale:
G(y) = f\left(\frac{a+b}{2}\right) y + C
A quindi abbiamo che:
\int_a^b f(x)\,{\rm d}x = \frac{b-a}{2} (G(1) - G(-1)) = \frac{b-a}{2} 2 f\left(\frac{a+b}{2}\right)
Da cui deriva la regola del rettangolo:
\int_a^b f(x)\,{\rm d}x \simeq (b-a)\, f\left(\frac{a+b}{2}\right)
In pratica, calcoliamo l'area di questo rettangolo:
Per l'esempio del profilo di velocità le cose vanno un po' peggio...
Per migliorare l'accuratezza, possiamo campionare più punti:
In particolare, scegliamo y_0 = -1
e y_1 = 1
g(y) = g(y_0) \frac{y-y_1}{y_0-y_1} + g(y_1) \frac{y-y_0}{y_1-y_0}
g(y) = f(a) \frac{y-1}{-2} + f(b) \frac{y+1}{2}
g(y) = -\frac{f(a)}{2} y + \frac{f(a)}{2} + \frac{f(b)}{2} y + \frac{f(b)}{2}
Da g(y)
otteniamo G(y)
:
G(y) = -\frac{f(a)}{4} y^2 + \frac{f(a)}{2} y + \frac{f(b)}{4} y^2 + \frac{f(b)}{2} y
A quindi abbiamo che:
\int_a^b f(x)\,{\rm d}x = \frac{b-a}{2} (G(1) - G(-1)) = \frac{b-a}{2} 2 \frac{f(a) + f(b)}{2}
Da cui deriva la regola del trapezoide:
\int_a^b f(x)\,{\rm d}x \simeq \frac{1}{2}(b-a)(f(a) + f(b))
In pratica, calcoliamo l'area di questo trapezio:
Per il profilo di velocità, però, le cose vanno sempre malino...
Proviamo a campionare un punto in più:
Scegliamo y_0 = -1
, y_1 = 0
e y_2 = 1
\begin{align}
g(y)
& = g(y_0) \frac{y-y_1}{y_0-y_1}\frac{y-y_2}{y_0-y_2}\\
& + g(y_1) \frac{y-y_0}{y_1-y_0}\frac{y-y_2}{y_1-y_2}\\
& + g(y_2) \frac{y-y_0}{y_2-y_0}\frac{y-y_1}{y_2-y_1}
\end{align}
Proviamo a campionare un punto in più:
Scegliamo y_0 = -1
, y_1 = 0
e y_2 = 1
\begin{align}
g(y)
& = f(a) \frac{y}{-1}\frac{y-1}{2}\\
& + f\left(\frac{a+b}{2}\right) \frac{y+1}{1}\frac{y-1}{-1}\\
& + f(b) \frac{y+1}{2}\frac{y}{1}
\end{align}
Proviamo a campionare un punto in più:
Scegliamo y_0 = -1
, y_1 = 0
e y_2 = 1
\begin{align}
g(y)
& = - \frac{1}{2} f(a) (y^2 - y)\\
& - f\left(\frac{a+b}{2}\right) (y^2 - 1)\\
& + \frac{1}{2} f(b) (y^2 + y)
\end{align}
Da g(y)
otteniamo G(y)
:
\begin{align}
G(y) &= - \frac{1}{2} f(a) \left(\frac{y^3}{3} - \frac{y^2}{2} \right)\\
& - f\left(\frac{a+b}{2}\right) \left(\frac{y^3}{3} - y\right)\\
& + \frac{1}{2} f(b) \left(\frac{y^3}{3} + \frac{y^2}{2} \right)
\end{align}
E quindi, con un po' di derivazioni:
\int_a^b f(x)\,{\rm d}x =
\frac{b-a}{2} \left(\frac{1}{3}f(a) + \frac{4}{3}f\left(\frac{a+b}{2}\right) + \frac{1}{3} f(b) \right)
Da g(y)
otteniamo G(y)
:
\begin{align}
G(y) &= - \frac{1}{2} f(a) \left(\frac{y^3}{3} - \frac{y^2}{2} \right)\\
& - f\left(\frac{a+b}{2}\right) \left(\frac{y^3}{3} - y\right)\\
& + \frac{1}{2} f(b) \left(\frac{y^3}{3} + \frac{y^2}{2} \right)
\end{align}
Con qualche passo in più otteniamo la regola di Simpson:
\int_a^b f(x)\,{\rm d}x \simeq
\frac{1}{6} (b-a) \left(f(a) + 4 f\left(\frac{a+b}{2}\right) + f(b) \right)
La regola di Simpson calcola l'area di una parabola:
In entrambi i nostri casi, fornisce una approssimazione accurata
Riassumendo, abbiamo:
Regola | Formula |
---|---|
Regola del rettangolo: | \displaystyle(b-a)\, f\left(\frac{a+b}{2}\right) |
Regola del trapezoide: | \displaystyle\frac{1}{2}(b-a)(f(a) + f(b)) |
Regola di Simpson: | \displaystyle\frac{1}{6} (b-a) \left(f(a) + 4 f\left(\frac{a+b}{2}\right) + f(b) \right) |
Le formule di Newton-Cotes:
Funzionano solo per campionamenti equispaziati
Richiedono solo l'abilità di valutare f(x)
f(x)
si può "nascondere di tutto"!Sono meno robuste ed accurate di metodi più moderni
Cosa fare se abbiamo molti campionamenti?
Se applichiamo lo stesso metodo, potrebbe capitare questo!
L'interpolazione esatta può divergere se il numeri di punti cresce
Conseguenza importante:
Che fare, allora se abbiamo molti punti?
Una soluzione: usare il metodo dei minimi quadrati
Problema: che grado usare per l'interpolazione?
Consideriamo questo esempio:
Si vuole determinare il livello medio del serbatoio
Supponiamo che le misurazioni siano queste:
In questo caso il grado da utilizzare non è ovvio
Peggio ancora: potrebbe essere necessario usare un grado alto
Un approccio alternativo:
Primo passo:
n
puntiSecondo passo:
n-1
Questo tipo di approccio si chiama regola composta
Per esempio, dividiamo in intervalli con 2 punti ciascuno
E poi integriamo delle approssimazioni lineari
Oppure, dividiamo in intervalli con 3 punti ciascuno
E poi integriamo delle approssimazioni di grado 2
Il valore dei due integrali è:
70.343
70.517
I valori della media sono quindi:
70.343/31 = 2.269
70.517/31 = 2.274
m
il numero di campionamenti n
il grado dell'approssimazione negli intervalliAllora, per applicare una regola composta deve valere:
mod(m-1, n) = 0
Ossia, n-1
deve essere multiple di n
Conseguenze:
1
si può sempre applicare2
si applica se m
è dispariIn ogni caso, nessuno ci vieta di "mescolare" più approssimazioni
Nell'esempio appena visto:
Con i dati sperimentali, però, non capita spesso
Se f(x)
è nota, ma difficile da integrare:
Inoltre:
Molti metodi di integrazione avanzati sfruttano questa possibilità
Octave fornisce diverse funzioni per fare integrazione:
Se la funzione è nota:
% Quadratura gaussiana
[q, ier] = quad(f, a, b)
% Regola (composta) di Simpson adattativa
q = quadv(f, a, b)
% Metodo di Clenshaw-Curtis adattativo
[q, err] = quadcc(f, a, b)
Ingressi (per dettagli usare help
):
f
la funzione da integrare (passata come valore)a
, b
gli estremi dell'intervallo di integrazioneOctave fornisce diverse funzioni per fare integrazione:
Se la funzione è nota:
% Quadratura gaussiana
[q, ier] = quad(f, a, b)
% Regola (composta) di Simpson adattativa
q = quadv(f, a, b)
% Metodo di Clenshaw-Curtis adattativo
[q, err] = quadcc(f, a, b)
Uscite (per dettagli usare help
):
q
il valore dell'integraleier
codice di errore (0 = ok), err
stima dell'erroreOctave fornisce diverse funzioni per fare integrazione:
Se la funzione è nota:
% Quadratura gaussiana
[q, ier] = quad(f, a, b)
% Regola (composta) di Simpson adattativa
q = quadv(f, a, b)
% Metodo di Clenshaw-Curtis adattativo
[q, err] = quadcc(f, a, b)
quad
: buono per funzioni con derivate continuequadv
: relativamente simile ai metodi vistiquadcc
: il metodo più robustoOctave fornisce diverse funzioni per fare integrazione:
Se abbiamo dei dati sperimentali:
q = trapz(x, y)
Integra utilizzando la regola (composta) dei trapezi
Per fortuna, i metodi che abbiamo visto sono abbastanza semplici:
-
Integrare sull'intervallo [0,10]
la funzione:
f(x) = \frac{x}{1 + |sin(x)|}
quad
, quadv
, quadcc
La soluzione è disponibile sul sito del corso
Si consideri il serbatoio dell'esempio della lezione
Si assuma che il serbatoio scarichi acqua attraverso una condotta:
15 m
5 cm
1 mm
k = 0.5
1 m
sotto il serbatoioI dati sul livello del serbatoio sono nel file es2.csv
Si carichi la portata media nei 31 giorni considerati
La situazione del serbatoio in sintesi: