La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Integrazione numerica Gabriella Puppo. Integrazione numerica zFormula dei trapezi zFormula di Simpson zStima numerica dellaccuratezza zFunzioni di quadratura.

Presentazioni simili


Presentazione sul tema: "Integrazione numerica Gabriella Puppo. Integrazione numerica zFormula dei trapezi zFormula di Simpson zStima numerica dellaccuratezza zFunzioni di quadratura."— Transcript della presentazione:

1 Integrazione numerica Gabriella Puppo

2 Integrazione numerica zFormula dei trapezi zFormula di Simpson zStima numerica dellaccuratezza zFunzioni di quadratura di Matlab zEsempi

3 Formula dei trapezi zLa function deve avere in input: il nome della funzione integranda, lintervallo [a,b] di integrazione, il numero di intervalli in cui suddividere [a,b] zLa function deve dare in output il risultato del calcolo dellintegrale zAllinterno, ci deve essere un ciclo, nel quale si applica la formula composita dei trapezi Per costruire una function che applichi il metodo dei trapezi, devo costruire una function con le caratteristiche seguenti:

4 function s=trapezi(fun,a,b,n) % %TRAPEZI Calcola integrali usando il metodo dei trapezi % TRAPEZI(FUN,A,B,N): Calcola l'integrale di FUN fra A e B % usando la formula dei trapezi composita e dividendo % [A,B] in N intervalli uguali % h=(b-a)/n; x=a:h:b; f=feval(fun,x); s=f(1)/2; for i=2:n s=s+f(i); end s=s+f(n+1)/2; s=s*h;

5 Esempio Calcolo lintegrale fra 0 e di f(x) = sin(x) (Risultato: 2) >> f=inline('sin(x)'); >> trapezi(f,0,pi,10) ans = Se uso più punti, ottengo unapprossimazione migliore: >> trapezi(f,0,pi,20) ans = >> trapezi(f,0,pi,40) ans =

6 Formula di Simpson zLa function deve avere in input: il nome della funzione integranda, lintervallo [a,b] di integrazione, il numero di intervalli in cui suddividere [a,b] zLa function deve dare in output il risultato del calcolo dellintegrale zAllinterno, ci deve essere un ciclo, nel quale si applica la formula composita di Simpson. Per costruire una function che applichi il metodo di Simpson devo soddisfare i requisiti seguenti:

7 function s=simpson(fun,a,b,n) % %SIMPSON Calcola integrali definiti usando il metodo di Simpson % SIMPSON(FUN,A,B,N): Calcola l'integrale di FUN fra A e B % usando la formula di Simpson composita e dividendo % [A,B] in N intervalli uguali % h=(b-a)/n; x=a:h:b; f=feval(fun,x); for i=1:n xmezzi(i)=0.5*(x(i)+x(i+1)); %Calcola i punti medi di [xj,xjp1] end fmez=feval(fun,xmezzi); s=0; for i=1:n s=s+f(i)+4*fmez(i)+f(i+1); end s=s*h/6;

8 Esempio Calcolo lintegrale fra 0 e di f(x) = sin(x) >> f=inline('sin(x)'); Questa volta i risultati sono molto più precisi >> format long >> simpson(f,0,pi,10) ans = >> simpson(f,0,pi,20) ans = >> simpson(f,0,pi,40) ans =

9 Valutare laccuratezza di una formula di quadratura zConsidero un problema di cui conosco il risultato esatto zCalcolo lintegrale con una griglia di ampiezza h. Ottengo lerrore e(h) zCalcolo lintegrale con una griglia di ampiezza h/2. Ottengo lerrore e(h/2) zUso la stima e(h) ~ C h^p per ricavare p

10 Stima numerica dellaccuratezza z Funzione regolare: f(x)=exp(x/10)*sin(x) su [-5,5] z Funzione non regolare: f(x)= abs( cos(x) ) su [0,3] Stimo laccuratezza in due casi: Nel primo caso, otterrò la stima teorica (per h abbastanza piccolo) Nel secondo caso, otterrò una velocità di convergenza più lenta

