Anno Accademico 2007-2008
Corso di Analisi 1
per Ingegneria Elettronica
Laboratorio 3
Integrazione numerica
Sia f una funzione continua sull’intervallo [a, b]. Introduciamo formule di quadratura
numerica con lo scopo di approssimare
Z
b
I(f ) =
.
1
f (x) dx
a
Il metodo del punto medio
Per approssimare l’integrale di f sfruttiamo innanzitutto l’additività dell’integrale. Suddib−a
vidiamo l’intervallo [a, b] in N sottointervalli Ik = [xk − 1, xk ], k = 1, ...N di ampiezza
,
N
con x0 = a, xN = b; possiamo scrivere
I(f ) =
N Z
X
f (x) dx
Ik
k=1
In ogni intervallo Ik possiamo approssimare f con un polinomio f˜, quindi con una funzione
facile da integrare.
La scelta più semplice è usare il polinomio di grado zero che interpola f nel punto medio di
ogni sottointervallo:
f˜ = f (x̃k ),
x̃k =
xk−1 + xk
,
2
k = 1, ...N
.
In questo modo otteniamo la formula del punto medio composito:
IPCM (f ) =
N
X
f (x̃k )
k=1
.
b−a
:
Poniamo H =
N
IPCM (f )
=H
N
X
k=1
(b − a)
N
f (x̃k )
.
Se f è derivabile con continuità fino al secondo ordine vale la seguente relazione per l’errore
di integrazione:
1
Figura 1: Formula del punto medio composito
I(f ) − IPCM (f ) =
b − a 2 00
H f (ξ)
24
dove ξ ∈ [a, b].
Significa che
b−a 2
H max |f 00 (ξ)|
(1)
24
l’errore diminuisce quadraticamente con il passo H, cioè il metodo ha accuratezza 2. Inoltre
possiamo affermare che la formula del punto medio ha grado di esattezza 1, cioè integra
esattamente polinomi di grado 1 (se la derivata seconda è nulla l’errore è identicamente
nullo).
Scriviamo un programma Matlab che implementi il metodo del punto medio composito. Deve
ricevere in ingresso la funzione da integrare, gli estremi dell’intervallo ed il numero di sottointervalli; inoltre può ricevere dall’utente il valore esatto dell’integrale per calcolare l’errore. Il
comando nargin conta gli argomenti in input.
|I(f ) − IPCM (f )| ≤
function [I]=p medio(f,a,b,N,I ex);
H=(b-a)/N;
I=0; % inizializzo a zero il valore dell’integrale
for i=1:N
2
xx=a+H*(i-1)+H/2; % p.
medio dell’intervallo k-simo
ff=subs(f,xx); % valuto f
I=I+ff*H; % sommo il k-simo contributo
end
disp(’Il valore dell integrale è’)
I
if (nargin==5)
err=abs(I ex-I) % il modulo dell’errore
disp(’L errore è)
err
end
fxx=diff(diff(f)); % la derivata seconda
maxerr=(b-a)/24*Hˆ2*max(abs(subs(fxx,[a:(b-a)/100:b]))) % calcolo il massimo
errore
disp(’Il max errore atteso è’)
maxerr
Utilizzando la function scritta calcoliamo l’integrale di f = x sin(x) sull’intervallo [0, π].
Sappiamo che il risultato esatto è π.
>>syms x
>>f=x*sin(x)
>>[I]=p medio(f,0,pi,10,pi);
Otteniamo I = 3.1545, con un errore di 0.0130, inferiore al massimo atteso 0.0401. L’errore
massimo atteso si ottiene dalla 1. Osserviamo che dimezzando il passo H l’errore si riduce di
un fattore 4: con N = 20 infatti otteniamo I = 3.1448, con un errore pari a 0.0032.
Verifichiamo il grado di esattezza del metodo integrando una funzione lineare, r = 3x + 1,
sull’intervallo [0, 1]. Osserviamo che anche con un solo intervallo (N = 1) otteniamo il risultato
esatto cioè 2.5.
>>r=3*x+1
>>[I]=p medio(r,0,1,1);
2
Il metodo dei trapezi
La formula del trapezio composito si ottiene approssimando f in ogni sottointervallo con il
polinomio di grado 1 che interpola f nei nodi xk−1 e xk :
ITC (f ) =
N
N
−1
X
H
HX
(f (xk ) + f (xk−1 )) = [f (a) + f (b)] + H
f (xk )
2
2
k=1
k=1
In questo caso per l’errore abbiamo la seguente uguaglianza:
3
Figura 2: Formula del trapezio composito composito
I(f ) − ITC (f ) = −
b − a 2 00
H f (ξ)
12
Significa che
b−a 2
H max |f 00 (ξ)|
(2)
12
Anche il metodo dei trapezi ha accuratezza 2 e ordine di esattezza 1.
Scriviamo un programma Matlab che implementi il metodo del punto medio composito. Deve
ricevere in ingresso la funzione da integrare, gli estremi dell’intervallo ed il numero di sottointervalli; inoltre può ricevere dall’utente il valore esatto dell’integrale per calcolare l’errore. Il
comando nargin conta gli argomenti in input.
|I(f ) − ITC (f )| ≤
function [I]=trapezi(f,a,b,N,I ex);
H=(b-a)/N;
I=0; % inizializzo a zero il valore dell’integrale
for i=1:N
x1=a+H*(i-1)
x2=a+H*i;
f1=subs(f,x1); % valuto f in x1
f2=subs(f,x2); % valuto f in x2
4
I=I+H/2*(f1+f2); % sommo il k-simo contributo
end
disp(’Il valore dell integrale è’)
I
if (nargin==5)
err=abs(I ex-I) % il modulo dell’errore
disp(’L errore è)
err
end
fxx=diff(diff(f)); % la derivata seconda
maxerr=(b-a)/24*Hˆ2*max(abs(subs(fxx,[a:(b-a)/100:b]))) % calcolo il massimo
errore
disp(’Il max errore atteso è’)
maxerr
Utilizzando la function scritta calcoliamo l’integrale di f = x sin(x) sull’intervallo [0, π].
Sappiamo che il risultato esatto è π.
>>syms x
>>f=x*sin(x)
>>[I]=trapezi(f,0,pi,10,pi);
Otteniamo I = 3.1157, con un errore di 0.0259, inferiore al massimo atteso 0.0802. L’errore
massimo atteso si ottiene dalla 2 ed doppio rispetto al metodo del punto medio. Osserviamo
che dimezzando il passo H l’errore si riduce di un fattore 4: con N = 20 infatti otteniamo
I = 3.1351, con un errore pari a 0.0065.
Verifichiamo il grado di esattezza anche di questo metodo integrando r = 3x+1, sull’intervallo
[0, 1]. Osserviamo che anche con un solo intervallo (N = 1) otteniamo il risultato esatto cioè
2.5.
>>r=3*x+1
>>[I]=trapezi(r,0,1,1);
Esercizi
1
Modificare la function p medio per calcolare l’integrale evitando il ciclo for. Suggerimento:
calcolare il vettore dei punti medi, utilizzare il comando sum.
2
Calcolare utilizzando il metodo del punto medio composito l’integrale sull’intervallo [0, π] delle
due funzioni sin2 (x) e sin2 (10x). Se utilizziamo lo stesso numero di sottointervalli per quale
delle due otteniamo l’errore minore e perch, sapendo che l’integrale esatto è π/2 in entrambi
i casi?
5
3
Vogliamo calcolare l’integrale di f = x2 sull’intervallo [0, 1]. Calcolare utilizzando le relazioni
1 e 2 il numero minimo di sottointervalli necessario per calcolare l’integrale con un errore
inferiore a 10−4 con i due metodi.
4
Consideriamo la funzione f = x sin(x), da integrare su [0, π]. Produrre per i due metodi
(punto medio e trapezi) un grafico dell’errore all’aumentare del numero di sottointervalli
(eventualmente in scala logaritmica - comando loglog).
5
Approfondimento
Modificare il metodo dei trapezi sostituendo f con il suo polinomio interpolatore di grado 1
nei nodi di Gauss che sono, nell’intervallo k-simo:
1 H
1 H
γk−1 = xk−1 + (1 − √ ) γk = xk−1 + (1 + √ )
3 2
3 2
ottenendo la formula:
C
IGauss
=
N
HX
f (γk−1 ) + f (γk ).
2
k=1
Verificare che il metodo ottenuto ha accuratezza 4 e ordine di esattezza pari a 3 in quanto
vale:
C
I(f ) − IGauss
=
b − a 4 (4)
H f (ξ)
5 · 243
cioè
C
|I(f ) − IGauss
|≤
b−a 4
H max(|f (4) (ξ)|)
5 · 243
6