Calcolo Scientifico e Matematica Numerica Corso di Laurea in Informatica, A.A. 2011-2012 Esercitazione n.

9 Parte I (Migliore approssimazione calcolata con matrice di Vandermonde)
Data la tabulazione (xi, yi), per i= 0,..,m, di una funzione y=f(x), la funzione f può essere approssimata mediante un polinomio P_n di grado n, con n<m, che approssima la f(x) nel senso dei minimi quadrati (caso discreto). 1) Fissato un intervallo [a,b], e due valori interi positivi m,n, con n<m, scrivere uno SCRIPT file

in MatLab che:
i. determini m+1 nodi xi equidistanti nell’intervallo dato e calcoli i valori yi=f(xi), per una assegnata funzione f(x) (quest’ultima va scritta in un FUNCTION file MatLab, vedi suggerimento in calce); determini il polinomio P_n di grado n che approssima la f(x) nel senso dei minimi quadrati seguendo lo schema riportato in calce; tracci il grafico del polinomio P_n, della funzione f(x), evidenziando con un asterisco gli m+1 punti della tabulazione (xi, yi), per i= 0,..,m.

ii. iii.

2) Ripetere la stessa procedura utilizzata per il punto 1), supponendo ora che i valori di f(x) non siano calcolati esattamente ma siano conosciuti con un errore casuale che non supera il 10% del valore della funzione. Ciò significa che, invece di f(x), si ha a disposizione g(x)=f(x)+casuale(x), dove -0.1*|f(x)|<casuale(x)<+0.1*|f(x)|. Per ottenere il vettore di numeri casuali, si usi la funzione predefinita di Matlab rand(). Come funzioni test f(x) si considerino le funzioni:  2sen(x)+2 (nell’intervallo [-20, 20]) ,  e-xsen(2x) nell’intervallo [0,4]  (-3x+1.4)*sen(18x) nell’intervallo [0.96609, 1.48907].  1/(1+x2) (nell’intervallo [-6, 6]) Suggerimento: Per approssimare una funzione con un polinomio di grado n nel senso dei minimi quadrati (caso discreto) occorre considerare lo schema seguente. Data la tabulazione xi, yi, i=0,..,m, di una funzione f(x)C[a,b], ed il sottospazio W dei polinomi di grado al più n, w(a,x) = anxn + an-1xn-1 +… + a1x + a0 , trovare il polinomio w(a*,x)W che approssima la f(x) nei punti xi, yi per i=0,..,m, nel senso dei minimi quadrati, equivale a trovare il polinomio w(a*,x) tale che

 ( w(a*, x )  y )   ( w(a, x )  y )
k 0 k i k 0 k i

m

2

m

2

Il vettore a  (a , a ,..., a ) si ottiene risolvendo il sistema lineare (n+1)*(n+1) seguente

*

* 0

* 1

* n

Ma*  r
dove M  V TV e r  V T b , con b  ( y0 , y1 ,..., ym ) , ossia

V
m

matrice rettangolare (m+1)(n+1) di Vandermonde e

i j M  ( mi , j )   xk xk k 0

per i=0,1,…,n e j=0,1,…,n,

e

m i r  (ri )   xk yk k 0

per i=0,1,…,n.

La funzione vander() di MatLab genera la matrice di Vandermonde quadrata. Quindi, fissato il vettore x delle ascisse (ossia dei nodi) ed il vettore y delle corrispondenti ordinate, le istruzioni: V=vander(x); V=V(:,m+1-n:m+1); a=inv(V’V)*V’y consentono di determinare il vettore a contenente i coefficienti del polinomio di migliore approssimazione nel senso dei minimi quadrati.
Marco Gaviano (gaviano@unica.it)

tracci il grafico del polinomio P_n e della funzione f(x). che approssima la f(x) nel senso dei minimi quadrati (caso discreto). vedi suggerimento in calce). 1. per i= 0. e due valori interi positivi m.y. Ciò significa che.1*|f(x)|<casuale(x)<+0.. invece di f(x). per una assegnata funzione f(x) (quest’ultima va scritta in un FUNCTION file MatLab. 1) Fissato un intervallo [a. 2011-2012 Esercitazione n. dove -0. restituisce il vettore. 12.A. determini m+1 nodi xi equidistanti nell’intervallo dato e calcoli i valori yi=f(xi). yi).n)..it) .4]  (-3x+1. 9 Parte II (Migliore approssimazione calcolata con funzione MatLab) Data la tabulazione (xi. che chiameremo nel seguito P. ii.48907].n). di una funzione y=f(x). la quale restituisce i valori del polinomio in z. la funzione f può essere approssimata mediante un polinomio P_n di grado n.  1/(1+x2) (nell’intervallo [-6.m.4)*sen(18x) nell’intervallo [0.n.  e-xsen(2x) nell’intervallo [0.Calcolo Scientifico e Matematica Numerica Corso di Laurea in Informatica.. si ha a disposizione g(x)=f(x)+casuale(x). 6]) Domanda: Cosa succede nel caso in cui n=m? L’approssimazione nel senso dei minimi quadrati a cosa corrisponde? Marco Gaviano (gaviano@unica. supponendo ora che i valori di f(x) non siano calcolati esattamente ma siano conosciuti con un errore casuale che non supera il 10% del valore della funzione. Come funzioni test f(x) si considerino le funzioni:  2sen(x)+2 (nell’intervallo [-20. y(yi) ed n il grado del polinomio. con z vettore di numeri passato come argomento.b]. 20]) .y. A. tale vettore P può essere utilizzato come argomento della funzione predefinita polyval. i cui elementi sono i coefficienti del polinomio P_n di migliore approssimazione nel senso dei minimi quadrati.1*|f(x)|. data la tabulazione x(xi). negli m+1 nodi xi. determini il polinomio P_n di grado n. si usi la funzione predefinita di Matlab rand(). utilizzando la funzione predefinita polyfit(x. Per ottenere il vettore di numeri casuali. iii. con n<m. con n<m. Tale polinomio può essere determinato utilizzando la funzione predefinita di Matlab polyfit(x. 2) Ripetere la stessa procedura utilizzata per il punto 1). che.96609. Analogamenteb all’esercitazione n. scrivere uno SCRIPT file in MatLab che: i.