I Modulo del corso integrato di Calcolo Dott.ssa Maria Carmela De Bonis a.a. 2012-13
Approssimazione di Funzioni In molti problemi matematici emerge l esigenza di dover approssimare una funzione f C k ([a, b]), [a, b] R, k 0, (C k ([a, b]) spazio delle funzioni derivabili k volte in [a, b] con derivata k esima continua in [a, b]) con un altra funzione φ n di forma più semplice. Vediamo alcuni esempi.
Integrazione numerica Spesso non è possibile calcolare l integrale b a f (x)dx per via analitica e, anche quando questo è possibile, può accadere che nel calcolo sono coinvolte funzioni non elementari, che devono poi essere valutate (e quindi approssimate). Pertanto, si approssima la funzione integranda f con una funzione φ n opportunamente legata alla funzione f e l integrale I(f ) viene calcolato nel seguente modo b n φ n (x)dx + e n (f ) = a k f (x k ) + e n (f ) := G n (f ) + e n (f ), a k=1 dove G n (f ) prende il nome di formula di quadratura ed e n (f ) denota l errore teorico di approssimazione.
Approssimazione di dati sperimentali In molte applicazioni accade di avere una certa quantità di dati (solitamente elevata) e di voler descrivere l andamento del fenomeno che ha generato tali dati ed utilizzare quindi il modello, così dedotto, per prevedere valori in corrispondenza di ascisse non comprese nei dati iniziali. Tale strategia è anche utilizzata per correggere i dati sperimentali.
La funzione φ n si dice approssimazione della funzione f e naturalmente occorre valutare lo scostamento di φ n da f. Per misurare la bontà della funzione φ n nell approssimare la funzione f (ovvero la distanza di φ n da f ) si valuta la norma f φ n := max x [a,b] f (x) φ n(x). Se si verifica che lim f φ n = 0 n si dice che la successione {φ n } n converge ad f in norma uniforme. Naturalmente richiediamo che l ordine di convergenza sia il più grande possibile.
Le tecniche di approssimazione che andremo a studiare: Interpolazione mediante polinomi (un unico polinomio per tutti i dati) Funzioni polinomiali a tratti (una funzione composta da polinomi)
Interpolazione polinomiale (cenni) Sia f C 0 ([a, b]), [a, b] R. Supponiamo di conoscere i valori f (x 1 ),..., f (x n ) assunti da f rispettivamente nei punti x 1,..., x n tutti distinti. Lo scopo dell interpolazione polinomiale è quello di cercare un polinomio di grado minimo (eventualmente unico) che coincida con la funzione f nei punti assegnati, cioè tale che P(x i ) = f (x i ), i = 1,..., n.
Poichè i punti sono n, è sufficiente considerare il generico polinomio di grado n 1 che ha n coefficienti P n 1 (x) = a 0 + a 1 x + + a n 1 x n 1 ed imporre le condizioni a 0 + a 1 x 1 + + a n 1 x n 1 1 = f (x 1 ) a 0 + a 1 x 2 + + a n 1 x n 1 2 = f (x 2 )... a 0 + a 1 x n + + a n 1 xn n 1 = f (x n ).
I parametri incogniti a 0, a 1,..., a n 1 sono soluzione del seguente sistema quadrato di ordine n. 1 x 1 x n 1 1 1 x 2 x n 1 2.. 1 x n xn n 1 a 0 a 1. a n 1 = f (x 1 ) f (x 2 ). f (x n ) (1)
La matrice del sistema è quella di Vandermonde e il suo determinante è diverso da zero se i punti x i, i = 1,..., n, sono tutti distinti. Dunque, esiste uno ed un solo polinomio di grado n 1 tale che P n 1 (x i ) = f (x i ), i = 1,..., n. Tale polinomio viene detto polinomio interpolante e i punti x i, i = 1,..., n, vengono detti punti o nodi di interpolazione.
Per la costruzione del polinomio interpolante, si potrebbe procedere alla risoluzione del precedente sistema. Ma questo approccio non è consigliato sia perché le matrici di Vandermonde sono malcondizionate sia perché necessita di un elevato numero di operazioni aritmetiche. Dunque, una volta stabilita l esistenza e l unicità del polinomio interpolante, per l effettiva costruzione si utilizzano tecniche alternative ben condizionate e, possibilmente, meno costose in termini di operazioni aritmetiche.
Espressione del polinomio interpolante L espressione più utilizzata del polinomio interpolante è quella dovuta a Lagrange: n n (x x i ) P n (f, x) = (x k x i ) f (x k). k=1 i=1 i k Ecco perché il polinomio interpolante viene anche detto polinomio di Lagrange.
Se la funzione f C k ([a, b]) con k 1, e se i nodi di interpolazione sono scelti opportunamente, la successione dei polinomi di Lagrange converge uniformemente alla funzione f nell intervallo [a, b] con ordine di convergenza circa k: f P n (f ) C log n. nk Dunque più è regolare la funzione e più la convergenza del polinomio di Lagrange alla funzione f è veloce.
Tuttavia, in molte applicazioni si è vincolati ad usare i nodi equispaziati o comunque non è possibile scegliere i nodi dell interpolazione. In tali casi è necessario cambiare il tipo di funzione approssimante.
Funzioni polinomiali a tratti Suddividiamo l intervallo [a, b] in n sottointervalli con n + 1 nodi x i, i = 0,..., n, tali che a = x 0 < x 1 <... < x n = b. Una funzione S n si dice polinomiale a tratti su [a, b] se sull i-esimo sottointervallo [x i, x i+1 ] coincide con un polinomio di grado k i. Di solito k i = k i = 0,..., n 1, cioè i polinomi usati nei diversi sottointervalli hanno tutti lo stesso grado k. I punti x i, i = 0,..., n, possono essere equispaziati di passo h = b a o possono avere distanza variabile. In quest ultimo caso n poniamo h i+1 = x i+1 x i, i = 0,..., n 1, e h = max h i. i=0,...,n 1
L esempio più semplice di funzione polinomiale a tratti è la polinomiale lineare. Nell i esimo sottointervallo la funzione S 1 coincide con il polinomio interpolante della funzione f nei nodi x i e x i+1, cioè per x i x x i+1 si ha S 1 (f, x) = L 2 (f, x) = (x i+1 x)f (x i ) + (x x i )f (x i+1 ) x i+1 x i. 1 Se f C 1 ([a, b]) si ha 2 se f C 2 ([a, b]) si ha 3 se f C k ([a, b]) con k > 2 si ha f S 1 (f ) Ch; f S 1 (f ) Ch 2 ; f S 1 (f ) Ch 2.
Per la sua semplicità questo metodo è usato spesso nella pratica, ma esso non è adatto per una buona rappresentazione grafica della funzione. Infatti, poichè non stabilisce nessuna condizione sulle derivate dei polinomi nei punti x i, i = 1,..., n 1, il raccordo fra due diversi polinomi presenta in generale un punto spigoloso.
Funzioni spline Esistono tanti altri esempi di funzioni polinomiali a tratti, ma fra di esse, quelle più usate sono le funzioni spline. Le funzioni spline sono polinomiali che si ottengono imponendo condizioni di continuità delle derivate, senza utilizzare i valori, in generale non disponibili, delle derivate della funzione nei nodi dell intervallo. Esse sono molto utilizzate nella pratica perché consentono di ottenere ottimi risultati dal punto di vista grafico.
Fissato un intero d 1, S d (f, x) è una funzione spline di ordine d associata alla suddivisione dell intervallo [a, b] se: a = x 0 < x 1 <... < x n = b 1 S d (f, x) è un polinomio di grado d in ogni intervallo [x i 1, x i ], i = 1,..., n; (f ) è una funzione continua su [a, b] per ogni k = 0,..., d 1. 2 S (k) d Le funzioni spline più usate sono quelle cubiche, cioè d = 3.
Spline cubiche Assegnati n + 1 punti nell intervallo [a, b] tali che a = x 0 < x 1 <... < x n = b, la spline cubica S 3 (f, x) interpola la funzione y = f (x) in tali punti, cioè S 3 (f, x i ) = f (x i ), i = 0,..., n. (2) Inoltre, dalla Definizione 2 risulta S 3 (f, x) = a i + b i x + c i x 2 + d i x 3, x [x i 1, x i ], (3) i = 1,..., n, S (k) 3 (f, x+ i ) = S (k) 3 (f, x i ), i = 1,..., n 1, (4) k = 0, 1, 2. Le condizioni (2) e (4) conducono ad un sistema lineare di 4n 2 equazioni (n + 1 dalla (2) e 3(n 1) dalla (4)) nelle 4n incognite a i, b i, c i, d i definite in (3).
Per ottenere un sistema quadrato di ordine 4n, dobbiamo imporre due ulteriori condizioni. Imponendo le condizioni S (2) 3 (f, x 0) = S (2) 3 (f, x n) = 0 si ottengono le splines cubiche naturali. Se invece sono noti i valori della derivata prima della funzione negli estremi, imponendo le condizioni S 3(f, x 0 ) = f (x 0 ), S 3(f, x n ) = f (x n ) si ottengono le splines cubiche complete Imponendo la continuità della derivata terza della spline nei punti x 1 ed x n 1, cioè imponendo le condizioni S 3 (3)(f, x 1 ) = S 3(3)(f, x + 1 ), S 3(3)(f, x n 1 ) = S 3(3)(f, x + n 1 ) si ottengono le splines cubiche not-a-knot.
In generale, per ciascuna delle spline precedenti, per determinare le incognite a i, b i, c i, d i, i = 1,..., n si deve risolvere un sistema lineare a matrice piena di ordine 4n. Tuttavia, introducendo le nuove incognite M i = S 3(f, x i ), i = 0, 1,..., n. è possibile costruire univocamente S 3 (f, x) risolvendo un sistema lineare di ordine al più n + 1, la cui matrice dei coefficienti è tridiagonale simmettrica e a diagonale dominante. Date le caratteristiche della matrice dei coefficienti, la soluzione si calcola efficientemente con il metodo di Gauss senza pivoting.
Per quanto riguarda la stima dell errore: se f C 1 ([a, b]) si ha se f C 2 ([a, b]) si ha f S 3 (f ) Ch; f (p) S (p) 3 (f ) Ch 2 p, p = 0, 1; se f C 3 ([a, b]) si ha f (p) S (p) 3 (f ) Ch 3 p, p = 0, 1, 2; se f C 4 ([a, b]) si ha f (p) S (p) 3 (f ) Ch 4 p, p = 0, 1, 2, 3; se f C k ([a, b]) con k > 4 f (p) S (p) 3 (f ) Ch 4 p, p = 0, 1, 2, 3. Il risultato precedente ci consente di utilizzare S 3 (f, x) per approssimare f e le derivate di S 3 (f, x) per approssimare le derivate di f.
Il comando spline in Matlab In Matlab con la function spline vengono computate le spline cubiche not-a-knot. Sia x un vettore di nodi ed y il vettore dei valori nei nodi, entrambi di lunghezza m. Con il comando >>S=spline(x,y) viene determinata una variabile strutturata S contenente la pp form della spline. Vediamo con un esempio che cosa si intende.
Esempio Approssimazione di Funzioni >>x =[ 0 : 0.1 : 1]; >>y=sin(x); >>S=spline(x,y) si ha in output: S= form: pp breaks: [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1] nodi di interpolazione coefs: [10x4 double] coefficienti dei polinomi pieces: 10 numero degli intervalli order: 4 ordine della spline +1 dim: 1
Attraverso la funzione unmkpp è possibile estrarre i suddetti parametri assegnandoli a variabili distinte di tipo double: >>[x,c,l,k]=unmkpp(s) x è un vettore di lunghezza m contenente i nodi [0 : 0.1 : 1] in cui la spline interpola la funzione; C è la matrice di ordine (m 1)x4 la cui riga i sima contiene i coefficienti del polinomio di terzo grado relativo all intervallino i simo; l è il numero degli intervallini (numero dei punti 1); k è l ordine della spline +1.
La funzione mkpp viene usata per la procedura inversa di passaggio dai parametri alla pp-form. Ad esempio, se ho il vettore dei nodi x e la matrice dei coefficienti C, il comando >>Sback=mkpp(x,C) costruisce il parametro strutturato Sback.
Approssimazione simultanea di una funzione e della sua derivata prima La derivata prima della spline cubica relativa ai nodi x 0,..., x n e ad una funzione f è una spline di ordine 2, ossia composta da polinomi di secondo grado, continua con la sua derivata prima. In base a questo risultato e servendoci della pp-form della spline in Matlab, andiamo ad approssimare una funzione f con S 3 (f ) e la sua derivata prima f con S 3 (f ), cioé usando solo i valori della funzione f necessari per costruire la spline e senza dover calcolare (conoscere) i valori della derivata prima f nei nodi.
Dalla pp-form determiniamo la matrice di ordine (m 1)x3 la cui i sima riga con- tiene i coefficienti della derivata prima del polinomio di terzo grado relativo all intervallino i simo: >>Cder=[3*C(:,1) 2*C(:,2) C(:,3)]; >>Sder = mkpp(x,cder) Si ha la pp-form della spline quadratica che useremo per approssimare la f.
Per ottenere un approssimazione del grafico della funzione f e della funzione f, scegliamo un insieme di punti z (diverso dall insieme dei punti x) e usiamo la function Matlab ppval >>z=[0:0.01:1]; >>Sz=ppval(S,z); >>Sderz=ppval(Sder,z); >> subplot(121),plot(z,sin(z), r ), subplot(122),plot(z,sz, g ) >> subplot(121),plot(z,cos(z), r ), subplot(122),plot(z,sderz, g ) Otteniamo i grafici:
0.9 y=f(x)=sin(x) 0.9 y=s 3 (f,x) 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 0 0.5 1 0 0 0.5 1 1 y=f (x)=cos(x) 1 y=s 3 (f,x) 0.95 0.95 0.9 0.9 0.85 0.85 0.8 0.8 0.75 0.75 0.7 0.7 0.65 0.65 0.6 0.6 0.55 0.55 0.5 0 0.5 1 0.5 0 0.5 1
Esempio Approssimazione di Funzioni In un giorno del mese di luglio, ad intervalli di 1 ora, per tutte le 24 ore, sono state registrate le seguenti temperature ora temperatura 1 15 2 14 3 15 4 14 5 15 6 16 7 18 8 20 9 21 10 24 11 27 12 30 13 30 14 32 15 32 16 31 17 29 18 28 19 27 20 25 21 23 22 20 23 18 24 17
Utilizziamo la spline cubica S 3 (f ) per stimare le temperature delle ore 12, 30 e delle ore 19, 30 e, poi, confrontiamo i risultati ottenuti con i valori reali riportati nella seguente tabella ora temperatura 12,30 30 19,30 26
Denotato con x il vettore avente per componenti le ore e con y il vettore avente per componenti le corrispondenti temperature, con il comando Matlab >>yy=spline(x,y,[12.5 19.5]) si ottiene ora temperatura errore 12,30 30.0440 0.0440 19,30 26.0466 0.0466
Valutiamo, inoltre, la spline S 3 (f ) nei punti [1.5 : 24.5] e disegnamo il grafico. >>xx=[1.5:24.5]; >>yy=spline(x,y,xx); >>plot(xx,yy) 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25