Sei sulla pagina 1di 13

Integrazione gaussiana

Laboratorio di Calcolo Numerico Annalisa Bua Fausto Cavalli

Corso di Laurea in Chimica

A.A. 2008-2009

Integrazione gaussiana
Formula di quadratura gaussiana
Una formula di quadratura gaussiana consiste in una formula di tipo interpolatorio che massimizza lordine di precisione con un dato numero di nodi. In particolare, scelti n + 1 nodi in modo che siano gli zeri del polinomio di grado n + 1, ortogonale a tutti i polinomi di grado n, la formula di quadratura gaussiana ha grado di precisione 2n + 1. In genere si suppone che lintegrale da approssimare abbia la forma
b

(x)f (x)dx
a

dove (x) ` una funzione > 0 detta peso dellintegrale. Si ricorda inoltre e che due polinomi si dicono ortogonali quando il loro prodotto scalare ` e nullo, cio` quando vale che e
b

(p, q) =
a

(x)p(x)q(x)dx = 0

Formula di quadratura gaussiana


La formula di quadratura gaussiana assume la forma solita
n

In (f ) =
i=0

i f (xi )

Una caratteristica delle formule di quadratura gaussiane ` di avere i pesi e tutti positivi, il che contribuisce a irrobustire la stabilit` della formula. a Ci sono vari modi per ricavare i pesi ed i nodi di una formula gaussiana, in particolare posso imporre direttamente la massimalit` dellordine di a precisione, ottenendo un sistema non lineare di 2n + 2 equazioni con incognite i pesi ed i nodi, oppure sfruttare la caratterizzazione attraverso il polinomi ortogonali. In questo ultimo caso i passi da compiere saranno i seguenti: Calcolo il polinomio Qn+1 ortogonale ai polinomi di Pn Calcolo le sue radici Calcolo i suoi pesi Si tenga presente che la formula di quadratura ` riferita allintervallo di e riferimento del polinomio ortogonale, e va riportata allintervallo di integrazione desiderato

Calcolo del polinomio ortogonale


Come detto il primo passo consiste nel calcolo del polinomio ortogonale qn+1 : ogni famiglia di polinomi ortogonali ` denita attraverso una e formula di ricorrenza, che permette di calcolare un nuovo polinomio a partire dai polinomio di grado inferiore gi` calcolati. Per esempio se a consideriamo il peso = 1, la famiglia di polinomi ortogonali su [1, 1] si chiama di Legendre ed ` denita da e P0 = 1 P1 = x (n 1) 2n 1 xPn1 (x) Pn2 (x) n n mentre se il peso ` dato da = 1/ 1 x 2 , la famiglia di polinomi e ortogonali su (1, 1) si chiama di Chebichev ed ` denita da e Pn (x) = P0 = 1 P1 = x Pn (x) = 2xPn1 (x) Pn2 (x)

Quadratura di Gauss-Legendre
Esercizio
Si scriva una function polyleg che, ricevuto in ingresso il valore di n, restituisca il vettore dei coecienti del polinomio di Legendre di grado n Suggerimento: come gi` visto, Matlab memorizza i polinomi sotto forma a di vettori le cui componenti sono i coecienti del polinomio ordinati dal termine di grado maggiore a quello minore. Per fare il prodotto di polinomi esiste la funzione conv la cui sintassi ` e p3=conv(p1,p2) che calcola il prodotto p3(x) = p1(x) p2(x). Per sommare polinomi ` invece suciente sommare i relativi vettori, a e patto che siano della stessa lunghezza. In particolare se cerco di sommare due polinomi di grado diverso devo aggiungere degli zeri allinizio del vettore di quello di grado minore no a renderlo lungo come quello di grado maggiore.

Quadratura di Gauss-Legendre
Svolgimento: innanzitutto creo una funzione di supporto di nome genleg che, dati due polinomi, mi genera il successivo con la formula ricorsiva di Legendre Intestazione della funzione: function p2=genleg(p0,p1,i) Istruzioni: ricordiamo che la formula da implementare ` e p2 = t1 t2 dove t1 = 2i 1 x p1, i i 1 p0 i