11 Script acc_smooth.m % % calcola l'accuratezza del metodo dei trapezi e del metodo di Simpson % usando la funzione exp(x/10)*sin(x) su (-5,5) % f = inline('exp(x/10).*sin(x)'); exa=inline('10/101*exp(x/10)*(sin(x)-10*cos(x))'); exa_int=exa(5)-exa(-5); n=10; nmax=8; % Fissa i parametri iniziali fprintf(' n trapezi Simpson \n') Imposta la funzione ed il calcolo dellintegrale esatto: continua...

12 Calcola lerrore su diverse griglie per il metodo dei trapezi ed il metodo di Simpson for k=1:nmax trap=trapezi(f,-5,5,n); simp=simpson(f,-5,5,n); err_trap(k)=abs(trap - exa_int); err_simp(k)=abs(simp - exa_int); n=n*2; % Raddoppia il numero di intervalli fprintf('%4.0f %12.6e %12.6e \n',n,err_trap(k),err_simp(k)) end continua...

13 Usa gli errori calcolati sulle diverse griglie per stimare laccuratezza per il metodo dei trapezi ed il metodo di Simpson %stampa l'accuratezza fprintf('\n accuratezza \n') for k=2:nmax acc_trap=log(err_trap(k-1)/err_trap(k))/log(2); acc_simp=log(err_simp(k-1)/err_simp(k))/log(2); fprintf('%4.0f %12.6e %12.6e \n',k,acc_trap,acc_simp) end

14 Ottengo i seguenti risultati: >> acc_smooth n trapezi Simpson e e e e e e e e e e e e e e e e-13 accuratezza e e e e e e e e e e e e e e+00 Accuratezza delle formule di quadratura per la funzione: f(x) = exp(x/10) * sin(x)

15 Se invece integro una funzione non regolare, laccuratezza si deteriora: >> acc_sing n trapezi Simpson e e e e e e e e e e e e e e e e-07 accuratezza e e e e e e e e e e e e e e+00 Accuratezza delle formule di quadratura per la funzione: f(x) = abs( cos(x) ) sullintervallo [0,3].

16 Funzioni di quadratura di Matlab zUso di base di quad e quadl zImpostare le tolleranze zVisualizzare la costruzione dellintegrale

17 Funzioni quad e quadl Le functions quad e quad8 (Matlab 5) o quad e quadl (Matlab 6 e 7) sono le functions per lintegrazione numerica di Matlab. Il passo di integrazione viene determinato in maniera adattiva, in modo da soddisfare una tolleranza, che può essere fornita in input. La function quad è basata sulla formula di Simpson, mentre quad8 usa una formula di tipo Newton-Cotes di accuratezza 8. In Matlab 6 e 7, quad8 è stata sostituita dalla function quadl, che usa una formula gaussiana di accuratezza elevata con nodi di Gauss Lobatto.

18 Sintassi La chiamata più semplice è int = quad (fun,a,b) fun è una stringa, che contiene il nome della funzione integranda. La funzione fun deve essere scritta in modo da accettare un vettore in input, e fornire un vettore in output. a e b sono gli estremi di integrazione Esempio >> f=inline('log(x).^2'); >> int = quad(f,1,3) int =

19 Per avere una stima del numero di operazioni che sono state effettuate, uso un secondo argomento (opzionale) in output: >> f=inline('log(x).^2'); >> [int, op] = quad(f,1,3) int = op = 25 Quindi, per ottenere il risultato, sono state necessarie 25 valutazioni funzionali, cioè 25 chiamate della funzione f.

20 Impostare la tolleranza Per impostare la tolleranza sulla quale è basato lalgoritmo adattivo, devo fornire un ulteriore argomento in input: >>int = quad(f,a,b, tol) Il valore di default è 1e-3*C in Matlab5 e 1e-6*C in Matlab6 e 7, dove C è una stima numerica del valore dellintegrale. Se tol viene impostato dallesterno, quad usa tol come una tolleranza assoluta. Sta quindi allutente scegliere un valore appropriato per il parametro tol.

