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