Anno Accademico 2007-2008 Corso di Analisi 1 per Ingegneria Elettronica Laboratorio 3 Integrazione numerica Sia f una funzione continua sull intervallo [a, b] numerica con lo scopo di approssimare Introduciamo formule di quadratura I(f) = b a f(x) dx 1 Il metodo del punto medio Per approssimare l integrale di f sfruttiamo innanzitutto l additività dell integrale Suddividiamo l intervallo [a, b] in Nsottointervalli I k = [x k 1, x k ], k = 1, N di ampiezza b a N, con x 0 = a, x N = b; possiamo scrivere I(f) = I k f(x) dx In ogni intervallo I k 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 = x k 1 + x k, k = 1, N 2 In questo modo otteniamo la formula del punto medio composito: Poniamo H = b a N : I C P M(f) = I C P M(f) = H (b a) f( x k ) 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 dove ξ [a, b] Significa che I(f) I C P M(f) = b a 24 H2 f (ξ) I(f) I C P M(f) b a 24 H2 max f (ξ) (1) 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 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 ff=subs(f,xx); % valuto f medio dell intervallo k-simo I=I+ff*H; % sommo il k-simo contributo disp( Il valore dell integrale è ) I if (nargin==5) err=abs(i ex-i) % il modulo dell errore disp( L errore è) err 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 = 31545, con un errore di 00130, inferiore al massimo atteso 00401 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 = 31448, con un errore pari a 00032 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è 25 >>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 x k 1 e x k : I C T (f) = H 2 (f(x k ) + f(x k 1 )) = H N 1 2 [f(a) + f(b)] + H f(x k ) In questo caso per l errore abbiamo la seguente uguaglianza: 3
Figura 2: Formula del trapezio composito composito Significa che I(f) I C T (f) = b a 12 H2 f (ξ) I(f) I C T (f) b a 12 H2 max f (ξ) (2) 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 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 disp( Il valore dell integrale è ) I if (nargin==5) err=abs(i ex-i) % il modulo dell errore disp( L errore è) err 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 = 31157, con un errore di 00259, inferiore al massimo atteso 00802 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 = 31351, con un errore pari a 00065 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è 25 >>r=3*x+1 >>[I]=trapezi(r,0,1,1); 1 Esercizi 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 sin 2 (x) e sin 2 (10x) Se utilizziamo lo stesso numero di sottointervalli per quale delle due otteniamo l errore minore e perch, sapo che l integrale esatto è π/2 in entrambi i casi? 5
3 Vogliamo calcolare l integrale di f = x 2 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 sostituo f con il suo polinomio interpolatore di grado 1 nei nodi di Gauss che sono, nell intervallo k-simo: otteno la formula: γ k 1 = x k 1 + (1 1 3 ) H 2 γ k = x k 1 + (1 + 1 3 ) H 2 I C Gauss = H 2 f(γ k 1 ) + f(γ k ) Verificare che il metodo ottenuto ha accuratezza 4 e ordine di esattezza pari a 3 in quanto vale: cioè I(f) I C Gauss = b a 5 24 3 H4 f (4) (ξ) I(f) I C Gauss b a 5 24 3 H4 max( f (4) (ξ) ) 6