Sei sulla pagina 1di 2

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

8 Parte I (Interpolazione mediante polinomi)


Data la tabulazione (xi, yi), per i= 0,..n, MatLab permette di costruire il polinomio interpolatore di grado n mediante la funzione predefinita polyfit (se occorre, vedere le specifiche della funzione tramite lhelp di MatLab, polyfit si trova nel gruppo polyfun). La funzione polyfit(x,y,n), con x(xi), y(yi) e n il grado del polinomio interpolatore scelto, restituisce un vettore, che indichiamo P nel seguito, i cui elementi sono i coefficienti del polinomio interpolatore. Tale vettore P pu essere utilizzato come argomento della funzione predefinita polyval. La funzione polyval(P,z), dove P il vettore contenente i coefficienti di un polinomio, restituisce i valori del polinomio in z, con z vettore di numeri.

Fissato un intervallo [a,b], e due valori interi positivi m,n, scrivere uno SCRIPT file in MatLab che:
determini n+1 nodi xi equidistanti nellintervallo dato e calcoli i valori yi=f(xi), per una assegnata funzione f(x) (questultima va scritta in un FUNCTION file MatLab, vedi suggerimento in calce); mediante la funzione polyfit, calcoli i coefficienti del polinomio interpolante di grado n nei punti (xi, yi), per i= 0,..n; calcoli i valori di f(x) in m punti xsj , j= 1,..m, equidistanti nellintervallo [a,b] (valori indicati con fxsj); mediante la funzione polyval , calcoli i valori del polinomio interpolante nei punti xsj , j= 1,..m, (valori indicati con pxsj); usando i valori xsj ed i valori pxsj e fxsj , disegni: (i) i grafici del polinomio interpolante e della funzione f(x); (ii) il grafico della distanza tra i valori pxsj e fxsj. Come funzioni test f(x) si considerino le funzioni: e-xsen(2x) nellintervallo [0,4] (-3x+1.4)*sen(18x) nellintervallo [0.96609, 1.48907]. 1/(1+x2) nellintervallo [-5, 5]. Per le tre funzioni considerate, cosa si ottiene allaumentare dei punti di interpolazione? Lapprossimazione migliora? I risultati numerici sono in accordo con la teoria? Suggerimento: Usare la definizione di FUNCTION file presente in Matlab per creare il file funz.m contenente la funzione di cui si vuole ottenere la tabulazione. Esempio: function y = funz(x) % calcolo di y y=2*sin(x)+2;
Marco Gaviano (gaviano@unica.it)

Calcolo Scientifico e Matematica Numerica Corso di Laurea in Informatica, A.A. 2011-2012 Esercitazione n. 8 Parte II (Interpolazione mediante spline)
Data la tabulazione (xi, yi), per i= 0,..,n, di una funzione y=f(x), la funzione f pu essere approssimata mediante una spline cubica interpolatoria. Una spline cubica interpolatoria s(x) pu essere determinata utilizzando la funzione predefinita di Matlab spline(x,y), che, data la tabulazione x(xi) e y(yi), restituisce un vettore C i cui elementi rappresentano la spline cubica interpolatoria cercata. Per ottenere i valori di tale spline cubica interpolatoria s(x) in un insieme di nodi z(zk), per k=1,..,m, si utilizza la funzione predefinita di Matlab ppval(C,z), che restituisce i valori sk=s(zk).

Fissato un intervallo [a,b], ed un valore intero positivo n, scrivere uno SCRIPT file in MatLab che:
determini n+1 nodi xi equidistanti nellintervallo dato e calcoli i valori yi=f(xi) per una assegnata funzione f(x) (questultima va scritta in un FUNCTION file MatLab, vedi suggerimento in calce); determini la spline cubica interpolatoria di Matlab tramite i comandi C=spline(x,y) ; z=linspace(a,b,101); s=ppval(C,z); tracci il grafico della spline cubica interpolatoria s(x) e della funzione f(x) nei punti zk, per k=1,..,101. Come funzioni test f(x) si considerino le funzioni: 2sen(x)+2 (nellintervallo [-20, 20]); e-xsen(2x) nellintervallo [0,4]; (-3x+1.4)*sen(18x) nellintervallo [0.96609, 1.48907]; 1/(1+x2) (nellintervallo [-6, 6]).

Suggerimento: Usare la definizione di FUNCTION file presente in Matlab per creare il file funz.m contenente la funzione di cui si vuole ottenere la tabulazione. Esempio: function y = funz(x) % calcolo di y y=exp(-x)*sin(2*pi*x); La scrittura fun(6) in un programma, o nella finestra di commando, permette di calcolare e-xsen(2x) nel punto x=6. Si osservi che alla funzione precedente pu essere passato in input esclusivamente uno scalare. Per consentire alla funzione di accettare in input un vettore x=[x_0, x_1, , x_n], in modo tale che essa restituisca con una sola chiamata il vettore tabulazione y=[f(x_0), f(x_1), , f(x_n)], occorre modificare opportunamente il corpo della precedente funzione funz().
Marco Gaviano (gaviano@unica.it)