21 Abbassando la tolleranza, aumenta il numero di operazioni: >> f=inline('x+sin(5*x)') >> [int,c]=quad(f,1,3,1e-3) int = c = 13 >> [int,c]=quad(f,1,3,1e-4) int = c = 29 >> [int,c]=quad(f,1,3,1e-5) int = c = 45 Tolleranza e numero operazioni >> 4-0.2*(cos(15)-cos(5)) ans = La risposta esatta è:

22 Cifre significative Calcolando lintegrale due volte, con due valori diversi della tolleranza, posso avere una stima del numero di cifre significative. Per esempio >> [int,c]=quad(f,1,3,1e-4) int = c = 29 >> [int,c]=quad(f,1,3,1e-5) int = c = 45 Nella stima del primo integrale ci sono circa 5 cifre significative, perché le prime 5 cifre restano invariate abbassando la tolleranza. Confrontare con il risultato esatto:

23 Visualizzare la costruzione dellintegrale La chiamata quad(f, a, b, tol, trace) dove trace è un qualunque numero diverso da zero, produce un output complesso, nel quale vengono evidenziate le vicissitudini dellalgoritmo adattivo. Si ottengono 4 colonne: 1) Numero di valutazioni funzionali calcolate finora; 2) Estremo sinistro di integrazione corrente a k ; 3) Passo di integrazione corrente h k ; 4) Valore stimato dellintegrale fra a k e a k + h k

24 >> int=quad(f,1,3,1e-6,1) e e e e e e e e e e e e e e e e e e e ……………………………………..

25 Uso di quad e quadl Se la funzione da integrare è regolare, di solito quadl dà risultati più accurati di quad, con meno operazioni: >> [int,fcn]=quadl(f,1,3,1e-6) int = fcn = 48 EDU>> [int,fcn]=quad(f,1,3,1e-6) int = fcn = 61 La funzione da integrare è: f(x) = x + sin(5x) e lintegrale esatto è: Notare che la tolleranza è la stessa, ma i due risultati hanno accuratezza diversa.

26 Se invece la funzione integranda non è regolare... >> f=inline('abs(cos(x))'); >> [int,fcn]=quad(f,0,2,1e-6) int = fcn = 41 >> [int,fcn]=quadl(f,0,2,1e-6) int = fcn = 108 >> exa=2-sin(2) exa = In questo caso, quadl richiede più operazioni a parità di tolleranza, e inoltre il risultato è meno accurato, infatti il risultato esatto è: In ogni caso, qui è meglio spezzare lintegrale su due intervalli

27 Esercizio 1 Calcolare larea delle regioni di piano delimitate dalle curve f(x) = exp( -(x-1)^2 ) e: g(x) = -1/8 x + 1/2 Suggerimento: Qui devo prima disegnare un grafico delle due curve, calcolare i punti di intersezione, stabilire come è formata la regione di integrazione, e infine stimare larea calcolando gli integrali richiesti con il segno corrretto.

28 Esercizio 2 Calcolare lintegrale di f(x) = |cos(x)| sullintervallo [0, 6] con 5 cifre decimali significative Suggerimento: Qui la funzione integranda non è regolare, è bene spezzare il dominio di integrazione in modo da integrare su intervalli che non contengano punti di discontinuità

29 Esercizio 3

30 Esercizio 4 Calcolare lintegrale della funzione f(x) = sin(1/x) su [0.1, 1] 1) Usare la function che utilizza il metodo di Simpson su una griglia uniforme. Quanti intervalli è necessario usare per ottenere un risultato con 5 cifre significative? 2) Usare la function quad di Matlab. Che tolleranza è necessario impostare per avere un risultato con 5 cifre significative? Qual è il numero di valutazioni funzionali richiesto in quel caso?

31 Esercizio 5 Suggerimento: Suddividere lintervallo [0,4] (per esempio) in 400 punti, e formare un vettore t = 0:4/400:4. In corrispondenza dei valori t(i), calcolare x(i) e y(i), osservando che: x(i) = integrale (da t(i) a t(i+1)) cos(s^2) ds + x(i-1) Quanto è scomodo Word per scrivere formule di matematica!


Scaricare ppt "Integrazione numerica Gabriella Puppo. Integrazione numerica zFormula dei trapezi zFormula di Simpson zStima numerica dellaccuratezza zFunzioni di quadratura."

Presentazioni simili


Annunci Google