Chimica Industriale 1 Interpolazione e Approssimazione di Funzioni Uno dei primi problemi della matematica e anche uno dei più applicati è la costruzione di una approssimazione di una funzione data f mediante funzioni più semplici, tipicamente, ma non sempre, polinomi. Una variante di questo problema è la costruzione di una funzione regolare a partire da un insieme discreto di punti. Quando si deve trattare una funzione complicata a tal punto che non sia possibile trattare i suoi valori in modo diretto si cerca di approssimarla con una funzione nota e più semplice da calcolare. Un modo per risolvere il problema è di definire una classe di funzioni approssimanti e di cercare la soluzione migliore in funzione di una opportuna metrica. Una scelta possibile è la classe dei polinomi di grado assegnato m, Pm . Definizione di Polinomio • Una funzione p definita ∀x ∈ R da: p(x) = a0 + a1 x + a2 x2 + . . . an xn = n X ai xi i=0 dove n é un intero non negativo e a0 , a1 , . . . an sono numeri reali fissati, é detto Polinomio; • se p(x) ha questa rappresentazione e an 6= 0 allora p(x) ha grado n (ordine n+1). • se tutti i coefficienti a0 , a1 . . . an sono nulli, allora p(x) é detto il polinomio nullo. Con Pn si denota l’insieme di tutti i polinomi p con grado non superiore ad n, insieme al polinomio nullo. La principale ragione della popolaritá delle funzioni polinomiali nel calcolo numerico deriva dal fatto che é facile calcolarle, cioé é facile valutarle in un punto, sommarle,moltiplicarle derivarle e integrarle. La definizione mostra in particolare, che per valutare un polinomio in un punto é necessario solo moltiplicare e sommare numeri reali un numero finito di volte. Essi giocano un ruolo centrale nella teoria dell’approssimazione e nel calcolo numerico per le loro ben note proprietá • i polinomi di grado ≤ n formano uno spazio vettoriale di dimensione finita n + 1 • sono funzioni regolari • sono facilmente memorizzabili, calcolabili e manipolabili su un calcolatore • la derivata e l’antiderivata di un polinomio sono ancora polinomi i cui coefficienti sono determinati algebricamente ( e anche da un calcolatore) • il numero di zeri di un polinomio di grado n non puó superare n, • data una qualunque funzione continua su un intervallo [a, b], esiste un polinomio che la approssima uniformemente qualunque sia l’² prefissato: |f (x)−p(x)| < ² ∀x ∈ [a, b] Teorema: Pn é uno spazio vettoriale di dimensione n + 1. Teorema: ( fondamentale dell’algebra) Sia p(x) un polinomio di grado n ≥ 1. L’equazione algebrica di grado n, p(x) = 0 ha almeno una radice reale o complessa. Corollario: Ogni equazione algebrica di grado n ha esattamente n radici reali o complesse, ciascuna contata con la sua molteplicitá, cioé p(x) = an (x − α1 )m1 · (x − α2 )m2 · (x − α3 )m3 . . . (x − αk )mk 2011/01/12 2 dove αi , i = 1, . . . k sono le radici a due a due distinte e mi , molteplicitá , tali che m1 + m2 + . . . mk = n i = 1, . . . k sono le relative Teorema Siano p(x), b(x) polinomi con b(x) 6= 0; allora esistono e sono unici i polinomi q(x) ed r(x) per cui p(x) = q(x) · b(x) + r(x) con r(x) = 0 o r(x) con grado minore di b(x) Osservazione Dati i polinomi p(x) e b(x) con b(x) 6= 0 é sempre possibile trovare un polinomio quoziente q(x) ed un polinomio resto r(x) per cui p(x) r(x) = q(x) + b(x) b(x) Valutazione numerica di un polinomio P Assegnato un polinomio di grado n (nella sua forma convenzionale) p(x) = ni=0 ai xi Un algoritmo immediato per la sua valutazione in x0 é illustrato come segue: indicato con a il vettore contente i coefficienti del polinomio a = [a(n + 1), a(n), . . . , a(2), a(1)] allora .... s = 1; p = a(1); for k=2:n s = s* x_0; p = p+a(k)*s; end quindi il calcolo di p(x) richiede 2n noltiplicazioni e n addizioni. Se scriviamo il polinomio nella forma seguente p(x) = a0 + x(a1 + x(a2 + x(a3 + . . . + x(an−1 + xan ) . . .))) si ricava il seguente metodo dovuto a Horner: ..... p=a(n+1) for k=n:-1:1 p=a(k)+x_0*p; end r=p; L’algoritmo di Horner richiede n moltiplicazioni e n addizioni, quindi più rapido del precedente oltre che numericamente più stabile. Lo schema di Horner e la regola di Ruffini Un caso particolarmente importante che si deduce dal teorema precedente sulla divisione di due polinomi q(x) e b(x) é quello in cui b(x) = (x − x0 ) per un certo x0 reale. Allora il risultato dice che esistono unici i polinomi q(x) e r(x) per cui p(x) = q(x) · (x − x0 ) + r(x) dove r(x) = 0 o r(x) ha grado zero; in ogni caso r(x) é un polinomio costante diciamo r, cosı́: p(x) = q(x) · (x − x0 ) + r; Se ora valutiamo p(x) in x0 si trova che p(x0 ) = r. Quindi vale il seguente: 2011/01/12 3 Teorema Il resto della divisione del polinomio p(x) per (x − x0 ) é r = p(x0 ). Dal teorema del resto enunciato si deduce che per valutare un polinomio in un punto x0 si puó determinare il resto della divisione fra p(x) e (x − x0 ). A tal fine é nota la regola di Ruffini: an an−1 . . . . . . a2 a1 a0 x xbn xbn−1 . . . xb3 xb2 xb1 bn bn−1 ... da cui noti i coefficienti a0 , a1 , . . . an ed x0 ricavare cosı́ bn ← bn−1 ← bn−2 ← .. .. . . b1 r . . . b2 b1 r i coefficienti bi ed il resto r = p(x0 ) si possono an an−1 + x0 bn an−2 + x0 bn−1 .. . ← a1 + x0 b2 ← a0 + x0 b1 P n−1 ; ma questo schema é esattamente quello con q(x) = n−1 i=0 bi+1 x = b1 + b2 x + . . . bn x di Horner appena visto. Se si vogliono calcolare anche i coefficienti del polinomio q(x) l’algoritmo precedente viene cosı́ modificato .... p =a(n+1); b(n)=p; for k=n:-1:2 p=a(k)+p*x_0; b(k-1)=p; end r=a(1)+x_0*b(1); Esempio Sia dato p(x) = 1 + x − 2x2 + 3x4 e si voglia calcolare p(2). Quando la valutazione si effettua manualmente la regola di Ruffini é molto comoda: 3 2 3 0 −2 1 1 6 12 20 42 6 10 21 43 = P(2) Valutazione di un polinomio e della sua derivata Si voglia ora determinare il valore della derivata prima di p(x) per x = x0 cioé p0 (x0 ). Da quanto detto vale: p(x) = q(x)(x − x0 ) + p(x0 ) derivando p0 (x) = q 0 (x)(x − x0 ) + q(x) P n−1 e per x = x0 p0 (x0 ) = q(x0 ) dove q(x) = i=0 bi+1 xi e i coefficienti bi per i = 1, 2, . . . , n sono quelli che si ottengono applicando l’algoritmo di Ruffini Horner per valutare p(x0 ). Esempio Si valuti p0 (2) per p(x) = 1 + x − 2x2 + 3x4 differenziando esplicitamente p(x) si ha: p0 (x) = 1 − 4x + 12x3 , p0 (2) = 1 − 8 + 96 = 89 2011/01/12 4 3 2 0 −2 1 1 6 12 20 42 3 6 10 21 43 = P(2) 6 24 68 3 12 34 2 89 = P’(2) Il calcolo di p(x0 )e p0 (x0 ) possono essere organizzati in modo da non memorizzare nessun risultato intermedio: .... p_d=0; p=a(n+1) for k=n:-1:1 p_d=p+x_0 *p_d p=a(k)+x_0*p end ....... Analogamente si possono calcolare anche le derivate di ordine maggiore. Derivando due volte p(x) = q(x)(x − x0 ) + r si ottiene p0 (x) = q 0 (x)(x − x0 ) + q(x), p”(x) = q”(x)(x − x0 ) + 2q 0 (x), da cui p”(x0 ) = 2q 0 (x0 ). Quindi per calcolare p”(x0 ) é necessario calcolare q 0 (x0 ) utilizzando lo schema di Horner. Esempio Si valuti p”(2) per p(x) = 1 + x − 2x2 + 3x4 In generale possiamo scrivere la 3 2 3 2 0 −2 1 6 12 20 42 6 10 21 43 = P(2) 6 24 68 3 12 34 3 6 18 2 1 89 = P’(2) 36 70 = P"(2)/2 relazione fra un polinomio dividendo e il suo polinomio quoziente utilizzando un indice pj (x) = pj+1 (x)(x − x0 ) + p(j) (x0 ), j = 0, . . . , n − 1, allora • p(x) = p0 (x) • pj (x0 ) = j!pj (x0 ) • i coefficienti di pj (x) sono i valori determinati applicando il metodo di Horner al polinomio pj−1 (x). 2011/01/12 5 Esistono varie funzioni M atlab che manipolano i polinomi: POLYVAL, POLYFIT, POLY, ROOTS, CONV Si voglia valutare p(x) = 3x7 + 2x2 + 1 nei punti equidistanti xk = −1 + k × 0.25 per k = 0, 1, . . . , 8, si puó utilizzare il seguente codice: À p = [3, 0, 0, 0, 0, 2, 0, 1]; x = [−1 : 0.25 : 1] À y = polyval(p, x) y = 0 1.7245 1.4766 1.1248 1.0000 1.1252 1.5234 2.5255 6.0000 La function polyfit applica i minimi quadrati per trovare il polinomio di best-fit. Dal manuale in linea di Matlab: POLYFIT Fit polynomial to data. P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of degree N that fits the data Y best in a least-squares sense. P is a row vector of length N+1 containing the polynomial coefficients in descending powers, P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1). [P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and a structure S for use with POLYVAL to obtain error estimates for predictions. S contains fields for the triangular factor (R) from a QR decomposition of the Vandermonde matrix of X, the degrees of freedom (df), and the norm of the residuals (normr). If the data Y are random, an estimate of the covariance matrix of P is (Rinv*Rinv’)*normr^2/df, where Rinv is the inverse of R. Nel caso in cui i vettori X, Y contenenti i dati da approssimare siano di dimensione N la function polyfit calcola il polinomio di interpolazione. Come si legge dal manuale questo viene calcolato costruendo la matrice di Vandermonde che come é noto é mal condizionata, per cui se il set di dati genera una matrice V malcondizionata é molto probabile ottenere il seguente messagio: Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the polynomial, or try centering and scaling as described in HELP POLYFIT. Matlab fornisce i coefficienti del polinomio calcolato, ma informa che poiche’ la matrice dei coefficienti é mal condizionata i dati possono non essere attendibili. Con il comando p = conv(p1, p2) si calcolano i coefficienti del polinomio ottenuto come prodotto dei polinomi i cui coefficienti sono precisati in p1 e p2. Invece il comando [q, r] = deconv(p1, p2) calcola i coefficienti del quoziente e del resto della divisione fra p1 e p2, cioé q ed r tali che p1 = conv(p2, q) + r Esempio Consideriamo i polinomi p1(x) = x4 − 1 e p2(x) = x3 − 1, calcoliamo il prodotto e la divisione À p1 = [1, 0, 0, 0, −1]; À p2 = [1, 0, 0, −1]; À p = conv(p1, p2) p= 1, 0, 0, −1, −1, 0, 0, 1 À [q, r] = deconv(p1, p2) 2011/01/12 6 q= 10 r= 0001 −1 Troviamo pertanto i polinomi p(x) = p1(x)p2(x) = x7 −x4 −x3 +1, q(x) = x e r(x) = x−1 tali che p1(x) = q(x) ∗ p2(x) + r(x). POLY(A), when A is an N by N matrix, is a row vector with N+1 elements which are the coefficients of the characteristic polynomial, DET(lambda*EYE(SIZE(A)) - A) . Esempio A= 1/3 1 0 0 0 2/3 0 0 0 0 3 −1 −5/3 1 0 0 2 −2/3 0 0 0 0 1/2 2/3 À p = poly(A) p = 1 2/3 − 13/9 − 962/999 4/9 296/999] quindi il polinomio p(x) ha la seguente espressione: p(x) = x5 + 2/3x4 − 13/9x3 − 962/999x2 + 4/9x + 296/999 POLY(V), when V is a vector, is a vector whose elements are the coefficients of the polynomial whose roots are the elements of V . For vectors, ROOTS and POLY are inverse functions of each other, up to ordering, scaling, and roundoff error. À c = poly([1, 1, 1, 1, 2]) c = 1 − 6 14 − 16 9 − 2 quindi il polinomio ha la seguente espressione: p(x) = x5 − 6x4 + 14x3 − 16x2 + 9x − 2 ROOTS Find polynomial roots. ROOTS(C) computes the roots of the polynomial whose coefficients are the elements of the vector C. If C has N+1 components, the polynomial is C(1)*X^N + ... + C(N)*X + C(N+1). Note: Leading zeros in C are discarded first. Then, leading relative zeros are removed as well. That is, if division by the leading coefficient results in overflow, all coefficients up to the first coefficient where overflow ocurred are also discarded. This process is repeated until the leading coefficient is’nt a relative 0 À r = roots(c) r= 2.0000 1.0002 + 0.0002i 1.0002 - 0.0002i 0.9998 + 0.0002i 0.9998 - 0.0002i >> S=compan(c) S= 2011/01/12 6 -14 1 0 0 1 0 0 0 0 >> eig(S) ans = 2.0000 1.0002 1.0002 0.9998 0.9998 7 16 0 0 1 0 + + - 0.0002i 0.0002i 0.0002i 0.0002i -9 0 0 0 1 2 0 0 0 0 2011/01/12 8 Interpolazione Di una funzione f (x) siano noti i valori fi = f (xi ) per i = 0, 1, . . . , n, in corrispondenza di n + 1 punti distinti xi . Si vuole determinare una funzione φ tale che φ(xi ) = fi i = 0, 1, . . . , n Una tale funzione φ si dice che interpola la f nei punti xi i = 0, 1, . . . , n. Nel caso generale viene individuato uno spazio di dimensione finita P di funzioni reali e una loro base di rappresentazione ϕj (x), j = 0, 1, . . . , n per cui ogni elemento di P risulta definito da una combinazione lineare a coefficienti reali delle ϕj : n X cj ϕj (x) j=0 allora il problema di interpolare i dati assegnati con una funzione φ ∈ P consiste nel determinare la funzione φ∗ o meglio i coefficienti c∗0 , c∗1 , . . . c∗n che la definiscono tale che φ∗ (xi ) = fi i = 0, 1, . . . , n La scelta dello spazio solitamente è dettata dal fatto che esista sempre una soluzione unica al problema, successivamente dalla regolarità desiderata per l’interpolante e dalla particolarità dei dati. Abbiamo visto che risulta molto importante scegliere la classe delle funzioni ϕj (x) sia per quanto riguarda il condizionamento sia per quanto riguarda il modello dell’approssimazione. La scelta deve essere motivata in modo da tener conto delle specifiche proprietá della f (x). Inoltre devono essere facilmente calcolabili e dotate di buone proprietá di regolaritá. Generalmente si utilizzano: • la classe delle funzioni razionali • la classe delle funzioni trigonometriche. • la classe delle funzioni esponenziali Occorre tener presente che non sempre é consigliabile determinare una funzione approssimante la f richiedendo che abbia gli stessi valori in certi punti. Se infatti della f sono noti solo approssimazioni dei valori della f , per esempio i dati provengono da misurazioni, é meglio usare un metodo di approssimazione che possa attenuare gli errori dovuti alle misurazioni. In queste lezioni tratteremo solamente il caso dell’interpolazione polinomiale che garantisce sempre l’esistenza e l’unicità della soluzione, una buona regolarità ed una buona ricostruzione in casi particolari. Teorema Dati (n + 1) punti di interpolazione (xi , fi ), i = 0, 1, . . . , n con xj 6= xk k 6= j esiste ed é unico il polinomio p ∈ Pn che verifica le condizioni p(xi ) = f (xi ) Dimostrazione Si consideri il vettore a = (a0 , a1 , . . . , an )T dei coefficienti del polinomio p(x) = a0 + a1 x + a2 x2 + . . . an xn , il vettore f = (f0 , f1 , . . . , fn )T e la matrice V = {νi,j } detta matrice di Vandermonde, cosı́ definita: νi,j = xj−1 i−1 i = 1, 2, . . . , n + 1 j = 1, 2, . . . , n + 1 2011/01/12 9 Imponendo che p(x) verifichi le n + 1 condizioni di interpolazione, si ottiene il sistema lineare di n + 1 equazioni in n + 1 incognite V a = f. La matrice di vandermonde risulta non singolare in quanto detV = Πni,j=0;j>i (xj − xi ) e i punti xi sono per ipotesi distinti, ne segue che il sistema lineare ha una ed una sola soluzione e quindi il polinomio p(x) esiste ed é unico. Osservazione Solo raramenmte del polinomio di interpolazione sono richiesti i coefficienti, in generale si vuole il valore di p(x) in uno o piú punti, e per calcolarlo non é conveniente risolvere il sistema lineare, perché ció richiederebbe un numero di operazioni dell’ordine di n3 /3 operazioni moltiplicative, inoltre la matrice di Vandermonde puó essere mal condizionata e quindi il calcolo di p(x) sarebbe numericamente instabile. Il polinomio di interpolazione pur essendo unico puó essere rappresentato in diverse forme piú convenienti sia dal punto di vista del costo computazionale che della stabilitá. Base di Lagrange Dati (n + 1) punti di interpolazione (xi , yi ), i = 0, 1, . . . , n con a = x0 < x1 < . . . < xn = b, il polinomio di interpolazione si scrive nella forma di Lagrange come segue: p(x) = n X yi Li,n (x), x ∈ [a, b] i=0 Le funzioni di Lagrange sono definite per i = 0, 1, . . . , n: Li,n (x) = x − xi−1 x − xi+1 x − xn x − x0 × ... × × × ... × xi − x0 xi − xi−1 xi − xi+1 xi − xn = Πnj6=i,j=0 x − xj xi − xj Le funzioni di Lagrange Li,n (x) formano una base per lo spazio Pn dei polinomi di grado n {L0,n (x), L1,n (x), . . . Ln,n (x)} Per come sono definite valgono le seguenti proprietá ( Li,n (xj ) = δij = 1 se j = i 0 se j 6= i Li,n (x) é un polinomio di grado al piú n, con n zeri distinti: x0 , x1 , . . . xi−1 , xi+1 , . . . xn . Quindi determinare il polinomio p(x) che soddisfi le condizioni di interpolazione p(xi ) = yi , ∀i, nella forma di Lagrange p(x) = a0 L0,n (x) + a1 L1,n (x) + . . . + an Ln,n (x) imponendo le condizioni di interpolazione si ottiene il sistema lineare L0,n (x0 ) L0,n (x1 ) .. . L1,n (x0 ) L1,n (x1 ) .. . ... ... .. . Ln,n (x0 ) Ln,n (x1 ) .. . L0,n (xn ) L1,n (xn ) . . . Ln,n (xn ) · a0 a1 .. . an = y0 y1 .. . yn 2011/01/12 10 Si osservi che la matrice L risulta uguale alla matrice identitá di ordine n + 1, In+1 . Quindi nell’interpolazione secondo Lagrange non cerchiamo i coefficienti ai perché sono identicamente uguali ai valori noti yi . In questo caso cerchiamo proprio le funzioni base di Lagrange costruite sulle ascisse xi . L’idea é di risolvere gli n + 1 problemi di interpolazione dove le ascisse x0 , x1 , . . . , xn sono quelle del problema iniziale in corrispondenza delle quali si hanno n + 1 insiemi di valori yi cosı́ fatti: {1, 0, 0, . . . , 0} ⇒ unica soluzione L0,n (xj ) {0, 1, 0, . . . , 0} ⇒ unica soluzione L1,n (xj ) {0, 0, 1, . . . , 0} ⇒ unica soluzione L2,n (xj ) .. . {0, 0, 0, . . . , 1} ⇒ unica soluzione Ln,n (xj ) La soluzione unica al problema iniziale si ottiene combinando assieme le n + 1 soluzioni parziali: p(x) = n X yi Li,n (x) i=0 é il polinomio unico di interpolazione e Li,n (xj ) = δi,j ⇒ p(xi ) = n X yi Li,n (xi ) = yi ∀i. i=0 Esempio Dati i punti x0 = 0, x1 = 1, x2 = 3 Le funzioni base di Lagrange ( anche dette funzioni cardinali) costruite su queste ascisse sono L0,2 = (x − 1)(x − 3) x2 − 4x + 3 x−1 x−3 · = = 0−1 0−3 3 3 x−0 x−3 −x(x − 3) · = 1−0 1−3 2 x−0 x−1 x(x − 1) L2,2 = · = 3−0 3−1 6 Il polinomio che interpola i tre punti (0, y0 ), (1, y1 ), (3, y2 ) é allora L1,2 = 1.2 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 0 p(x) = y0 0.5 1 1.5 2 2.5 3 −x(x − 3) x(x − 1) x2 − 4x + 3 − y1 + y2 3 2 6 Le funzioni base di Lagrange costruite su n+1 ascisse distinte hanno grado ≤ n nell’esempio precedente le tre funzioni base di Lagrange hanno tutte grado 2. Se i punti (xi , yi ) fossero 2011/01/12 11 tutti su una retta, la combinazione lineare si ridurrebbe in modo che il polinomio p risultante abbia grado 1. Esempio Dati i punti (0, 0), (1, 1), (3, 3), le funzioni base di Lagrange sono: L0,2 = x2 − 4x + 3 , 3 L1,2 = −x(x − 3) i 2 e L2,2 = x(x − 1) 6 x2 − 4x + 3 x(x − 3) x(x − 1) − +3 = x. 3 2 6 Se si deve valutare il polinomio interpolatore espresso nella forma di Lagrange p(x) = P un punto x̂i 6= xi , ∀i, si é tentati dal volerlo trasformare nella forma monoi yi Li,n (x) in P miale p(x) = i ai xi per poi applicare l’algoritmo di Ruffini-Horner. Procedere in questo modo, vuole dire dover calcolare gli ai che richiedono oltre 6n2 operazioni (×, +) Un altro algoritmo potrebbe essere: Dati x̃, n, {x0 , x1 , . . . , xn }, {y0 , y1 , . . . , yn } p ← 0 for j=0,1,. . .,n ....... q ← 1 ....... for i=0,1,. . .,n ...............if j 6= i (x̃−xi ) ............... q ← q × (x j −xi ) ....... end ....... p ← p + yj × q end ma anche questo ha un costo di circa 4n2 operazioni (×, +). Per cui occorre cambiare strategia. Consideriamo p(x) = 0 ω(x) = (x − x0 )(x − x1 ) . . . (x − xn−1 )(x − xn ) = Πnk=0 (x − xk ) Quindi possiamo scrivere p(x) = n X yi Li,n (x) = ω(x) i=0 i=0 con zi = Infatti n X n X yi n Πj6=i,j=0 (xi yi Li,n (x) = i=0 n X zi x − xi − xj ) yi Πnj6=i,j=0 i=0 x − xj = xi − xj Πnj6=i,j=0 (x − xj ) = yi n Πj6=i,j=0 (xi − xj ) i=0 n X = n X i=0 = n X i=0 yi ω(x)/(x − xi ) = Πnj6=i,j=0 (xi − xj ) ω(x) yi Πnj6=i,j=0 (xi − xj ) x − xi = n X i=0 zi ω(x) x − xi 2011/01/12 12 = ω(x) n X i=0 ove abbiamo posto zi = Quindi per calcolare p(x̃) = n X zi x − xi yi n Πj6=i,j=0 (xi − xj ) yi Li,n (x̃) = ω(x̃) i=0 n X i=0 zi x̃ − xi Le operazioni richieste sono, a meno di termini di ordine inferiore, • n sottrazioni per calcolare (x̃ − xi ), per i = 0, 1, . . . , n • n2 /2 sottrazioni per xj − xi , per i = 0, 1, . . . , n, e j = 0, 1, . . . , n, • n2 prodotti per calcolare zi , per i = 0, 1, . . . , n; • n somme e 2n prodotti per calcolare p(x̃). In totale questo calcolo richiede n2 /2 addizioni ed n2 prodotti. Per calcolare il valore dello stesso polinomio p in un altro punto x̂ conviene sempre usare questa forma perché gli scalari zi dipendono solo da xi e possono essere calcolati una volta per tutte. Quindi il calcolo in un altro punto x̂ richiede solo il passo finale cioé n somme e 2n prodotti. Infine lasciando inalterati gli xi e variando solo le ordinate yi si puó ancora calcolare p(x) con n somme e 2n prodotti aggiuntivi. 2011/01/12 13 RIEPILOGO I costi computazionali dell’interpolazione con la forma di Lagrange sono i seguenti: Calcolo in un punto: n2 /2 somme ed n2 prodotti Calcolo in m punti: n2 /2 + 2nm somme ed n2 + 2mn prodotti. In MATLAB ŷ = lagrval(y, x, x̂) function yy=lagrval(x,y,xx) % valutazione di un polinomio nella forma di Lagrange % y --> vettore dei coefficienti % x --> vettore dei punti in base ai quali restano determinati % i polinomi elementari di Lagrange % xx --> vettore di ascisse in corrispondenza delle quali % si vuole valutare il polinomio % yy <-- vettore dei valori del polinomio n=length(x); den(1)=prod(x(1)-x(2:n)); for i=2:n-1 den(i)=prod(x(i)-x(1:i-1))*prod(x(i)-x(i+1:n)); end den(n)=prod(x(n)-x(1:n-1)); m=length(xx); for i=1:m omega=prod(xx(i)-x); if omega==0 [nz k]=max(xx(i)==x); yy(i)=y(k); else yy(i)=omega*sum(y./(den.*(xx(i)-x))); end end 1 punto in m punti P. di Lagrange n2 /2(+) + n2 (×) P.di Newton n2 (+) + n2 /2(×) n2 /2 + 2mn)(+)+ +(n2 + 2mn)(×) (n2 + 2mn)(+)+ +n2 /2 + 2mn)(×) 2011/01/12 14 Analisi dell’errore di interpolazione Dati n+1 osservazioni fi di una funzione f (x) in corrispondenza di n+1 ascisse distinte abbiamo visto alcuni metodi per costruire il polinomio di grado minimo che interpola i punti (xi , fi ). In questo caso ha senso chiedersi che errore si commette in un punto x̂ nel considerare il valore di p(x̂) al posto di f (x̂), cioé quanto é grande l’errore di interpolazione R(x) = f (x) − p(x) che si commette in un punto x̂ ∈ [a, b], x̂ 6= xi , ∀i. Per dare una risposta é necessario porre alcune ipotesi di regolaritá sulla f . Teorema n+1 Sia f (x) ∈ C[a,b] ossia f continua con tutte le sue derivate fino a quella di ordine n + 1. Sia [a, b] un intervallo di R limitato e chiuso contenente le ascisse distinte xi . Sia x̂ ∈ [a, b] un punto qualsiasi, distinto dagli xi . Esiste allora un punto ξ ( dipendente da x̂) interno ad [a, b] per cui: ω(x̂) n+1 f (ξ) R(x̂) := f (x̂) − p(x̂) = (n + 1)! con ω(x) = (x − x0 )(x − x1 ) . . . (x − xn ) = Πnk=0 (x − xk ). Corollario Si indichi con Mn+1 = max |f n+1 (x)| x∈[a,b] allora un limite superiore ad R(x) = f (x) − p(x) é dato da |R(x)| = |ω(x)| Mn+1 . (n + 1)! Esempio n+1 f (x) = ex , f ∈ C[a,b] , si ha: Mn+1 = max |ex | = eb x∈[a,b] Inoltre per ogni scelta delle ascisse xi ∈ [a, b] vale |ω(x)| = |(x − x0 )(x − x1 ) . . . (x − xn−1 )(x − xn )| ≤ (b − a)(b − a) . . . (b − a) = (b − a)n+1 Pertanto max |R(x)| ≤ x∈[a,b] ma in questo caso (b − a)n+1 b e (n + 1)! (b − a)n+1 b e =0 n→∞ (n + 1)! lim max |R(x)| = lim n→∞ x∈[a,b] quindi in altre parole lim |p(x) − f (x)| = 0 n→∞ Il polinomio p di interpolazione converge uniformemente ad f su [a, b] quando il numero n di punti xi di interpolazione tende a ∞. 2011/01/12 15 Estrapolazione L’espressione dell’errore R(x) evidenzia come nel caso di estrapolazione x̂ ∈ / [a, b] := [min xi , max xi ] i i l’errore R(x) puó aumentare notevolmente, assieme a |ω(x̂)|. Errori nell’interpolazione, limitazioni dell’errore, convergenza e punti di Chebyshev Nella trattazione del problema di interpolazione sino ad ora abbiamo trattato le ordinate yi dei punti di interpolazione (xi , yi ) come numeri arbitrari. Assumiamo che soddisfino la relazione f (xi ) = yi dove f abbia tutte le derivate necessarie. Quindi si dice che il polinomio p(x) calcolato interpola la f in x0 , x1 , . . . , xn . Tale polinomio viene spesso costruito per trovare una approssimazione della f piú semplice da trattare é naturale considerare la seguente espressione dell’errore: R(x) = f (x) − p(x) in seguito assumiamo che la variabile x non assuma valori uguali a x0 , x1 , . . . , xn ( perché in questi punti l’errore é zero). Aumentando il numero di punti di interpolazione aumenta in corrispondenza il grado del polinomio, al crescere quindi di n la successione {pn (x̂)} ∞ puó non convergere ad f (x̂) puó capitare anche nel caso in cui f ∈ C[a,b] Consideriamo la seguente funzione di Runge f (t) = 1/(1 + t2 ) se interpolata con punti equispaziati nell’intervallo [−5, 5] l’interpolante diverge in corrispondenza degli estremi dell’intervallo. Si puó dimostrare che al crescere di n la successione dei polinomi di interpolazione {p(n } costruiti sulle ascisse equidistanti: xi = i 10 − 1, n i = 0, 1, . . . , n non converge alla funzione di Runge, perché gli errori diventano arbitrariamente grandi specialmente nei punti vicino agli estremi dell’intervallo. Quindi imporre la regolaritá sulla f non é sufficiente a garantire la convergenza dell’interpolazione. Se si considerano come ascisse di interpolazione gli n + 1 zeri del polinomio di Chebyshev di grado n rispettivamente: xi = cos( (2i+1)π 2(n+1) ) ∈ [−1, 1] i = 0, 1, . . . , n oppure (2i+1)π b−a xi = a+b 2 − 2 cos( 2(n+1) ) ∈ [a, b] i = 0, 1, . . . , n Con questa distribuzione delle ascisse xi si dimostra che, al crescere di n → ∞, il polinomio pn (x) di interpolazione converge a f (x) quando x ∈ [a, b]. 2011/01/12 16 interpolazione funzione di Runge punti equidistanti interpolazione funzione di Runge punti equidistanti 1 2 1.5 0.5 1 0.5 0 0 −0.5 −5 −4 −3 −2 −1 0 1 grado del polinomio 6 2 3 4 5 −0.5 −5 −4 −3 −2 −1 0 1 grado del polinomio 10 2 3 4 5 Questo comportamento é dovuto al polinomio ω(x) = (x − x0 )(x − x1 ) . . . (x − xn ) che compare nell’espressione dell’errore che assume valori di picco agli estremi dell’intervallo. L’errore di interpolazione puó essere limitato se si scelgono i punti di interpolazione in modo che | max ω(x)| x∈[a,b] sia minimo. I punti di Chebyshev sono un tentativo di aggiustare i punti di interpolazione interpolazione funzione di runge interpolazione funzione di runge 1 1 0.5 0.5 0 0 −0.5 −5 −4 −3 −2 −1 0 1 grado del polinomio 6 2 3 4 5 poli. di grado 6 interpolante nei punti di Chebyshev evidenziati −0.5 −5 −4 −3 −2 −1 0 1 grado del polinomio 10 min max |ω(x)| = (b − a)−n ω(x) x∈[a,b] e il minimo é raggiunto quando (2i + 1)π a+b b−a − cos( ) ∈ [a, b] i = 0, 1, . . . , n 2 2 2(n + 1) che sono i punti di Chebyshev. 3 4 5 poli. di grado 10 interpolante nei punti di Chebyshev evidenziati Si puó dimostrare che xi = 2 2011/01/12 17 5 5 grafico della funzione omega grafico della funzione omega x 10 equi. chebychev 4000 equi. chebychev 4 3000 3 2000 2 1000 1 0 0 −1 −1000 −2 −2000 −3 −3000 −4 −4000 −5 −4 −3 −2 −1 0 1 grado del polinomio 6 2 3 4 5 funzione ω per polinomi di grado 6 −5 −5 −4 −3 −2 −1 0 1 grado del polinomio 10 2 3 4 5 funzione ω per polinomi di grado 10 interpolazione funzione di runge 11 1 1.5 grafico della funzione omega x 10 equi. chebychev 0.9 1 0.8 0.7 0.5 0.6 0.5 0 0.4 −0.5 0.3 0.2 −1 0.1 0 −5 −4 −3 −2 −1 0 1 grado del polinomio 20 2 3 4 5 Poli. di grado 20 interpolante nei punti di Chebyshev evidenziati −1.5 −5 −4 −3 −2 −1 0 1 grado del polinomio 20 2 3 4 funzione ω per polinomi di grado 20 Sfortunatamente ci sono funzioni per cui l’interpolante nei punti di Chebyshev non converge e occorre cambiare strategia. 5 2011/01/12 18 Interpolazione polinomiale a tratti Si intende l’interpolazione di un set di dati su un intervallo con più polinomi ciascuno dei quali definito in un sottointervallo dell’intervallo dato. In particolare siano assegnate m + 1 osservazioni in corrispondenza di m + 1 punti distinti e ordinati, cioè siano assegnati (xi , yi ), i = 0, . . . , m con xi < xi+1 . Allora una interpolante polinomiale a tratti consiste in m polinomi pi (x), i = 0, . . . , m − 1 di grado n, definiti sugli intervalli [xi , xi+1 ] con le seguenti proprietà: • pi−1 (xi ) ≡ pi (xi ) = yi i = 1, . . . , m − 1 • fissato k ≤ n − 1, non negativo, deve valere (`) (`) pi−1 (xi ) ≡ pi (xi ), ` = 1, . . . , k, i = 1, . . . , m − 1 Si dirà che l’interpolante a tratti è di classe C k intendendo che è una funzione continua fino alla derivata di ordine k. Polinomi a tratti Abbiamo osservato che i polinomi hanno un comportamento inaccettabile quando vengono utilizzati per approssimare dati o funzioni. Quando superano il quinto o sesto grado oscillano fortemente su intervalli di definizione grandi, mentre hanno un buon comportamento se di grado basso e su intervalli piccoli. Questo fenomeno suggerisce di utilizzare polinomi di grado relativamente basso e suddividere l’intervallo in piccole parti. Si puó dare la seguente definizione: Definizione: Polinomio a Tratti Sia [a, b] un intervallo limitato e chiuso e sia ∆ la partizione dell’intervallo [a, b] data da: ∆ = {xi }i=0,...,m su un insieme di punti , detti nodi, tali che: a = x0 < x1 < . . . < xm = b La partizione di [a, b] indotta dall’insieme ∆ risulta • I0 = [x0 , x1 ] • Ii = [xi , xi+1 ] i = 1, . . . , m − 1 • Im = [xm−1 , xm ] Indichiamo con Pn lo spazio dei polinomi a coefficienti reali di ordine al piú n, definiamo lo spazio dei polinomi a tratti: T Pn = {ϕ | ∃p0 , p1 , . . . pm ∈ Pn ; tale cheϕ(x) = pi (x), ∀x ∈ Ii , i = 0, 1, . . . , m} Esempio Consideriamo il polinomio a tratti di grado 1 che interpola la funzione di Runge f (x) = 1 nei 7 nodi equidistanti assegnati in figura 1+x2 Si osserva che utilizzando i polinomi a tratti si é guadagnato in flessibilitá, ma si é perso in regolaritá: l’interpolante non ha piu’ la derivata prima continua. In molte applicazioni si richiede che la funzione approssimante sia almeno di classe C 1 . 2011/01/12 19 interpolazione a tratti con polinomi lineari 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 −5 −4 −3 −2 −1 0 1 2 3 4 5 Interpolazione locale Per interpolazione locale si intende un metodo che individua il polinomio interpolante a tratti determinando ogni singolo polinomio pi (x) in modo indipendente dagli altri. Consideriamo il caso particolare di polinomi a tratti cubici, con regolarità C 1 ; i singoli polinomi cubici pi (x) possono essere espressi nella base di Bernstein e determinanti in modo da interpolare le ordinate yi e yi+1 in corrispondenza di xi e xi+1 sull’intervallo 0 [xi , xi+1 ] e i valori di derivata yi0 e yi+1 sempre in corrispondenza di xi e xi+1 . In questo caso si parla di interpolanti cubiche di Hermite. I metodi di interpolazione locale fanno uso delle derivate yi0 in corrispondenza dei punti assegnati xi . Se queste non sono date, devono essere calcolate e diventano parte integrante del problema di interpolazione. Interpolazione globale Per interpolazione globale si intende un metodo che determina il polinomio a tratti interpolante ricavando ciascun polinomio pi (x) in modo dipendente dagli altri. Nel caso particolare di polinomi a tratti cubici con massima regolarità C 2 si parla di Spline cubiche di Interpolazione. Lo spazio delle funzioni Spline polinomiali di grado n può essere sinteticamente scritto come : (n−1) Sn (∆) = T Pn (∆) ∩ C[a,b] Questa condizione implica che ogni elemento di Sm (∆) é sufficientemente flessibile, perché si hanno funzioni continue e derivabili con continuitá sino all’ordine n − 1 che é la massima regolaritá che si puó richiedere ai polinomi a tratti di grado m-1. Consideriamo le funzioni Spline cubiche. Riassumendo: siano x0 < x1 < x2 < . . . < xm punti dati detti nodi , una Spline Cubica é una funzione S(x), definita sull’intervallo [x0 , xm ] con le seguenti proprietá: • é una funzione con derivate prime e seconde continue • ristretta ad ogni intervallo Ii é un polinomio di grado 3 • S(xj ) = f (xj ), per j = 0, 1, 2, . . . , m 2011/01/12 20 1 0.9 0.8 0.7 S S 0 0.6 S 1 m−2 Sm−1 0.5 0.4 x 0 x1 xm−1 x m x2 0.3 0.2 0.1 0 0 0.2 0.4 0.6 0.8 1 Se poniamo S(x) = si (x) per xi ≤ x ≤ xi+1 , gli si (x) saranno m polinomi cubici del tipo si (x) = ai + bi x + ci x2 + di x3 per x ∈ [xi , xi+1 ], i = 0, 1, . . . , k per ciascuna cubica occorrono 4 condizioni quindi in totale 4m condizioni per determinare tutti i coefficienti. Ogni polinomio interpola la f negli estremi del proprio intervallo. Questo dá 2m condizioni. Le condizioni di continuitá delle drivate nei nodi interni rispettivamente: • s0i−1 (xi ) = s0i (xi ) per i = 1, 2, . . . , m − 1 • s”i−1 (xi ) = s”i (xi ) sono altre 2(m − 1) condizioni. In tutto si hanno 2m + 2(m − 1) = 4m − 2 condizioni per detereminare i 4m coefficienti. Le restanti due condizioni vengono scelte fra: 0 , con y 0 e y 0 assegnati dall’utente Spline con derivate 1. s00 (x0 ) = y00 e s0m−1 (xm ) = ym m 0 agli estremi, 2. s”(x0 ) = s”(xm ) = 0 Spline di Interpolazione Naturali 3. s0 (x0 ) = sm (xm ), s0 (x0 ) = s0 (xm ) e s”(x0 ) = s”(xm ) Spline di Interpolazione periodiche (si usano quando y0 = ym , cioe’ quando si vogliono interpolare curve chiuse o periodiche). In alternativa alla seconda condizione, si puó richiedere che la derivata terza di S(x) nei nodi x0 e xm sia continua. Questa condizione a cui viene attribuito il nome not-a-knotcondition é quella implementata nel comando Matlab spline ( si veda anche il toolbox Splines). Per determinare i coefficienti ai , bi , ci , di si potrebbe al solito usare tutte le condizioni elencate per ricavare un sistema avente come incognite i coefficienti e risolverlo, ma non é il modo piú efficiente. Un metodo efficiente si ottiene prendendo come incognite i momenti cioé le derivate seconde nei nodi xi Mi = S”3 (xi ) essendo ogni S”(x) una spline del primo ordine cioé una funzione lineare a tratti avremo S”(x) = (x − xi−1 )Mi + (xi − x)Mi−1 xi − xi−1 x ∈ [xi−1 , xi ] Posto hi = (xi − xi−1 ) integrando due volte nell’intervallo [xi−1 , xi ]si ha S 0 (x) = (x − xi−1 )2 Mi − (xi − x)2 Mi−1 + Ci 2hi x ∈ [xi−1 , xi ] 2011/01/12 21 e (x − xi−1 )3 Mi + (xi − x)3 Mi−1 + Ci (x − xi−1 ) + Di 6hi S(x) = x ∈ [xi−1 , xi ] imponendo le condizioni di interpolazione si (xi ) = si−1 (xi ) si ottengono i parametri Ci e Di in funzione dei momenti Mi piú precisamente (xi −xi−1 )3 Mi−1 + Di = yi − 1 6hi (xi −xi−1 )3 Mi + Ci (xi − xi−1 ) + 6hi i = 1, . . . , m Di = yi da cui si ricava Di = yi−1 − h2i Mi−1 , 6 Ci = (Mi − Mi−1 ) (yi − yi−1 ) − hi hi 6 infine sostituendo nella S 0 (x) si ottiene per x ∈ [xi−1 , xi ] S 0 (x) = Mi − Mi−1 (x − xi−1 )3 Mi + (xi − x)3 Mi−1 yi − yi−1 + − hi 6hi 2hi 6 Imponendo la continuitá di S 0 (x) nei nodi (rispettivamente s0i (xi ) = s0i−1 (xi )) per i = 1, . . . , m − 1 si ha ¶ µ hi Mi−1 + 2(hi + hi+1 )Mi + hi+1 Mi+1 yi+1 − yi yi − yi−1 − . =6 hi+1 hi Tenendo conto che per le spline naturali M0 = Mm = 0 si ottiene un sistema di equazioni lineari nelle m − 1 incognite M1 , M2 , . . . Mi−1 la cui matrice dei coefficienti é 2(h1 + h2 ) h2 ... 0 h 2(h2 + h3 ) ... 0 2 .. .. .. . . . 0 . .. . . . hm−1 0 ... hm−1 2(hm−1 + hm ) La risoluzione di questo sistema comporta un costo computazionale dell’ordine di 3n moltiplicazioni. Si osservi che nel caso in cui hi ≡ 1 ∀i il sistema si semplifica in 4 1 1 4 0 1 ... 0 ... 0 0 ... 0 1 0 ... 0 4 1 ... 0 0 0 1 4 D’ora in poi per calcolare una spline utilizzeremo il comando MATLAB spline(x,y,z) i parametri di ingresso di questa function sono i vettori x e y dei nodi di interpolazione ed il vettore z delle ascisse nelle quali si vuole che venga valutata la spline. Le curve spline sono usate in numerose applicazioni industriali e sono alla base dei moderni sistemi CAD, il vantaggio di usare una spline è di fornire movimenti regolari evitando bruschi cambi di velocità e accelerazione se regolare sino alla derivata seconda. Riprendiamo l’esercizio riguardante l’interpolazione della funzione di Runge: f (x) = . 1 x2 + 1 2011/01/12 22 Interpolazione mediante spline cubica naturale della funzione Runge con 19 punti di interpolazione 1 0.9 0.8 0.7 Funzione Runge Spline cubica interpolante Punti di interpolazione 0.6 0.5 0.4 0.3 0.2 0.1 0 −5 Figure 1: −4 −3 −2 −1 0 1 2 3 4 5 Interpolazione della funzione di Runge con una spline cubica naturale su una partizione contenente 19 punti nell’intervallo [−5; 5]. Interpolazione con il polinomio di grado 6 sui 7 punti equidistanti della funzione di 1 Runge f (x) = 1+x 2 definita sull’intervallo [−5, 5] interpolazione funzione di Runge punti equidistanti Interpolazione mediante spline cubica naturale della funzione Runge con 7 punti di interpolazione 1 1 0.9 0.8 0.7 0.5 Funzione Runge Spline cubica interpolante Punti di interpolazione 0.6 0.5 0.4 0 0.3 0.2 0.1 −0.5 −5 −4 −3 −2 −1 0 1 grado del polinomio 6 2 3 4 5 0 −5 −4 −3 −2 −1 0 1 2 3 4 5 . Interpolazione della funzione di Runge con una spline cubica naturale su una partizione nodale di 7 punti equidistanti nell’intervallo [−5; 5]. Interpolazione mediante spline cubica naturale della funzione Runge con 11 punti di interpolazione 1 interpolazione funzione di Runge punti equidistanti 2 0.9 Funzione Runge Spline cubica interpolante Punti di interpolazione 0.8 1.5 0.7 0.6 1 0.5 0.4 0.5 0.3 0 0.2 0.1 −0.5 −5 −4 −3 −2 −1 0 1 grado del polinomio 10 2 3 4 5 0 −5 −4 −3 −2 −1 0 1 2 3 4 [Interpolazione della funzione di Runge con una spline su 11 punti]Interpolazione della funzione di Runge con una spline cubica naturale su una partizione nodale di 11 punti nell’intervallo [−5; 5]. 5 2011/01/12 N.punti 23 maxx |R(x)| N.punti maxx |R(x)| 11 0.02193 12 0.08382 21 0.00318 22 0.00802 31 0.00084 32 0.00131 41 0.00063 42 0.00061 In tabella è riportato l’errore massimo per l’interpolazione polinomiale cubica a tratti C 2 della funzione di Runge su punti equidistanti. Esempio Nella tabella seguente sono riportate le variazioni di temperatura media annua del globo al variare della concentrazione K di acido carbonico e della latitudine: latitudine 65 55 45 35 25 15 5 -5 -15 -25 -35 -45 -55 K=0.67 -3.1 -3.22 -3.3 -3.32 -3.17 -3.07 -3.02 -3.02 -3.12 -3.2 -3.35 -3.37 -3.25 K=1.5 3.52 3.62 3.65 3.52 3.47 3.25 3.15 3.15 3.2 3.27 3.52 3.7 3.7 K=2.0 6.05 6.02 5.92 5.7 5.3 5.02 4.95 4.97 5.07 5.35 5.62 5.95 6.1 K=3.0 9.3 9.3 9.17 8.82 8.1 7.52 7.3 7.35 7.62 8.22 8.8 9.25 9.5 Le tecniche di approssimazione previste consentono di ricostruire a partire dai dati disponibili i valori della temperatura anche per latitudini o concentrazioni non previste dalla tabella stessa. Consideriamo la colonna K = 0.67 e calcoliamo la spline cubica interpolatoria S3 . Per ottenere le valutazioni di S3 in corrispondenza dei valori zi = −55 + i, i = 0, . . . , 120 occorre dare le seguenti istruzioni: À x = [−55 : 10 : 65]; À y = [−3.25, −3.37, −3.35, −3.2, −3.12, −3.02, −3.02, ... −3.07, −3.17, −3.32, −3.3, −3.22, −3.1] À z = [−55 : 1 : 65]; s = spline(x, y, z) Si noti l’uso dei tre punti di continuazione tramite i quali si informa Matlab che la riga contenete l’istruzione continua. La linea tratteggiata é il grafico del polinomio interpolatore di grado 12. Errore di interpolazione La teoria dell’errore nell’approssimazione spline è più complessa di quella relativa all’ordinaria interpolazione a tratti, qui illustriamo i risultati principali: Teorema 2 Fra tutte le funzioni g(x) ∈ C[a,b] tali che g(xi ) = f (xi ) per i = 0, . . . , n (cioè soddisfano le condizioni di interpolazione), la spline naturale s(x) è quella che minimizza l’integrale Z b a [g”(x)]2 dx L’integrale può essere assunto come una misura della curvatura globale della funzione g(x), quindi risulta che la spline cubica naturale è quella che minimizza la curvatura globale. Si ricorda che la curvatura descritta dall’equazione y = f (x) 2011/01/12 24 −2.7 pol.12 grad0 nodi spline cubica −2.8 −2.9 −3 −3.1 −3.2 −3.3 −3.4 −3.5 −60 −40 −20 0 20 40 60 80 è data da: |f ”(x)| · {1 + f 0 (x)2 }−3/2 quindi se f 0 (x) è sufficientemente piccolo, f ”(x) risulta una approssimazione della curvatura e l’operazione di integrazione risulta una misura di quanto oscilla la funzione. Quando non si conosce nulla circa la f (x), la scelta della spline not a knot condition implementata sotto Matlab è la migliore. Il nome indica che il primo e l’ultimo nodo interno x1 , xm−1 non si comportano come nodi normali infatti se richiediamo la continuità della s3 (x) in quei punti troviamo che i primi due tratti cubici sono identici analogamente per gli ultimi due, le due condizioni di continuitá equivalgono ad eliminare i nodi x2 e xm−1 dalla suddivisione mantenedo comunque le condizioni di interpolazione.Per tale motivo tali consizioni sono note come not a knot condition e fornisce una esemplificazione del fatto che nel caso di funzioni polinomiali a tratti i punti della suddivisione non coincidono necessariamente con i nodi dell’interpolazione. 2 Dal teorema sopra esposto segue anche che se f (x) ∈ C[a,b] allora Z b a 2 [S”(x)] dx ≤ Z b a [f ”(x)]2 dx a differenza di quanto accade per i polinomi che interpolano la f (x) su tutto l’intervallo [a, b] quando si infittiscono i nodi xi , i = 0, . . . , n le funzioni spline convergono alla f (x) . Nell’ipotesi in cui la f (x) abbia derivate continue sino a quella del quart’ordine vale la sequente disuguaglianza max |f r (x) − sr3 (x)| ≤ Cr H 4−r max |f 4 (x)|, x∈I x∈I r = 0, 1, 2, 3 ove H è la masima ampiezza degli intervalli Ii e le costanti Cr sono indipendenti da H. È quindi evidente che non solo la funzione f , ma anche le sue derivate prima, seconda e terza vengono bene approssimata dalla S(x). 2011/01/12 25 Integrazione numerica L’integrazione numerica o quadratura numerica consiste nel calcolare un’approssimazione per Z b a f (x)dx Il problema sorge quando l’integrazione non puó essere eseguita esattamente, cioé non si puó trovare una funzione primitiva come per esempio per Z 1 0 e −x2 Z dx, o π 2 q 0 (1 + cos2 (x))dx. Anche nel caso in cui la si conosca, potrebbe essere complicato valutarla. Ad esempio 1 π Z π 0 ∞ (−9/4)4 3 X , cos(4π)cos(3sin(x))dx = ( )4 2 k=0 k!(k + 4)! in questo ultimo caso il problema del calcolo dell’integrale si é trasformato in quello della somma di una serie. Il calcolo numerico dell’integrale si utilizza quando la funzione integranda é nota soltanto in un numero finito di punti o scaturisce da misure sperimentali, o ancora anche se é nota la primitiva, ma il suo calcolo puó essere cosı́ costoso che é preferibile utilizzare un metodo numerico per determinare una approssimazione. In tutte queste situazioni e necessario approntare metodi numerici in grado di restituire un valore approssimato del calcolo dell’integrale. I metodi che vedremo consistono nell’approssimare o interpolare la funzione integranda mediante polinomi che risultano facilmente integrabili. 50 45 40 35 30 25 20 15 10 5 0 −3 −2 Figure 2: −1 0 f (x) = abs(x3 − 20) 1 2 per 3 x ∈ [−3, 3] L’approssimazione del valore dell’integrale con la formula del punto medio, anche detto metodo dei rettangoli, porta ad individuare l’area del rettangolo in figura. 2011/01/12 26 50 45 40 35 30 25 20 15 10 5 0 −3 −2 −1 0 1 2 (a+b)/2 a Figure 3: 3 b IP M (f ) = (b − a)f [(a + b)/2] Formule di quadratura interpolatorie Nella sua forma piú generale una formula di quadratura esprime un’approssimazione di un integrale come una combinazione lineare dei valori della funzione integranda cioé: Z b f (x)dx ≈ a n X ωi f (xi ) i=0 Sia Φ uno spazio di funzioni di dimensione n + 1 in cui sia sempre risolubile in modo unico un problema di interpolazione su n + 1 punti distinti xj , j = 0 : n nell’intervallo [a, b] , allora é possibile trovare una base di funzioni per tale spazio, chiamate funzioni CARDINALI, per cui vale ( 1 se i = j ϕi (xj ) = 0 se i 6= j Le funzioni cardinali risolvono il problema di interpolazione per i punti (xi , yi ), i = 0, 1, . . . , n, in modo banale, infatti la Φ(x) = n X yi ϕi (x) i=0 verifica le condizioni di interpolazione. Osservazione L’interpolante espressa nella base delle funzioni cardinali permette di esprimere banalmente la soluzione di un problema di interpolazione analiticamente, ma non computazionalmente. Considerando l’interpolante nella base cardinale si esprime semplicemente una formula di quadratura interpolatoria, considerando yi = f (xi ) Z b a allora Z b a = f (x)dx ' Φ(x)dx = n X i=0 f (xi ) Z bX n Z b a Z b a i=0 a Φ(x)dx f (xi )ϕi (x)dx = ϕi (x)dx = n X i=0 f (xi )ωi 2011/01/12 27 con ωi = Z b a ϕi (x)dx, i = 0, 1, . . . , n Nel caso in cui consideriamo come spazio delle funzioni Φ lo spazio dei polinomi Pn , le funzioni cardinali sono i polinomi elementari di Lagrange Li (x) = Πnj=0,j6=i (x − xj ) (xi − xj ) Formule di quadratura di Newton-Cotes Le formule di quadratura di Newton-Cotes si ottengono considerando n + 1 punti equidistanti nell’intervallo chiuso [a, b] dati da: xi = a + ih, i = 0, 1, . . . , n con h = b−a n per n > 0 e interpolando la funzione integranda mediante un polinomio p ∈ Pn nei punti (xi , f (xi )), i = 0, 1, . . . , n. Se p(x) é il polinomio interpolante nella forma di Lagrange si avrá Z b a f (x)dx ' Z b a p(x)dx = n X f (xi ) Z b i=1 a Li (x)dx Quindi si procede all’integrazione dei polinomi Li (x), i = 0, 1, . . . , n per determinare i coefficienti ωi della formula di quadratura. Nell’integrare i polinomi elementari si esegue un cambiamento di variabile di integrazione, la nuova variabile t é tale che x = a + ht con t ∈ [0, n], poiché xi = a + ih, xj = a + jh e dx = hdt avremo: Z b Z b (x − xj ) dx Li (x)dx Πnj=0,j6=i (x a a i − xj ) = Z n 0 Πnj=0,j6=i =h Z n 0 (a + ht − a − hj) hdt (a + hi − a − hj) Πnj=0,j6=i t−j dt i−j Osserviamo allora che i coefficienti ωi (anche detti pesi) sono dati da: ωi = Z n 0 Πnj=0,j6=i t−j dt i−j dipendono solo da n, non dipendono dalla funzione f che deve essere integrata e nemmeno dagli estremi a e b dell’intervallo di integrazione. Le formule di Newton-Cotes piú comunemente usate sono quelle per • n=1, Formula dei Trapezi • n=2, Formula di Simpson Ricaviamo queste formule Formula dei Trapezi: n=1 ω0 = Z 1 t−1 0 0−1 dt = Z 1 0 (1 − t)dt = [t − t2 1 ]= 2 2 2011/01/12 28 ω1 = da cui si ottiene Z b Z 1 t−0 0 1−0 f (x)dx ' a Z b a dt = Z 1 0 tdt = [ p(x)dx = t2 1 ]= 2 2 h (f (a) + f (b)) 2 La funzione f (x) é approssimata da una retta passante per i punti (x0 , f (x0 ) e (x1 , f (x1 ); cioé l’integrale é approssimativamete dato dall’area del Trapezio abs(xf.3−20) 50 45 40 35 30 25 20 15 10 5 0 −3 −2 −1 0 1 2 3 Formula di Simpson: n=2 ω0 = Z 2 (t − 1) (t − 2) 0 1 dt = (0 − 1) (0 − 2) 2 Z 2 0 (t2 − 3t + 2)dt = 1 8 12 1 1 t3 t2 [ − + 2t]20 = ( − + 4) = 2 3 2 2 3 2 3 Z 2 Z 2 (t − 0) (t − 2) ω1 = dt = − (t2 − 2t)dt = 0 (1 − 0) (1 − 2) 0 ω2 = da cui Z 2 0 Z b a 8 4 = −( − 4) = 3 3 Z 2 (t − 0) (t − 1) 1 1 8 4 1 dt = (t2 − t)dt = ( − ) = (2 − 0) (2 − 1) 2 0 2 3 2 3 f (x)dx ' Z b a p(x)dx = h (f (x0 ) + 4f (x1 ) + f (x2 )) 3 La funzione f é approssimata da una parabola passante per (x0 , f (x0 ), (x1 , f (x1 ), (x2 , f (x2 ) Esempio Applichiamo la formula dei Trapezi e di Simpson al calcolo approssimato dell’integrale di Z 1 0 2 e−x dx Il valore esatto alle prime 6 cifre significative é 0.746824. • Trapezi Z 1 0 2 e−x dx ' h 0 1 (e + e−1 ) = (1 + 0.367879) = 0.683939 2 2 2011/01/12 29 here 50 45 40 35 30 25 20 15 10 5 0 −3 • Simpson in questo caso h = b−a 2 −2 = 0 1 2 3 1 2 Z 1 0 −1 2 e−x dx ' h 0 (e + 4e−1/4 + e−1 ) = 3 1 (1 + 4 × 0.778801 + 0.367879) = 0.747180 6 2 2 y=exp(−x. ) y=exp(−x. ) −− Simpson −− 1 1 0.9 0.9 0.8 0.8 0.7 0.7 0.6 0.6 0.5 0.5 0.4 0.4 0.3 0.3 0.2 0.2 0.1 0.1 0 −1.5 −1 −0.5 0 0.5 1 1.5 0 −1.5 −1 −0.5 0 0.5 1 1.5 Errore di Integrazione o grado di precisione di una formula di quadratura Sia In una formula di quadratura che assumiamo essere esatta per ogni polinomio di grado ≤ q allora diciamo che In ha grado di precisone q. Il metodo dei trapezi é una formula di quadratura con grado di precisione q = 1 cioé integra esattamente polinomi di primo grado. Z b h f (x)dx = (f (x0 ) + f (x1 )) + RT 2 a Z b h f (x)dx = (f (x0 ) + 4f (x1 ) + f (x2 )) + RT 3 a Dal teorema che fornisce l’errore di interpolazione polinomiale si ha che l’errore di integrazione RT = Z b a (x − x0 )(x − x1 ) . . . (x − xn ) f n+1 (ξ) dx (n + 1)! Nei casi particolari per n = 1 si ha: • Errore nella formula dei Trapezi n=1 RT = − 1 3 h f ”(η) 12 η ∈ [a, b] 2011/01/12 30 Dall’osservazione della formula dell’errore nel caso n = 1 si nota che il metodo dei Trapezi é una formula di quadratura esatta per polinomi di grado ≤ 1, infatti la derivata seconda di questi polinomi si annulla identicamente, e analogamnete la formula per n = 2 indica che il metodo di Simpson sicuramente é esatta per polinomi di grado ≤ 2 cioé per polinomi di grado due perché hanno derivata terza nulla. Si dimostra peró che la formula di Simpson é esatta anche per polinomi di terzo grado cioe’ il grado di precisione é q ≤ 3. dimostrazione nel caso n=1 RT = Z b a (x − a)(x − b) f ”(ξ(x)) dx (2)! ove ξ(x) ∈ [a, b]. Facciamo un cambiamento di variabile di integrazione, x = a + th; [0, 1] Z 1 f ”(ξ(a + th)) dt RT = h (a + th − a)(a + th − a − h) (2)! 0 t∈ Z h3 1 = t(t − 1)f ”(ξ(a + th))dt 2 0 applichiamo il teorena del valor medio per il calcolo dell’integrale: Teorema Se f (x) é una funzione continua, e g(x) é continua e non cambia segno nell’intervallo R R [a, b], allora esiste un punto ξ ∈ [a, b], tale che ab f (x)g(x)dx = f (ξ) ab g(x)dx osserviamo che la parte t(t − 1) in [0, 1] non cambia segno, e se assumiamo che f ” sia continua, allora Z 1 h3 h3 RT = f ”(ξ(a + th)) t(t − 1)dt = − f ”(η) 2 12 0 dove abbiamo posto η = ξ(a + th). dimostrazione nel caso n=2 Per n=2 si ha la formula si Simpson che ha grado di precisione q = 3 cioé integra esattamente polinomi di terzo grado. Infatti se consideriamo un polimnomio p3 (x) lo possiamo scrivere nella forma p3 (x) = Ax3 + p2 (x) Z b a p3 (x)dx = A Z b a x3 dx + Z b a p2 (x)dx sappiamo che per sua natura integra esattamente polinomi di secondo grado. Misuriamo allora l’errore di integrazione di questa formula di quadratura: I(p3 ) − S2 (p3 ) = A[I(x3 ) − S2 (x3 )] + [I(p2 ) − S2 (p2 )] sappiamo che Simpson integra in modo esatto la parte quadratica del polinomio p3 , quindi la precisione risulta di grado 3 se integra in modo esatto x3 , verifichiamolo: S2 (x3 ) = h 3 a+b 3 b−a 3 1 [a + 4( ) + b3 ] = [a + (a + b)3 + b3 ] = 3 2 6 2 b−a 3 1 b−a 3 [2a + (a + b)3 + 2b3 ] = 3[a + a2 b + ab2 + b3 ] = [b4 − a4 ] = I(x3 ) 12 12 4 Quindi il metodo di quadratura di Simpson integra in modo esatto polinomi di terzo grado Rb IV p (x)dx = S2 (p3 ). Vale inoltre la seguente stima dell’errore di integrazione: se f ∈ C[a,b] a 3 allora esiste un punto η ∈ [a, b] tale che = RT = − 1 5 IV h f (η) 90 η ∈ [a, b] 2011/01/12 31 Osservazione Se con s si indica il denominatore comune per i coefficienti frazionari ωi e indichiamo con σi = sωi , i = 0, 1, . . . , n i conseguenti numeri interi, allora la formula di Newton-Cotes si puó riscrivere come: Z b b−aX f (x)dx ' σi f (xi ) ns i=0 a La seguente tabella riporta i coefficienti per le formule di newton-Cotes per n = 1, . . . , 8; si osservi che σi = σn−i per i = 0, . . . , n/2, per n ≥ 8 alcuni coefficienti assumono valori negativi. n σi ns Errore nome 1 2 3 4 5 6 7 8 1,1 1, 4, 1 1, 3, 3, 1 7, 32, 12, 32, 7 19, 75, 50, 50, 75, 19 41 216 27 272. . . 751 3577 1323 2989 . . . 989 5888 -928 10496 -4540 . . . 2 6 8 90 288 840 17280 28350 −1/12h3 f ”(η) −1/90h5 f IV (η) −3/80h5 f IV (η) −8/945h7 f V I (η) . . . h7 f V I (η) . . . h9 f V III (η) . . . h9 f V III (η) . . . h11 f X (η) Trapezi Simpson Cavalieri-Simpson Milne Weddle 2011/01/12 32 here 73.0693 50 45 40 trapezi composito 35 30 25 20 15 10 5 0 −3 −2 −1 0 72.7344 1 2 3 Formule composite Consistono nel suddividere l’intervallo [a, b] in sottointervalli in genereale di uguale ampiezza [xi , xi+1 ] per i = 0, 1, . . . , m − 1, e in ciascuno di essi applicare una formula di quadratura di grado basso. Formula composita dei Trapezi Se si usa la formula dei Trapezi sul sottointervallo [xi , xi+1 ] si ottiene: Z xi+1 xi f (x)dx = h3 h [f (xi ) + f (xi+1 )] − f ”(ηi ) 2 12 3 con h = xi+1 − xi e xi < ηi < xi+1 . L’errore di troncamento − h12 f ”(ηi ) é detto errore locale di trocamento Per l’intervallo [a, b] suddiviso in m sottointervalli si ottiene Z b a f (x)dx = m−1 X Z xi+1 i=0 xi f (x)dx = 1 1 = h( f (x0 ) + f (x1 ) + f (x2 ) + . . . + f (xm−1 ) + f (xm )) + RT 2 2 L’errore di troncamento globale RT é dato dalla somma degli errori locali cioé RT = − X h3 m−1 f ”(ηi ) 12 i=0 si noti che b − a = mh, e perció RT = − b−a 2 h 12 Pm−1 i=0 f ”(ηi ) m Se f ” é continua in [a, b], allora esiste un η in questo intervallo, tale che X 1 m−1 f ”(ηi ) = f ”(η) m i=0 da cui l’errore di troncamento totale per la formula dei Trapezi composita risulta − b−a 2 h f ”(η). 12 In particolare si osservi che aumentando m poiché h = lim RT = 0 h→0 b−a m il valore di h diminuisce anzi 2011/01/12 33 here 73.0693 50 45 40 Simpson composito 35 30 25 20 15 10 5 0 −3 −2 −1 0 72.7344 1 2 3 perció piú é fine la suddivisione dell’intervallo e migliore risulta l’approssimazione dell’integrale. Formula composita di Simpson Se m = 2k, cioé l’intervallo [a, b] é suddiviso in un numero pari di sottointervalli, allora l’integrale in ogni sottointervallo [x2i , x2i+2 ] puó essere calcolato con la formula di Simpson Z x2i+2 x2i f (x)dx = h [f (x2i ) + 4f (x2i+1 ) + f (x2i+2 )] 3 − con h = (x2i+2 −x2i ) 2 h5 IV f (ηi ) 90 e x2i < ηi < x2i+2 . Per l’intero intervallo [a, b] si ottiene Z b a f (x)dx = k−1 X Z x2i+2 i=0 x2i f (x)dx = h [f (x0 ) + 4f (x1 ) + 2f (x2 ) + . . . 3 +2f (x2i ) + 4f (x2i+1 ) + 2f (x2i+2 ) + . . . + +4f (x2k−1 ) + f (x2k ) + RT dove RT = − X h5 k−1 f IV (ηi ) 90 i=0 Per le stesse argomentazioni usate per la formula dei Trapezi, l’errore si puó scrivere RT = − b − a 4 IV h f (η) 180 dove η ∈ [a, b], sotto la condizione che f 4 sia continua in [a, b]. Esempio Si calcola Z 1 1 dx 0 1+x usando le formule composite dei Trapezi e di Simpson. Scegliamo h = 1, .5, .25, 0.125 e confrontiamo i risultati con il valore esatto log 2 ' 0.693147 Si ottiene 2011/01/12 m h 34 T(h) abs(T(h)-log(2)) S(h) abs(S(h)-log2) 1 1 0.750000 0.056853 2 0.5 0.708333 0.015186 0.694444 0.001297 4 0.25 0.697024 0.003877 0.693254 0.000107 8 0.125 0.694122 0.000975 0.693155 0.000008 Si noti che per la formula dei Trapezi poiché RT = O(h2 ), l’errore T(h)-log(2) dovrebbe essere diviso per un fattore 4 quando h si dimezza; analogamente per Simpson essendo RT = O(h4 ), l’errore S(h)-log2 dovrebbe essere diviso per 16 quando h si dimezza; i valori in tabella rispecchiano questo andamento. Esercizio Si determini il passo da utilizzare nella formula dei Trapezi composita, affinché la stima dell’integrale Z 1 1 dx (x + 1) 0 sia approssimata alla tolleranza 0.5 × 10−2 . Formule Adattive Il passo di integrazione h di una formula di quadrature puó essere scelto in modo da garantire che l’errore sia inferiore ad una tolleranza ² > 0 prestabilita. Indichiamo con IA il valore approssimato calcolato dell’integrale si vuole | Z b a f (x)dx − IA | ≤ ² Occorre stabilire un criterio per determinare la stima dell’errore di integrazione, esistono due approcci uno non adattativo e uno adattivo. In un approccio non adattivo i punti in cui si valuta la funzione f (x) sono scelti senza tener conto del comportamento della funzione integranda. In questo caso se usassimo la formula di Simpson composita basterebbe richiedere che b−a 4 h maxx∈[a,b] |f IV (x)| < ², 180 dove f 4 indica la derivata quarta. Quindi basterebbe scegliere h sufficientemente piccolo in modo da compensare l’apporto della derivata quarta. D’altra parte se f 4 in valore assoluto fosse grande solo in una piccola porzione dell’intervallo di integrazione si corre il rischio di eseguire troppe valutazioni della f anche nelle parti in cui la funzione ha un comportamento lineare. In un approccio adattivo si utilizza una distribuzione non uniforme dei sotto-intervalli nell’intervallo [a, b] in modo da garantire la stessa accuratezza della formula composita , ma con un numero inferiore di intervalli e quindi di valutazioni della f . A tal fine serviranno uno stimatore dell’errore di quadratura ed una procedura che modifichi il passo di integrazione h conseguentemenete al soddisfacimento della tolleranza richiesta. Si suddivide l’intervallo di integrazione in sottointervalli e si applica ricorsivamente a questi una formula di quadratura, sfruttando una stima di arresto. Nella prossima sezione vedremo una tecnica nota come estrapolazione di Richardson che deriva da un risultato piú generale da cui si puo estrarre una stima per l’errore di integrazione. Estrapolazione di Richardson E’ possibile determinare in modo automatico il numero m di sottointervalli in cui suddividere l’intero intervallo [a, b], per ottenere una stima accurata a meno di una certa tolleranza. Il procedimento si basa sulla possibilitá di stimare l’errore di integrazione RT . 2011/01/12 35 Ció puó essere fatto confrontando il valore dell’integrale ottenuto mediante la suddivisione in m sottointervalli, Im , con il valore I2m ottenuto con il doppio degli intervalli. Sia I il valore esatto dell’integrale si puó dimostrare che per una formula di Newton-Cotes di precisione s si ottiene la seguente stima dell’errore |I − I2m | ' I2m − Im 2s+1 − 1 Si puó quindi innescare una procedura di raffinamenti successivi di [a, b] fino a che I2m − Im < tol 2s+1 − 1 Caso Trapezi Indichiamo con T (h) la formula dei trapezi composta con h = Z b a f (x)dx − T (h) = b−a m ; allora vale h4 (3) h2 (1) (f (b) − f (1) (a)) − (f (b) − f (3) (a))+ 12 720 h6 (f (5) (b) − f (5) (a)) + . . . + c2k h2k (f 2k−1 (b) − f 2k−1 (a)) + O(h2k+2 ) 30240 nell’ipotesi che la f sia derivabile in [a, b] almeno 2k + 2 volte. Corollario Assumendo che la f (x) sia derivabile almeno 4 volte su [a, b], si ha: Z b a T (h/2) − T (h) h + O(h4 ) f (x) − T ( ) ' 2 3 dimostrazione: dal teorema si ha: Z b a f (x) − T (h) = c2 h2 + O(h4 ) e se il passo usato é h/2 Z b a f (x) − T (h/2) = c2 (h/2)2 + O(h4 ) questo perché c2 é indipendente da h. Eliminando il termine in h2 fra le due equazioni, si ottiene ÃZ ! Z b 4 a da cui 3 f (x) − T (h/2) = ÃZ b a b a f (x)dx − T (h) + O(h4 ) ! f (x) − T (h/2) = T (h/2) − T (h) + O(h4 ) come si voleva provare. Da questo si puó ricavare una formula che fornisce una approssima dell’integrale del quarto ordine, cioé Z b 4T (h/2) − T (h) f (x)dx = + O(h4 ) 3 a 2011/01/12 36 Esempio Stimiamo Z 1 0 2 e−x dx usando la formula composita dei trapezi con h = 1, 0.5, 0.25. La stima viene poi migliorata mediante estrapolazione di Richardson. Il valore esatto alle prime 6 cifre significative é 0.746824. Rb h T(h) Estrap. | 1 0.5 0.25 0.683939 0.731370 0.742984 0.747180 0.746855 0.062884 0.015453 0.003839 a f dx − T (h)| | Rb a f dx − Estrap.| 0.00035642 0.0000313797 Il corollario fornisce una stima del termine principale dell’errore. Si puó progettare un metodo iterativo che dimezza il passo fino a che | T (h/2) − T (h) | ≤ tol 3 quando questo si verifica sará anche Z b a f (x)dx − T (h/2)| ≤ tol Questo metodo iterativo puó essere applicato in modo adattivo. 2011/01/12 37 Caso Simpson Se calcoliamo l’integrale con il metodo di Simpson con passo h = (b − a)/2 : S(h) e un Simpson composto con passo h/2: Z b a Z b a f (x)dx = S(h) − f (x)dx = S(h/2) − = S(h/2) − procedendo S(h) − S(h/2) ' h5 (4) f (η); 90 b−a (h/2)4 f (4) (η) = 180 1 h5 f (η). 16 90 h5 (4) 1 f (η)(1 − ) 90 16 da cui 1 h5 (4) 1 [S(h) − S(h/2)] ' f (η) 15 16 90 sostituendo nell’equazione precedente si ottiene | Z b a f (x)dx − S(h/2)| ' | 1 [S(h/2) − S(h)] | 15 quindi c’é la possibiltá di innescare un procedimento iterativo in cui si dimezza il passo fino a che 1 | [S(h/2) − S(h)] | ≤ tol 15 quando ció si verifica allora | Z b a f (x)dx − S(h/2)| ≤ tol Metodo di Simpson Adattivo Per realizzare una routine che implementa un metodo adattivo si deve specificare l’intervallo [a, b], fornire una routine per la valutazione della f (x) per x ∈ [a, b] e scegliere una tolleranza tol. La routine deve calcolare un valore approssimato IA dell’integrale in modo che | Z b a f (x)dx − IA | ≤ tol la routine deve anche essere in grado di determinare se la richiesta tolleranza non sia raggiungibile nei limiti definiti dal massimo numero di livelli di ricorsione. Durante l’esecuzione, ogni intervallo viene determinato per bisezione di un intervallo ottenuto precedentemente durante il calcolo. Il numero effettivo di sottointervalli, cosı́ come la loro posizione e ampiezza dipende dalla f (x) e dalla tolleranza tol. Lo schema piú classico applica ad ogni sottointervallo [xi , xi+1 ] la formula di Simpson semplice e la formula di Simpson composta con m = 4, S(hi /2) ( che equivale a due Simpson semplici applicati rispettivamente a [xi , xi + hi /2] e [xi + hi /2, xi+1 ]. Entrambe S(hi ) e S(hi /2) sono approssimazioni per Z IAi ' xi+1 xi f (x)dx. Queste due approssimazioni servono per ottenere una stima dell’errore di integrazione. Se la tolleranza é raggiunta , S(hi /2) (o l’estrapolazione di Richardson relativa) viene presa come valore dell’integrale su quell’intervallo. Se la tolleranza non viene raggiunta 2011/01/12 38 , il sottointervallo viene suddiviso a metá e il procedimento viene ripetuto su ognuno dei sottointervalli piú piccoli. Utilizzando il raffinamento automatico di Richardson, determinate il raffinamento dell’intervallo di definizione del seguente integrale utilizzando la formula dei Trapezi composita in modo da ottenere la seguente limitazione dell’errore 1 |RT | ≤ 10−3 2 per il calcolo di I= Z 1 0 2 e−x La function quad(f un, a, b) calcola una approssimazione dell’integrale della funzione f un utilizzando il metodo di Simpson adattivo: Dal manuale MatLab: QUAD Numerically evaluate integral, adaptive Simpson quadrature. Q = QUAD(FUN,A,B) tries to approximate the integral of scalar-valued function FUN from A to B to within an error of 1.e-6 using recursive adaptive Simpson quadrature. FUN is a function handle. The function Y=FUN(X) should accept a vector argument X and return a vector result Y, the integrand evaluated at each element of X. Q = QUAD(FUN,A,B,TOL) uses an absolute error tolerance of TOL instead of the default, which is 1.e-6. Larger values of TOL result in fewer function evaluations and faster computation, but less accurate results. The QUAD function in MATLAB 5.3 used a less reliable algorithm and a default tolerance of 1.e-3. Q = QUAD(FUN,A,B,TOL,TRACE) with non-zero TRACE shows the values of [fcnt a b-a Q] during the recursion. Use [] as a placeholder to obtain the default value of TOL. [Q,FCNT] = QUAD(...) returns the number of function evaluations. Use array operators .*, ./ and .^ in the definition of FUN so that it can be evaluated with a vector argument. Notes: Function QUADL may be more efficient with high accuracies and smooth integrands. Function QUADV vectorizes QUAD for array-valued FUN. Example: Q = quad(@myfun,0,2); where myfun.m is the M-file function: %-------------------% function y = myfun(x) y = 1./(x.^3-2*x-5); %-------------------% or, use a parameter for the constant: Q = quad(@(x)myfun2(x,5),0,2); 2011/01/12 39 where myfun2 is the M-file function: %----------------------% function y = myfun2(x,c) y = 1./(x.^3-2*x-c); %----------------------% Class support for inputs A, B, and the output of FUN: float: double, single See also quadv, quadl, dblquad, triplequad, trapz, function_handle. Il metodo dei trapezi e’ invece implementato nella seguente function: TRAPZ Z = the for Trapezoidal numerical integration. TRAPZ(Y) computes an approximation of the integral of Y via trapezoidal method (with unit spacing). To compute the integral spacing different from one, multiply Z by the spacing increment. For vectors, TRAPZ(Y) is the integral of Y. For matrices, TRAPZ(Y) is a row vector with the integral over each column. For N-D arrays, TRAPZ(Y) works across the first non-singleton dimension. Z = TRAPZ(X,Y) computes the integral of Y with respect to X using the trapezoidal method. X and Y must be vectors of the same length, or X must be a column vector and Y an array whose first non-singleton dimension is length(X). TRAPZ operates along this dimension. Z = TRAPZ(X,Y,DIM) or TRAPZ(Y,DIM) integrates across dimension DIM of Y. The length of X must be the same as size(Y,DIM)). Example: If Y = [0 1 2 3 4 5] then trapz(Y,1) is [1.5 2.5 3.5] and trapz(Y,2) is [2 8]; Class support for inputs X, Y: float: double, single See also sum, cumsum, cumtrapz, quad. Lewis Fry Richardson (1881-1953) nacque a Newcastle in Gran Bretagna terminó i suoi studi a King’s College a Cambridge nel 1903. Ricoprı́ varie cariche nell’industria e nell’universitá, fu il primo a suggerire di usare tecniche matematiche per fare previsioni metereologiche , mediante la risoluzione delle equazioni dei fluidi che dovrebbero governare la temperatura, la pressione atmosferica ecc. Fece questo negli anni venti, molto prima dello sviluppo dei moderni computer ad alta velocitá e fu a causa di questo che sviluppó la nozione di metodi di estrapolazione per l’approssimazione numerica accurata di soluzioni basate su approssimazioni meno precise. 2011/01/12 40 Esercizi di preparazione alla II prova parziale 1. Applica il metodo dei trapezi composto con passo h1 = stima del seguente integrale Z 1 0 1 4 e h2 = 1 8 per fornire una x(1 − x2 )dx cerca di fornire una stima dell’errore di integrazione. 2. Dato il seguente integrale Z 1 −1 1 dx 1 + x2 prova a determinare il passo di integrazione che si deve usare per il metodo dei trapezi composto affinché l’errore di integrazione sia inferiore a 12 10−1 3. Poiché l’area del cerchio unitario é pari a π, segue che π = 2 Z 1 p −1 1 − x2 dx Allora si puó approssimare π mediante una approssimazione di questo integrale. Applica il metodo di Simpson per calcolare valori approssimati di π commenta i risultati.