t2 =

Denisco x=[1 0]; Calcolo t1 ricordandomi che per fare il prodotto dei due polinomi x e p1 devo usare la funzione conv Calcolo t2 Calcolo p2: dato che il grado(t1)=grado(t2)+2, devo scrivere p2=t1-[0 0 t2];

Quadratura di Gauss-Legendre
Svolgimento: ora creo la funzione principale function p=polyleg(n) Istruzioni: Denisco p0=1; e p1=[1 0]; Controllo Se n==0, pongo il risultato p pari a p0 Altrimenti se n==1, pongo il risultato p pari a p1 Altrimenti
Per i che va da 2 a n Richiamo la funzione genleg e mi faccio restituire p2 Pongo p0=p1; Pongo p1=p2;

Finito il ciclo ma allinterno dellultima istruzione condizionale pongo p=p2;

Quadratura di Gauss-Legendre
Ora che si ` calcolato il polinomio, basta trovarne gli zeri, e per questo si e potr` applicare la funzione roots di Matlab. Per le formule di a Gauss-Legendre i pesi sono dati da i = 2(1 xi2 ) [(n + 2)qn+2 (xi )]2

A questo punto, ottenuti i pesi ed i nodi relativi a [1, 1] ` necessario e riportarli al generico intervallo [a, b] attraverso xi = b+a ba xi + , 2 2 i = ba i 2

Esercizio
Si crei la funzione quadleg che calcoli nodi e pesi di una formula di quadratura di Gauss-Legendre con n dato relativi ad un generico intervallo [a, b].

Quadratura di Gauss-Legendre
Suggerimenti: creo la funzione function [alfa,x]=quadleg(a,b,n) Istruzioni: Calcolo il polinomio p di Legendre di grado n + 1, per calcolare i nodi Calcolo i nodi con il comando x=roots(p); Calcolo il polinomio q di Legendre di grado n + 2, per calcolare i pesi Calcolo i pesi con la formula precedente Riporto i nodi allIntervallo [a, b], con la trasformazione precedente Trasformo i pesi per lintervallo [a, b], con la trasformazione precedente

Quadratura di Gauss-Legendre
Ora ` possibile testare la formula di quadratura appena creata: ci e possono essere due questioni da studiare Se suddivido lintervallo di integrazione in sottointervalli, ed a ciascuno applico una formula di Gauss-Legendre con dato n, devo trovare ordine di convergenza deve essere di 2n + 1 Se non suddivido lintervallo di partenza, ma aumento il numero n, che tipo di convergenza ritrover`? o Per vericare la prima aermazione ` suciente riprendere uno degli e script per testare lordine di convergenza e modicarlo in modo da utilizzare il metodo di Gauss-Legendre. Per esempio, se approssimo sin(x)dx con una formula con n = 2 trovo gli errori 0 nodi errori 10 9.56e-10 50 6.08e-14 100 8.88e-16 200 4.44e-16

Formula del punto medio


con graco di convergenza in scala bilogaritmica

in cui si nota che si ` gi` raggiunta la precisione macchina e a

Quadratura di Gauss-Legendre
Per rispondere alla seconda domanda bisogna creare il seguente script Denisco f come inline Denisco a=0; e b=pi; Inizio un ciclo: per n che va da 1 a 7 Calcolo con quadleg pesi e nodi di Legendre su [a, b] con n Calcolo la formula di quadratura con il comando Q=sum(alfa.*f(nodi)); Calcolo lerrore con err(n)=abs(2-Q); Se provo a rappresentare lerrore in scala bilogaritmica non trovo una retta; provo allora a rappresentarlo in scala logaritmica solo sulle ordinate, attraverso il comando semilogy ed eettivamente quello che trovo ` una retta. e

Formula del punto medio


Se in scala semilogy diventa retta una funzione di errore, allora essa ha la forma E (n) = an cio` ` una convergenza di tipo esponenziale. In questo caso si pu` ee o vericare che a 145

in cui si nota come con pochissimi nodi si sia raggiunta gi` una precisione a elevata