
% Copyright (C) 2007 Alvise Sommariva. This is a free document; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% at your option) any later version. This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details. You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA}

\documentclass[final]{siamltex}


%------------------------------------------------------------------------------------------------------------------------
% USEPACKAGE.
%------------------------------------------------------------------------------------------------------------------------

\usepackage[italian]{babel}
\usepackage[dvips]{graphicx}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{times}
\usepackage{epsf}
\usepackage{graphicx,psfrag,color,pst-grad}
\usepackage{latexsym}
\usepackage{psboxit,pstricks}
\usepackage{fancyhdr}
\usepackage{fancyvrb}
\usepackage[colorlinks=true,linkcolor=purple,urlcolor=purple]{hyperref}

\usepackage{float}
\floatstyle{ruled}
\newfloat{program}{thp}{lop}
\floatname{program}{Codice}
\pdfpagewidth 8.5in
\pdfpageheight 11in

% \usepackage{palatino}
% \usepackage[latin1]{inputenc}
\usepackage{calc}
\usepackage{multicol}



%------------------------------------------------------------------------------------------------------------------------
% NEW COMMAND.
%------------------------------------------------------------------------------------------------------------------------

\newcommand{\ptenm}[2]{#1\mbox{-E#2}}
\newcommand{\ptenp}[2]{#1\mbox{+E#2}}
\newcommand{\mye}{\`e }
\newcommand{\myer}{\'e }
\newcommand{\myu}{\`u }
\newcommand{\myur}{\'u }
\newcommand{\mya}{\`a }
\newcommand{\myo}{\`o }
\newcommand{\myod}{\'o }
\newcommand{\myi}{\`i }
\newcommand{\myid}{\'i }
\newcommand{\myfl}{\mbox{fl}}
\newcommand{\smsp}{\vspace{0.2cm}}
\newcommand{\Rset}{\mathbb{R}}
\newcommand{\bs}{\boldsymbol}
\newcommand{\mylbar}{|}
\newcommand{\myrbar}{|}

%\pagestyle{fancy}
%\headheight 35pt
%\rhead{}
%\chead{}
%\lhead{}
%\rfoot{}
%\cfoot{\thepage}
%\lfoot{}



%------------------------------------------------------------------------------------------------------------------------
% NEW THEOREM.
%------------------------------------------------------------------------------------------------------------------------

%\newtheorem{theorem}{Theorem}[section]
%\newtheorem{lemma}[theorem]{Lemma}
%\newtheorem{proposition}[theorem]{Proposition}
%\newtheorem{corollary}[theorem]{Corollary}
% \newtheorem{remark}[theorem]{Nota}
%\newenvironment{proof}[1][Proof]{\begin{trivlist}
%\item[\hskip \labelsep {\bfseries #1}]}{\end{trivlist}}
%\newenvironment{definition}[1][Definition:]{\begin{trivlist}
%\item[\hskip \labelsep {\bfseries #1}]}{\end{trivlist}}
%\newenvironment{example}[1][Esempio]{\begin{trivlist}
%\item[\hskip \labelsep {\bfseries #1}]}{\end{trivlist}}
%\newenvironment{remark}[1][Nota]{\begin{trivlist}
%\item[\hskip \labelsep {\bfseries #1}]}{\end{trivlist}}


%------------------------------------------------------------------------------------------------------------------------
% NEW COMMAND.
%------------------------------------------------------------------------------------------------------------------------

\renewcommand{\figurename}{Figura}

%\newcommand{\qed}{\nobreak \ifvmode \relax \else
%     \ifdim\lastskip<1.5em \hskip-\lastskip
%    \hskip1.5em plus0em minus0.5em \fi \nobreak
% \vrule height0.75em width0.5em depth0.25em\fi}



%------------------------------------------------------------------------------------------------------------------------
% DEF.
%------------------------------------------------------------------------------------------------------------------------

\def\P{{\mathbb P}}
\def\n{{\mathcal N}}
\def\R{\mathbb{R}}
\def\N{\mathbb{N}}
\def\Z{\mathbb{Z}}
\def\F{{\mathcal F}}
\newcommand{\LL}{\mathcal L}
\def\C{\mathbb{C}}
\def\K{\mathbb{K}}
\def\T{\mathbb{T}}
\def\qed{\vbox{\hrule height0.6pt\hbox{%
   \vrule height1.3ex width0.6pt\hskip0.8ex
   \vrule width0.6pt}\hrule height0.6pt
  }}

\begin{document}

\title{\bf Interpolazione polinomiale \thanks{Ultima revisione: \today}}

\author{{A. Sommariva
{\thanks{Dipartimento di Matematica Pura ed Applicata, Universit\`a degli Studi di  Padova, via Trieste 63, 35121 Padova, Italia ({\tt alvise@math.unipd.it})}}} {\mbox{ e}}  {M.Venturin
{\thanks{Dipartimento di Informatica, Universit\`a degli Studi di Verona, Strada Le Grazie 15, 37134 Verona, Italia ({\tt manolo.venturin@gmail.com})}} }
}

\maketitle
\section{Interpolazione polinomiale}

Siano dati $N+1$ punti $x_0,\ldots,x_N$ a due a due distinti e in ordine
crescente (cio\'e $x_i < x_{i+1}$), e i valori $y_0,\ldots,y_N$ ivi
assunti da una funzione $y=f(x)$.

Il problema dell'{\sl{interpolazione polinomiale}} (cf. \cite[p.131]{ATK}, \cite[p.289]{QUABIG}) consiste nel calcolare
il polinomio $p_N$ di grado $N$ tale che
\begin{equation}
p_N(x_i)=y_i, \, \, i=0,\ldots,N.
\end{equation}

Perch\'e questo problema abbia senso, necessita garantire l'esistenza ed
unicit\'a di tale polinomio $p_N$, questione che pu\'o essere provata in
vari modi (ad esempio in termini della non singolarit\'a della matrice di
Vandermonde {\cite{WIKV}}).

Nel caso $N=1$, il problema diventa relativamente semplice. Non \mye altro
che il calcolo della retta che passa per due punti assegnati
$P_0=(x_0,y_0)$ e $P_1=(x_1,y_1)$ cio\.e da
\begin{equation}
{\frac{y-y_0}{y_1-y_0}} = {\frac{x-x_0}{x_1-x_0}}
\end{equation}
abbiamo facilmente
\begin{equation}\label{1}
y = y_0 {\frac{x-x_1}{x_0-x_1}} + y_1 {\frac{x-x_0}{x_1-x_0}}.
\end{equation}

\noindent
Notiamo subito che i polinomi
\begin{equation}\label{1s0}
 L_0(x):= {\frac{x-x_1}{x_0-x_1}}
\end{equation}

\begin{equation}\label{1s1}
 L_1(x):= {\frac{x-x_0}{x_1-x_0}}
\end{equation}

\noindent
hanno la particolarit\mya che
$$ L_i(x_j)=\delta_{ij}$$
dove al solito $ \delta_{i,j} $ \`e il {\sl{delta di Kronecker} }, cio\mye
$$\delta_{i,i}=1, \, \delta_{i,j}=0 {\mbox{ per }} i\neq j.$$

\noindent
Da ({\ref{1}}), ({\ref{1s0}}), ({\ref{1s1}}) si ha ovviamente
\begin{equation}\label{2pre}
p_N(x)= y_0 L_0(x) + y_1 L_1(x).
\end{equation}

\noindent
Vediamo il grafico dei polinomi di Lagrange nel caso $x_0=1$, $x_1=3$. Digitiamo il codice
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

clf;

x0=1;
x1=3;
s=0.5:0.01:3.5;

caso=2; % DICE QUALE POLINOMIO DI LAGRANGE VOGLIAMO STUDIARE.

if caso == 1
    lx=(s-x1)/(x0-x1);
    l0=(x0-x1)/(x0-x1);
    l1=(x1-x1)/(x0-x1);
else
    lx=(s-x0)/(x1-x0);
    l0=(x0-x0)/(x1-x0);
    l1=(x1-x0)/(x1-x0);
end

hold on;

% DISEGNO PUNTI x0=1 e x1=3.
plot(x0,0,'bo');
plot(x1,0,'bo');

% DISEGNO VALORI x0=1 e x1=3 POLINOMI DI LAGRANGE.
plot(x0,l0,'r*');
plot(x1,l1,'r*');

% DISEGNO ASSE x.
plot(s,zeros(size(s)));

% DISEGNO POLINOMI DI LAGRANGE
plot(s,lx,'k-');

hold off

\end{Verbatim}
\noindent
ottenendo, rispettivamente per {\tt{caso=1}} e {\tt{caso=2}}, i grafici in figura.

 \begin{figure}\label{fig1aaaa}
 \centering
 {\includegraphics[scale=0.35,clip]{L10.eps}}
 {\includegraphics[scale=0.35,clip]{L11.eps}}
 \caption{I polinomi di Lagrange $L_0$, $L_1$ relativi ai punti $x_0=1$, $x_1=3$.}
 \end{figure}

 L'idea
dei
polinomi di Lagrange \mye di estendere questa propriet\mya al caso $N>1$.
Lagrange (cf. {\cite{WIKLI}}, {\cite{MTLA}}) osserv\myo che il polinomio di grado $N$
\begin{equation}
L_k(x):= \prod_{j=0, j\neq k}^N {\frac{x-x_j}{x_k-x_j}} =
{\frac{ (x-x_0)\ldots(x-x_{k-1})(x-x_{k+1}) \ldots (x-x_N) }{ (x_k-x_0)\ldots(x_k-x_{k-1})(x_k-x_{k+1}) \ldots (x_k-x_N)  }}
\end{equation}
\mye tale che $ L_k(x_j)=\delta_{ij} $. Quindi si vede facilmente che
\begin{equation}\label{2}
p_N(x)= \sum_{k=0}^N y_k L_k(x).
\end{equation}

\noindent
Infatti
\begin{equation}\label{2x}
p_N(x_j)= \sum_{k=0}^N y_k L_k(x_j)=\sum_{k=0}^N y_k \delta_{k,j}=y_j.
\end{equation}

\noindent
Si osservi come ogni termine della sommatoria mostra separa (in qualche senso) il contributo delle ordinate $y_k$ da quello dei polinomi di Lagrange $L_k$ essenzialmente dipendenti dai punti $\left\{x_j\right\}_{j=0,\ldots,N}$ (si rifletta bene su questa affermazione).


 \begin{figure}\label{fig1aaa}
 \centering
 {\includegraphics[scale=0.4,clip]{L0b.eps}}
 {\includegraphics[scale=0.4,clip]{L1b.eps}}
 {\includegraphics[scale=0.4,clip]{L2b.eps}}
 \caption{I polinomi di Lagrange $L_0$, $L_1$, $L_2$ relativi ai punti $x_0=-2$, $x_1=1$, $x_2=3$.}
 \end{figure}

\subsubsection{Un esempio}
Calcoliamo il polinomio di grado 2 che assume nei nodi $x_0=-2$, $x_1=1$, $x_2=3$ rispettivamente i valori $f_0=-2$, $f_1=11$, $f_2=17$. Come si vede dalla definizione, i polinomi di Lagrange sono
\begin{eqnarray}
 L_0(x) &=&  { \frac {(x-x_1)(x-x_2)} {(x_0-x_1)(x_0-x_2)} } = { \frac {(x-1)(x-3)} {(-2-1)(-2-3)} } = { \frac {(x-1)(x-3)} {15} } \nonumber \\
 L_1(x) &=&  { \frac {(x-x_0)(x-x_2)} {(x_1-x_0)(x_1-x_2)} } = { \frac {(x-(-2))(x-3)} {(1-(-2))(1-3)} } = { \frac {(x+2)(x-3)} {-6} } \nonumber\\
 L_2(x) &=&  { \frac {(x-x_0)(x-x_1)} {(x_2-x_0)(x_2-x_1)} } = { \frac {(x-(-2))(x-1)} {(3-(-2))(3-1)} } = { \frac {(x+2)(x-1)} {10} } \nonumber
\end{eqnarray}
Si vede subito che i polinomi $L_0$, $L_1$, $L_2$ sono di secondo grado (e quindi tali le loro combinazioni lineari), che
$$L_0(x_0)=L_0(-2)=1, L_0(x_1)=L_0(1)=0, L_0(x_2)=L_0(3)=0$$
$$L_1(x_1)=L_1(1)=1, L_1(x_0)=L_1(-2)=0, L_1(x_2)=L_1(3)=0$$
$$L_2(x_2)=L_2(3)=1, L_2(x_0)=L_2(-2)=0, L_2(x_1)=L_2(1)=0$$
e che il polinomio definito in ({\ref{2}})
$$p_2(x)=-2 \, L_0(x) + 11 \, L_1(x) + 17 \, L_2(x)$$
\mye tale che
$$p(x_0)=-2 \, L_0(x_0) + 11 \, L_1(x_0) + 17 \, L_2(x_0)= -2 \cdot 1 + 11 \cdot  0 + 17 \cdot  0 =-2,$$
$$p(x_1)=-2 \, L_0(x_1) + 11 \, L_1(x_1) + 17 \, L_2(x_1)= -2 \cdot 0 + 11 \cdot  1 + 17 \cdot  0 =11,$$
$$p(x_2)=-2 \, L_0(x_2) + 11 \, L_1(x_2) + 17 \, L_2(x_2)= -2 \cdot 0 + 11 \cdot  0 + 17 \cdot  1 =17,$$
e quindi \mye proprio il polinomio interpolante cercato.













  \begin{figure}[h!]\label{fig1}
 \centering
   {\includegraphics[scale=0.30,clip]{Chebyshev.eps}}
   {\includegraphics[scale=0.77,clip]{RLobatto_c.eps}}
 \caption{Pafnuty Lvovich Chebyshev (1821-1894) e Rehuel Lobatto (1797-1866).}
 \end{figure}














 Dal punto di vista pratico, ({\ref{2}}) ha alcuni problemi. Se dopo aver
calcolato il polinomio $p_N$ interpolante in $N+1$ punti ($x_0,y_0$),
$\ldots$, ($x_N,y_N$), desideriamo ottenere il polinomio $p_{N+1}$
interpolante in $N+2$ punti ($x_0,y_0$), $\ldots$, ($x_N,y_N$), la formula
({\ref{2}}) \mye inefficiente poich\mye bisogna ricalcolare tutti i polinomi
di Lagrange. Fortunatamente, esistono altre maniere di esprimere il
polinomio interpolatore, come quella di Newton (cf. \cite[p.138]{ATK}, \cite[p.294]{QUABIG}, \cite{WIKNP}, \cite{WIKIN}), che non soffrono di questo
problema.

Per quanto concerne l'errore, se la funzione \`e di classe $C^{N+1}$, si
pu\'o vedere dal {\sl{teorema del resto}} che
\begin{equation}\label{2a}
f(x)-p_N(x)= f^{(N+1)}(\xi) {\frac { \prod_{i=0}^{N} (x-x_i)  }{(N+1)!}}
\end{equation}
dove $\xi \in I$ con $I$ il pi\myu piccolo intervallo aperto contenente $x_0,\ldots,x_N$.


Ma come scegliere (avendone la possibilit\mya) i punti in cui interpolare
la funzione $f:[a,b] \rightarrow \R$? Mostriamo due casi notevoli:
\smsp
\begin{enumerate}
\item {\sl{nodi equispaziati}}: fissato $N$, i punti sono
\begin{equation}
x_k=a+ k \, {\frac {(b-a) } {N}   }, \, \, k=0,\ldots,N ;
\end{equation}
\smsp
\item {\sl{nodi di Chebyshev-Gauss (scalati)}} {\cite[p.294]{QUABIG}}: fissato $N$, i punti sono
\begin{equation}
x_k={\frac {(a+b) } {2}   } + {\frac {(b-a) } {2}   } \, t_k,  \, \,
k=0,\ldots,N
\end{equation}
con
\begin{equation}
t_k=\cos \left(     {\frac {2k+1} {2N+2} }   \, \pi  \right), \, k=0,\ldots,N;
\end{equation}
\smsp
\item {\sl{nodi di Chebyshev-Gauss-Lobatto (scalati)}} {\cite[p.295]{QUABIG}}: fissato $N$, i punti sono
\begin{equation}
x_k={\frac {(a+b) } {2}   } + {\frac {(b-a) } {2}   } \, t_k,  \, \,
k=0,\ldots,N
\end{equation}
con
\begin{equation}\label{CGL}
t_k=-\cos \left(     {\frac {k \pi} {N} }    \right), \, k=0,\ldots,N;
\end{equation}

\end{enumerate}

In seguito useremo i nodi di Chebyshev-Gauss-Lobatto, che a differenza dei nodi di Chebyshev (cf. {\cite{{WIKNC}}, {\cite{MTCH}}) includono gli estremi dell'intervallo.
Si consiglia di effettuare gli esercizi successivi sostituendo ai nodi di Chebyshev-Gauss-Lobatto (scalati), quelli di Chebyshev-Gauss.
Si osservi che l'interpolante polinomiale in un set di nodi prefissati non converge sempre puntualmente alla funzione da approssimare. Infatti, per la funzione di Runge
\begin{equation}\label{runge}
f(x)= {\frac{1}{1+x^2}}, \,\,x \in [-5,5]
\end{equation}
si ha che il polinomio interpolatore $p_N$ in nodi equispaziati non converge (puntualmente) a $f$. Fortunatamente ci\myo
non succede per i nodi di Chebyshev-Gauss, per cui comunque (per un teorema
dovuto a Faber) esistono funzioni continue $f$ ma non $C^1$ tali che
l'interpolante $p_N$ non converge puntualmente a $f$.

 \begin{figure}\label{fig1}
 \centering
   {\includegraphics[scale=0.5,clip]{interpolazione.eps}}
 \caption{Grafico che illustra l'interpolazione su nodi equispaziati (la
funzione ha la linea continua, il polinomio interpolatore \mye
tratteggiato, i nodi di interpolazioni coi cerchietti).}
 \end{figure}

\section{Interpolazione polinomiale in Matlab/Octave}

Una volta nota le coppie da interpolare
$$(x_k,y_k), \,\,\, k=0,\ldots,N$$
e immagazzinate le componenti nei vettori $x=(x_{k+1})$, $y=(y_{k+1})$ ove $k=0,\ldots,N$ (la scelta degli indici dei vettori $x$ e $y$ \mye dovuta al fatto che un vettore in Matlab/Octave non pu\myo avere indice $0$), siamo interessati a valutare il polinomio interpolatore $p_N$ nei punti $s_j$ con $j=1,\ldots,M$. A tale scopo, Matlab/Octave propongono le funzioni {\tt{polyfit}} e {\tt{polyval}}. Per capirne il loro utilizzo ci aiutiamo con l'help di Matlab.

\subsection{Il comando {\tt{polyfit}}}
Partiamo con il descrivere il comando {\tt{polyfit}}.

\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> help polyfit

 POLYFIT Fit polynomial to data.
    POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
    degree N that fits the data, P(X(I))~=Y(I), in a least-squares sense.

    [P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and a
    structure S for use with POLYVAL to obtain error estimates on
    predictions.  If the errors in the data, Y, are independent normal
    with constant variance, POLYVAL will produce error bounds which
    contain at least 50% of the predictions.

    The structure S contains the Cholesky factor of the Vandermonde
    matrix (R), the degrees of freedom (df), and the norm of the
    residuals (normr) as fields.

    [P,S,MU] = POLYFIT(X,Y,N) finds the coefficients of a polynomial
    in XHAT = (X-MU(1))/MU(2) where MU(1) = mean(X) and MU(2) = std(X).
    This centering and scaling transformation improves the numerical
    properties of both the polynomial and the fitting algorithm.

    Warning messages result if N is >= length(X), if X has repeated, or
    nearly repeated, points, or if X might need centering and scaling.

    See also POLY, POLYVAL, ROOTS.

>>

\end{Verbatim}
\noindent
Quello che non dice la routine \mye come venga descritto il polinomio interpolatore.
Aiutiamoci con il calcolo simbolico eseguito da Matlab, per calcolare il polinomio interpolatore in forma usuale.
Consideriamo di nuovo il polinomio di grado 2 che interpola le coppie ($-2,-2$), ($1,11$), ($3,17$).
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> syms x
>> simplify((-2*(x-1)*(x-3)/15)+(11*(x+2)*(x-3)/(-6))+(17*(x+2)*(x-1)/10))
ans =
-4/15*x^2+61/15*x+36/5
>> format long
>> -4/15
ans =
  -0.26666666666667
>> 61/15
ans =
   4.06666666666667
>> 36/5
ans =
   7.20000000000000
>>

\end{Verbatim}
\noindent
Testiamo l'uso di polyfit per quest'esempio
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> x=[-2 1 3];
>> y=[-2 11 17];
>> a=polyfit(x,y,2);
>> a
a =
  -0.26666666666667   4.06666666666667   7.19999999999999
>>
>>

\end{Verbatim}
Quindi, se $a=(a_k)_{k=1,\ldots,3}$, abbiamo
$$p_2(x)=a_1 \, x^2 + a_2 \, x + a_3.$$

\noindent
Pi\myu in generale, se $p_N$ \mye il polinomio interpolatore di grado $N$, e $a=(a_k)$ \mye il vettore ottenuto utilizzando {\tt{polyfit}}, allora
$$p_N(x)=a_1 \, x^N + a_2 \, x^{N-1} + \ldots+ a_{N+1}. $$


\subsection{Il comando {\tt{polyval}}}
Descriviamo il comando {\tt{polyval}}. Aiutandosi con l'help di Matlab
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> help polyval

  To get started, select "MATLAB Help" from the Help menu.


 POLYVAL Evaluate polynomial.
    Y = POLYVAL(P,X), when P is a vector of length N+1 whose elements
    are the coefficients of a polynomial, is the value of the
    polynomial evaluated at X.

        Y = P(1)*X^N + P(2)*X\^(N-1) + ... + P(N)*X + P(N+1)

    If X is a matrix or vector, the polynomial is evaluated at all
    points in X.  See also POLYVALM for evaluation in a matrix sense.

    Y = POLYVAL(P,X,[],MU) uses XHAT = (X-MU(1))/MU(2) in place of X.
    The centering and scaling parameters MU are optional output
    computed by POLYFIT.

    [Y,DELTA] = POLYVAL(P,X,S) or [Y,DELTA] = POLYVAL(P,X,S,MU) uses
    the optional output structure S provided by POLYFIT to generate
    error estimates, Y +/- delta.  If the errors in the data input to
    POLYFIT are independent normal with constant variance, Y +/- DELTA
    contains at least 50% of the predictions.

    See also POLYFIT, POLYVALM.

>>

\end{Verbatim}
\noindent
L'help ci suggerisce che quanto fornito da {\tt{polyfit}} \mye effettivamente un polinomio scritto nella forma
$$y = P(1) \cdot x^N + P(2) \cdot x^{(N-1)} + \dots + P(N) \cdot x + P(N+1),$$
come notato precedentemente.

\noindent
Se $a=(a_k)_{k=1, \ldots, N+1}$ e $s=(s_j)_{j=1, \ldots, M}$, la chiamata
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

t=polyval(a,s);

\end{Verbatim}
\noindent
valuta il polinomio
$$p_N(x)=a_1 \, x^N+ \ldots +a_{N+1}$$
nei nodi $s=(s_j)$ e pone $t=(t_j)$ con $t_j=p_N(s_j)$.

\subsection{Una funzione per il calcolo e la valutazione del polinomio interpolatore}
Avendo a disposizione i comandi {\tt{polyfit}} e {\tt{polyval}}, posti $$x=\{x_k\}_{k=1,\ldots,N+1}, \, y=\{y_k\}_{k=1,\ldots,N+1}, \,s=\{s_k\}_{k=1,\ldots,M}$$ \noindent vediamo di valutare nei punti $s_j$ il polinomio  $p_N$ tale che $$p_N(x_{k})=y_{k}.$$ A tal proposito definiamo la funzione {\tt{interpol}}
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

function t=interpol(x,y,s)

%----------------------------------------------
% Interpolazione
%
% In input:
% x: nodi.
% y: valori nei nodi.
% s: nodi su cui calcolare l'interpolante.
%
% In output:
% t: valori dell'interpolante o approssimante.
%----------------------------------------------

m=length(x)-1;
coeff=polyfit(x,y,m);
t=polyval(coeff,s);

\end{Verbatim}
Quale esempio torniamo di nuovo al polinomio $p_2$ di grado 2 che interpola le coppie ($-2,-2$), ($1,11$), ($3,17$). Usando Matlab e il calcolo simbolico abbiamo visto direttamente che 
$$p_2(x)=(-4/15) \cdot x^2+ (61/15) \cdot x+36/5.$$
In effetti si verifica numericamente che questo \mye il polinomio interpolante  ($-2,-2$), ($1,11$), ($3,17$)
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> format long
>> p2=inline('-4/15*x.^2+61/15*x+36/5');
>> feval(p2,-2)

ans =

  -1.999999999999999

>> feval(p2,1)

ans =

    11

>> feval(p2,3)

ans =

    17

>> 

\end{Verbatim}
Vediamo per prima cosa quanto valgono $p_2(-1)$, $p_2(0)$, $p_2(2)$.
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> format long
>> p2=inline('-4/15*x.^2+61/15*x+36/5');
>> feval(p2,-1)

ans =

   2.866666666666667

>> feval(p2,0)

ans =

   7.200000000000000

>> feval(p2,2)

ans =

  14.266666666666666

>> 

\end{Verbatim}
Verifichiamo di seguito tali risultati con la funzione {\tt{interpol}}.
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> % ASCISSE "x" E ORDINATE "y" CHE DEFINISCONO
>> % IL POLINOMIO INTERPOLATORE.
>> x=[-2 1 3];
>> y=[-2 11 17];
>> % ASCISSE IN CUI VALUTARE IL POLINOMIO INTERPOLATORE.
>> s=[-1 0 2];
>> % VALUTO IL POLINOMIO INTERPOLATORE.
>> t=interpol(x,y,s);
>> t=t'

t =

   2.866666666666664
   7.199999999999995
  14.266666666666662

>> 

\end{Verbatim}
Di conseguenza, a meno di decimali, {\tt{interpol}} fa quanto richiesto.

\section{Un esempio sull'interpolazione polinomiale in Matlab/Octave}
\smsp
\begin{enumerate}
\item Si implementi una function che calcola i nodi di Chebyshev-Gauss per un
intervallo qualsiasi.
\smsp
\item Si implementi poi una function che interpoli polinomialmente una
funzione che assume valori $y$ su un vettore di nodi $x$ che vengono
forniti in input. Tale funzione Matlab deve inoltre calcolare i valori $t$
che l'interpolante polinomiale $p_N$ assume nei nodi test $s$. Si testi il
codice, producendo dei grafici, sulle funzioni
\smsp
\begin{itemize}
\item $f(x)=\frac { 1 } { 1+x^2 } $ in $[-5,5]$.
\end{itemize}
usando $n$ nodi equispaziati (con alcuni valori di $n$ tra $6$ e $11$) e
$n$ nodi di Chebyshev-Gauss-Lobatto (con i medesimi valori di $n$), calcolando gli
errori in norma infinito tra la funzione e le interpolanti. In
particolare, si mostri (mediante grafici e/o valori dell'errore) che per
il controesempio di Runge (cf. {\cite{WIKRI}}, {\cite{WIKRF}}) l'aumento del numero di nodi equispaziati non migliora
la ricostruzione della funzione da parte dell'interpolante.
\end{enumerate}

 \begin{figure}\label{fig1}
 \centering
   {\includegraphics[scale=0.5,clip]{runge.eps}}
 \caption{Grafico della funzione di Runge $1/(1+x^2)$ nell'intervallo [$-5,5$] e delle sue interpolanti di grado $8$ nei nodi equispaziati e di Chebyshev-Gauss-Lobatto (rispettivamente linea continua, tratteggiata e a puntini, come da legenda).}
 \end{figure}

 \begin{figure}\label{fig1b}
 \centering
   {\includegraphics[scale=0.3,clip]{runge_12.eps}}
 \caption{Grafico della funzione di Runge $1/(1+x^2)$ nell'intervallo [$-5,5$] e della sua interpolante di grado $12$ nei nodi equispaziati (rispettivamente linea continua, tratteggiata, come da legenda.}
 \end{figure}
 
\subsection{Implementazione}
Si scrivano le functions {\tt{cheb.m}}, {\tt{interpol.m}}, {\tt{runge.m}}
definite rispettivamente come
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

function xc=cheb(a,b,n)
for m=1:1:n
    xc(m)=(a+b)/2-((b-a)/2)*cos(pi*(m-1)/(n-1));
end

\end{Verbatim}

\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

function [fx]=runge(x)
fx=1./(x.^2+1);

\end{Verbatim}

\noindent
Eseguire poi da Matlab/Octave il programma principale {\tt{esperimento.m}}
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

n=11;               % GRADO.
x=-5:10/n:5;        % NODI INTERP. (EQUISPAZ.).
y=runge(x);         % FUNZIONE NEI NODI EQUISP.
s=-5:10/(10*n):5;    % NODI TEST.
t=interpol(x,y,s);  % INTERPOLANTE NEI NODI TEST.

xcheb=cheb(-5,5,n); % NODI CHEB.
ycheb=runge(xcheb); % FUNZIONE NEI NODI CHEB.
tcheb=interpol(xcheb,ycheb,s);  % INTP. CHEB.
plot(s,runge(s),s,t,s,tcheb);   % PLOT INTP. VS RUNGE.
err_eqs=norm(runge(s)-t,inf);     % ABS. ERR. EQUISPAZ.
err_cheb=norm(runge(s)-tcheb,inf); % ABS. ERR. CHEB.
fprintf('\n \t [ABS.ERR.][EQS]: 2.2e [CHEB]: %2.2e',err_eqs,err_cheb);

\end{Verbatim}
Provando per diversi valori di $n$, e tralasciando i warnings di Matlab relativi a polyfit, otteniamo:
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

[N]:  2 [ABS.ERR.][EQS]: 6.46e-001 [CHEB]: 9.62e-001
[N]:  3 [ABS.ERR.][EQS]: 7.07e-001 [CHEB]: 6.46e-001
[N]:  4 [ABS.ERR.][EQS]: 4.38e-001 [CHEB]: 8.29e-001
[N]:  5 [ABS.ERR.][EQS]: 4.33e-001 [CHEB]: 4.58e-001
[N]:  6 [ABS.ERR.][EQS]: 6.09e-001 [CHEB]: 6.39e-001
[N]:  7 [ABS.ERR.][EQS]: 2.47e-001 [CHEB]: 3.11e-001
[N]:  8 [ABS.ERR.][EQS]: 1.04e+000 [CHEB]: 4.60e-001
[N]:  9 [ABS.ERR.][EQS]: 2.99e-001 [CHEB]: 2.04e-001
[N]: 10 [ABS.ERR.][EQS]: 1.92e+000 [CHEB]: 3.19e-001
[N]: 11 [ABS.ERR.][EQS]: 5.57e-001 [CHEB]: 1.32e-001
[N]: 12 [ABS.ERR.][EQS]: 3.66e+000 [CHEB]: 2.18e-001
[N]: 13 [ABS.ERR.][EQS]: 1.07e+000 [CHEB]: 8.41e-002
[N]: 14 [ABS.ERR.][EQS]: 7.15e+000 [CHEB]: 1.47e-001
[N]: 15 [ABS.ERR.][EQS]: 2.10e+000 [CHEB]: 5.33e-002

\end{Verbatim}
Si nota subito che
\smsp
\begin{itemize}
\item l'istruzione {\tt{m=length(x)-1;}} calcola il grado dell'interpolante che \mye uguale al numero di punti meno uno;
\smsp
\item i nodi di {\tt{cheb}}, sono quelli di Chebyshev-Gauss-Lobatto. Infatti per $m=1$

\begin{eqnarray}
xc(1) &=& {\frac {(a+b)} {2} } -{\frac {(b-a)} {2} } \cdot \cos \left( \pi \cdot {\frac {1-1} {n-1} } \right) \nonumber\\
      &=& {\frac {(a+b)} {2} } -{\frac {(b-a)} {2} } \cdot \cos(0) \nonumber\\
      &=& {\frac {(a+b)} {2} } -{\frac {(b-a)} {2} }  \nonumber\\
      &=& a
\end{eqnarray}

\noindent
mentre $m=n$ porge

\begin{eqnarray}
xc(n) &=& {\frac {(a+b)} {2} } -{\frac {(b-a)} {2} } \cdot \cos \left( \pi \cdot {\frac {n-1} {n-1} } \right) \nonumber\\
      &=& {\frac {(a+b)} {2} } -{\frac {(b-a)} {2} } \cdot \cos(\pi) \nonumber\\
      &=& {\frac {(a+b)} {2} } -{\frac {(b-a)} {2} } (-1)  \nonumber\\
      &=& b
\end{eqnarray}

\noindent
Osserviamo che a prima vista la routine cheb sembra produrre un set di nodi diversi da quelli di Chebyshev-Gauss-Lobatto (scalati) introdotti in (\ref{CGL}).
In realt\mya sono gli stessi come si pu\myo facilmente verificare matematicamente o in Matlab
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> N=10;
>> k=0:N;
>> t=-cos(k*pi/N);
>> t=sort(t);
>> t
t =
  Columns 1 through 7
   -1.0000   -0.9511   -0.8090   -0.5878   -0.3090   -0.0000    0.3090
  Columns 8 through 11
    0.5878    0.8090    0.9511    1.0000
>> xc=cheb(-1,1,N+1)
xc =
  Columns 1 through 7
   -1.0000   -0.9511   -0.8090   -0.5878   -0.3090   -0.0000    0.3090
  Columns 8 through 11
    0.5878    0.8090    0.9511    1.0000
>>

\end{Verbatim}
\smsp
\item il caso dei nodi equispaziati \mye semplice da programmare. Infatti la chiamata
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> a=-5;
>> b=5;
>> N=10;
>> h=(b-a)/N;
>> x=a:h:b
x =

  -5  -4  -3  -2  -1   0   1   2   3   4   5

>> length(x)
ans = 11
>>

\end{Verbatim}
\noindent
suggerisce come fissato $N$ si possa generare un set di $N+1$ punti equispaziati in [$a,b$] (comprendente gli estremi).
\smsp
\item l'errore dell'interpolante della funzione di Runge nei nodi equispaziati non converge a $0$. Osserviamo la parziale descrescita degli errori dall'iterata $2$ alla $4$ per poi aumentare peggiorando da iterazione ad iterazione. Similmente osserviamo la parziale descrescita degli errori dall'iterata $3$ alla $5$, dall'iterata $5$ alla $7$, per poi peggiorare sempre pi\myu. Il grafico in figura fa capire come l'errore sia particolarmente significativo in prossimit\mya degli estremi $-5$ e $5$.
\smsp
\item l'errore dell'interpolante della funzione di Runge nei nodi di Chebyshev-Gauss-Lobatto (scalati) converge a $0$ (si osservi la particolare decrescita
dei gradi pari e dispari).
\smsp
\item Ci si pu\myo chiedere perch\mye i nodi di Chebyshev-Gauss-Lobatto (scalati) vadano meglio. Ricordiamo che la funzione di Runge \mye $C^{\infty}([-5,5])$ e sussiste il seguente teorema dovuto a Bernstein (cf. \cite[p.136]{COM})

\begin{theorem}
Se $f \in C^1([a,b])$ con $[a,b]$ intervallo limitato e chiuso della retta reale, il polinomio $P_n$ di grado $n$ di interpolazione della funzione $f$ nei nodi di Chebyshev-Gauss di grado $n+1$ converge uniformemente a $f$ su $[a,b]$, per $n \rightarrow \infty $. Se inoltre $f \in C^2([a,b])$ si ha la seguente stima dell'errore
$$\|f-P_n\|_{\infty}=O(n^{-1/2}).$$
\end{theorem}

\noindent
Il comportamento dell'interpolante nei nodi di Chebyshev-Gauss-Lobatto \mye analogo.
\end{itemize}

\section{Esercizio}
Calcolare analiticamente il polinomio di terzo grado che interpola le coppie ($1,0$), ($2,2$), ($4,12$), ($5,21$). Quindi valutare tale polinomio nei punti di ascissa $-1$, $0$, $10$.

\section{Facoltativo e tecnico: sul calcolo dell'interpolante polinomiale}
Lanciamo in Matlab 6.1 il codice {\tt{esperimento}}, che fa un confronto tra nodi equispaziati e di Chebyshev per $n=12$ (quindi ci sono $13$ punti di sampling). Il risultato \mye il seguente
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> esperimento
 	 [ABS.ERR.][EQS]: 3.66e+000 [CHEB]: 2.18e-001
>>

\end{Verbatim}
\noindent
Variamo in {\tt{esperimento}} la variabile $n$, ponendola uguale a $13$. Matlab da' il seguente messaggio di warning:
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> esperimento
Warning: Polynomial is badly conditioned. Remove repeated data points
         or try centering and scaling as described in HELP POLYFIT.
> In C:\MATLAB6p1\toolbox\matlab\polyfun\polyfit.m at line 74
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\interpol.m
  at line 17
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\esperimento.m
  at line 5

 	 [ABS.ERR.][EQS]: 1.07e+000 [CHEB]: 8.41e-002
>>

\end{Verbatim}
\noindent
Poniamo ora $n=15$ \mye il risultato \mye anche peggio
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> esperimento
Warning: Polynomial is badly conditioned. Remove repeated data points
         or try centering and scaling as described in HELP POLYFIT.
> In C:\MATLAB6p1\toolbox\matlab\polyfun\polyfit.m at line 74
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\interpol.m
  at line 17
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\esperimento.m
  at line 5
Warning: Polynomial is badly conditioned. Remove repeated data points
         or try centering and scaling as described in HELP POLYFIT.
> In C:\MATLAB6p1\toolbox\matlab\polyfun\polyfit.m at line 74
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\interpol.m
   at line 17
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\esperimento.m
   at line 9

 	 [ABS.ERR.][EQS]: 2.10e+000 [CHEB]: 5.33e-002
>>

\end{Verbatim}
\noindent
Diamo una spiegazione. Il codice di {\tt{polyfit}} risolve il sistema lineare prodotto dalla matrice di Vandermonde $V$ (cf. {\cite{WIKV}}), con una fattorizzazione $QR$ (cf. \cite{WIKQR}). In altre parole se $V=(V_{i,j})$ con $V_{i,j}=x_i^{j-1}$ ($x_i$ sono le ascisse dei nodi di sampling prescelti), si scrive $A=Q*R$
con $Q$ ortonormale e $R$ triangolare superiore e quindi si risolve $Vc=y$ ($c$ sono i coefficenti del polinomio interpolante $p(x)=\sum_k c_k x^k$) come
soluzione del sistema $Rc=Q'*y$. Se $R$ \mye malcondizionata in norma $1$, pi\myu precisamente $\|R\|_1 \|R^{-1}\|_1>10^{10}$, Matlab/Octave segnala un warning. La cosa \mye pi\myu elaborata di cos\myi in quanto {\tt{polyfit}} usa la cosidetta {\sl{economy size version}} della fattorizzazione QR, ma tralasciamo i dettagli per chiarezza.

\noindent
Per sopperire a questi problemi una delle possibili soluzioni consiste nell'usare la cosidetta {\sl{formulazione baricentrica}} dei polinomi di Lagrange (cf. {\cite{TRE}}, {\cite{VW}}). Questa \mye implementata in Matlab nel codice {\tt{barylag}} {\cite{VW}}. Una volta scaricato e scompattato il file zip, e digitato il codice {\tt{esperimento\_bar}}
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

n=15;                    % GRADO.
x=(-5:10/n:5)';       % NODI INTERP. (EQUISPAZ.).
y=runge(x);        % FUNZIONE NEI NODI EQUISP.
s=(-5:10/(10*n):5)';  % NODI TEST.
data_eqs=[x y];
t=barylag(data_eqs,s);

xcheb=(cheb(-5,5,n))';   % NODI CHEB.
ycheb=runge(xcheb);   % FUNZIONE NEI NODI CHEB.
data_cheb=[xcheb ycheb];
tcheb=barylag(data_cheb,s);
                      % INTP. CHEB.
plot(s,runge(s),s,t,s,tcheb);   % PLOT INTP. VS RUNGE.
err_eqs=norm(runge(s)-t,inf);     % ABS. ERR. EQUISPAZ.
err_cheb=norm(runge(s)-tcheb,inf); % ABS. ERR. CHEB.
fprintf('\n \t [ABS.ERR.][EQS]: %2.2e [CHEB]: %2.2e',err_eqs,err_cheb);

\end{Verbatim}
\noindent
abbiamo
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> esperimento_bar

 	 [ABS.ERR.][EQS]: 2.10e+000 [CHEB]: 5.33e-002

\end{Verbatim}
\noindent
Per curiosit\mya paragoniamo i due codici {\tt{esperimento}} ed {\tt{esperimento\_bar}} per $n=100$, ottenendo rispettivamente
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> esperimento
Warning: Polynomial is badly conditioned. Remove repeated data points
         or try centering and scaling as described in HELP POLYFIT.
> In C:\MATLAB6p1\toolbox\matlab\polyfun\polyfit.m at line 74
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\interpol.m
   at line 17
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\esperimento.m
   at line 5
Warning: Polynomial is badly conditioned. Remove repeated data points
         or try centering and scaling as described in HELP POLYFIT.
> In C:\MATLAB6p1\toolbox\matlab\polyfun\polyfit.m at line 74
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\interpol.m
   at line 17
  In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\esperimento.m
   at line 9

 	 [ABS.ERR.][EQS]: 5.02e+019 [CHEB]: 2.14e+007
>>

\end{Verbatim}
\noindent
e
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

>> esperimento_bar

 	 [ABS.ERR.][EQS]: 4.57e+005 [CHEB]: 5.62e-009
>>

\end{Verbatim}
\noindent
segno che i risultati ottenuti con {\tt{polyfit}} sono inaccettabili, mentre quelli di {\tt{barylag}} sono perfettamente in parallelo con quanto detto nelle sezioni precedenti relativamente al fenomeno di Runge (si osservi che nel primo caso l'interpolazione nei nodi di Chebyshev sembra divergere, in disaccordo con
la teoria!).

\section{Sulla formula del resto}
Si consideri la funzione $$f(x):=\log{(x)}$$ e si supponga di conoscere i valori per $x_0=1$, $x_1=1.1$ ed $x_2=1.2$. Si calcoli il polinomio di secondo
grado
$p_2$ che interpola tali punti, e lo si valuti in $s=1.09$. Quindi si utilizzi la formula dell'errore per funzioni di classe $C^{N+1}$ ({\sl{teorema
del resto}})
\begin{equation}\label{2a}
f(x)-p_N(x)= f^{(N+1)}(\xi) {\frac { \prod_{i=0}^{N} (x-x_i)  }{(N+1)!}}, \xi \in I(x_0,\ldots,x_N)
\end{equation}
per valutare
$$|\log{(s)}-p_2(s)|.$$
\\
\\
{\bf{Risoluzione.}} Il polinomio interpolatore \mye per quanto visto
$$p(x)=\log{(1)} L_0(x)+\log{(1.1)} L_1(x)+\log{(1.2)} L_2(x),$$
dove $L_j$ \mye il $j$-simo polinomio di Lagrange.

Dalla formula del resto (per $f(x)=\log{(x)}$, $x=1.09$, $x_0=1$, $x_1=1.1$, $x_2=1.2$ ed $N=2$) otteniamo:
$$|\log{(1.09)}-p_2(1.09)|= |{\frac {2}{\xi^3}} {\frac {(1.09-1)(1.09-1.1)(1.09-1.2)}{6}} |,$$
in quanto la derivata terza di $\log{(x)}$ \mye ${\frac {2}{x^3}}$. Siccome $\xi \in (1,1.2)$, dalla decrescenza di ${\frac {2}{x^3}}$ deduciamo che
$$1.1574 \approx {\frac {2}{{1.2}^3}} < {\frac {2}{\xi^3}} < {\frac {2}{{1}^3}}=2.$$ Essendo
$$(1.09-1)(1.09-1.1)(1.09-1.2) \approx 9.9 \cdot 10^{-5}$$
ricaviamo quindi che l'errore dell'interpolante \mye
$$  1.9097  \cdot 10^{-5} \approx 1.1574 \cdot 9.9 \cdot 10^{-5} / 6 \leq |\log{(s)}-p_2(s)| \leq 2 \cdot 9.9 \cdot 10^{-5} / 6=3.3 \cdot 10^{-5}.$$
Utilizzando la funzione {\sl{interpol.m}} precedentemente introdotta, si verifica che
$$p_2(1.09) \approx 0.08615260795055$$
mentre
$$\log{(1.09)} \approx 0.08617769624105$$
e quindi $$|\log{(1.09)}-p_2(1.09)| \approx 2.51 \cdot 10^{-5}$$ perfettamente in linea con le stime fornite.

{\vspace{0.3cm}}

\noindent
{\bf{Esercizio facoltativo.}}
Effettuare un programma Matlab che calcoli il valore assunto in $1.09$ dal polinomio interpolatore della funzione $\log$ relativamente ai punti $1$,
$1.1$, $1.2$. E' buona l'approssimazione fornita dal polinomio interpolatore?
(Suggerimento: si noti che
\smsp
\begin{enumerate}
\item il programma \mye una variante di quanto visto in {\tt{esperimento.m}}, per una adeguata scelta dei nodi
{\tt{x}}, dei valori {\tt{y}}, del punto {\tt{s}};
\smsp
\item eliminare la parte relativa ai nodi di Chebyshev-Gauss-Lobatto;
\smsp
\item il plot non \mye molto indicativo;
\smsp
\item siccome il comando {\tt{norm(v,inf)}} calcola per $v=\{v_i\}$ la quantit\mya
$$\|v\|_{\infty}=\max_i |v_i|$$
visto che si deve valutare l'errore su un solo punto, il comando  {\tt{norm(...,inf)}} in {\tt{esperimento.m}} pu\myo essere sostituito da
{\tt{abs(...)}} (rifletterci sopra);
\smsp
\item la funzione {\tt{log}} \mye predefinita in Matlab/Octave e quindi non serve ridefinirla come funzione.
\end{enumerate}


{\vspace{0.3cm}}


\noindent
{\bf{Esercizio facoltativo.}} Aiutandosi con Matlab/Octave eseguire un programma che calcoli l'interpolante della funzione $$f(x):=\exp{(x)}$$
relativamente alle ascisse $x=1$, $x=1.1$ ed $x=1.2$. Si calcoli il polinomio di secondo grado
$p_2$ che interpola tali punti, e lo si valuti in $s=1.09$. Fornire una stima dell'errore e verificarne la bont\mya rispetto al risultato esatto.

{\vspace{0.3cm}}

\noindent
{\bf{Esercizio facoltativo.}} Fissati $a=-1$, $b=1$, $n=15$, si plottino i nodi di Chebyshev-Gauss. Si suggerisce di utilizzare la function {\tt{cheb.m}} e per il
plottaggio un comando del tipo
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

plot(x,y,'r-o')

\end{Verbatim}
\noindent Ricordiamo che
\smsp
\begin{itemize}
\item l'opzione {\tt{r-o}}
\smsp
\begin{enumerate}
\item disegna un cerchietto rosso per ognuno dei punti ($x_1,y_1$), $\ldots$, ($x_i,y_i$), $\ldots$, ($x_n,y_n$);
\smsp
\item per $i=1,\ldots, n-1$, unisce i punti ($x_i,y_i$), ($x_{i+1},y_{i+1}$) con un segmento rosso.
\end{enumerate}
\smsp
\item essendo importante disegnare solo le ascisse (e non le ordinate), quali ordinate si pu\myo porre
\begin{Verbatim}[fontsize=\small, formatcom=\color{blue}]

y=zeros(size(x));

\end{Verbatim}
\end{itemize}

Una volta completato l'esercizio si osservi la particolare disposizione dei nodi di Chebyshev-Gauss. Si accumulano verso gli estremi dell'intervallo?

\section{Online}
Si possono reperire online varie bibliografie dei matematici sopra citati:
\smsp
\begin{enumerate}
\item \href{http://en.wikipedia.org/wiki/Chebyshev}{http://en.wikipedia.org/wiki/Chebyshev}
\smsp
\item \href{http://www-history.mcs.st-andrews.ac.uk/Biographies/Chebyshev.html}{http://www-history.mcs.st-andrews.ac.uk/Biographies/Chebyshev.html}
\smsp
\item \href{http://it.wikipedia.org/wiki/Lagrange}{http://it.wikipedia.org/wiki/Lagrange}
\smsp
\item \href{http://www-history.mcs.st-andrews.ac.uk/Biographies/Lagrange.html}{http://www-history.mcs.st-andrews.ac.uk/Biographies/Lagrange.html}
\smsp
\item \href{http://en.wikipedia.org/wiki/Isaac\_Newton}{http://en.wikipedia.org/wiki/Isaac\_Newton}
\end{enumerate}

\noindent
Per quanto riguarda l'interpolazione:
\smsp
\begin{enumerate}
\item \href{http://it.wikipedia.org/wiki/Interpolazione\_\%28matematica\%29}{http://it.wikipedia.org/wiki/Interpolazione\_\%28matematica\%29}
\smsp
\item \href{http://it.wikipedia.org/wiki/Interpolazione\_polinomiale}{http://it.wikipedia.org/wiki/Interpolazione\_polinomiale}
\smsp
\item \href{http://en.wikipedia.org/wiki/Interpolation}{http://en.wikipedia.org/wiki/Interpolation}
\smsp
\item \href{http://en.wikipedia.org/wiki/Polynomial\_interpolation}{http://en.wikipedia.org/wiki/Polynomial\_interpolation}
\smsp
\item \href{http://it.wikipedia.org/wiki/Fenomeno\_di\_Runge}{http://it.wikipedia.org/wiki/Fenomeno\_di\_Runge}
\smsp
\item \href{http://en.wikipedia.org/wiki/Runge\%27s\_phenomenon}{http://en.wikipedia.org/wiki/Runge\%27s\_phenomenon}
\smsp
\item \href{http://en.wikipedia.org/wiki/Newton\_polynomial}{http://en.wikipedia.org/wiki/Newton\_polynomial}
\smsp
\item \href{http://it.wikipedia.org/wiki/Nodi\_di\_Chebyshev}{http://it.wikipedia.org/wiki/Nodi\_di\_Chebyshev}
\smsp
\item \href{http://en.wikipedia.org/wiki/QR\_decomposition}{http://en.wikipedia.org/wiki/QR\_decomposition}
\smsp
\item \href{http://en.wikipedia.org/wiki/Vandermonde\_matrix}{http://en.wikipedia.org/wiki/Vandermonde\_matrix}
\end{enumerate}

\section{Frasi celebri}
\smsp
\begin{enumerate}
\item To isolate mathematics from the practical demands of the sciences is to invite the sterility of a cow shut away from the bulls. (Chebyshev)
\smsp
\item God made the integers; all else is the work of man. (Kronecker).
\smsp
\item Before we take to sea we walk on land. Before we create we must understand. (Lagrange)
\smsp
\item When we ask advice, we are usually looking for an accomplice. (Lagrange)
\smsp
\item It took the mob only a moment to remove his head; a century will not suffice to reproduce it. [said about the chemist Lavoisier] (Lagrange)
\smsp
\item I do not know. [summarising his life's work] (Lagrange)
\smsp
\item These astronomers are queer; they won't believe in a theory unless it agrees with their observations. (Lagrange)
\smsp
\ item How lucky was Newton! In his time the system of the world was still to be discovered! (Lagrange)
\end{enumerate}

\begin{thebibliography}{99}
\bibitem{ATK} K. Atkinson, {\em An Introduction to Numerical Analysis\/},
Wiley, (1989).
\bibitem{TRE} J.P. Berrut and L.N.Trefethen, {\sl{Barycentric Lagrange interpolation}}, (SIAM Review, 2004), \\ {\href{http://web.comlab.ox.ac.uk/oucl/work/nick.trefethen/barycentric.pdf}{http://web.comlab.ox.ac.uk/oucl/work/nick.trefethen/barycentric.pdf}}.
\bibitem{COM} V. Comincioli, {\sl{Analisi Numerica, metodi modelli
applicazioni}}, Mc Graw-Hill, 1990.

\bibitem{MTCH} Mac Tutor, Chebyshev biography, \\ {\href{http://www-history.mcs.st-andrews.ac.uk/Biographies/Chebyshev.html}{http://www-history.mcs.st-andrews.ac.uk/Biographies/Chebyshev.html}}.
\bibitem{MTLA} Mac Tutor, Lagrange biography, \\ {\href{http://www-history.mcs.st-andrews.ac.uk/Biographies/Lagrange.html}{http://www-history.mcs.st-andrews.ac.uk/Biographies/Lagrange.html}}.

\bibitem{MOL} The MathWorks Inc., {\sl{Numerical Computing with Matlab}},
{\tt{http://www.mathworks.com/moler}}.
\bibitem{QUA} A. Quarteroni e F. Saleri, {\sl{Introduzione al calcolo scientifico}}, Springer Verlag, 2006.
\bibitem{QUABIG} A. Quarteroni, R. Sacco e F. Saleri, {\sl{Matematica numerica}}, Springer Verlag, 1998.
\bibitem{WIKRI} Wikipedia, Fenomeno di Runge, \\ {\href{http://it.wikipedia.org/wiki/Fenomeno\_di\_Runge}{http://it.wikipedia.org/wiki/Fenomeno\_di\_Runge}}.
\bibitem{WIKIN} Wikipedia, Interpolazione polinomiale, \\ {\href{http://it.wikipedia.org/wiki/Interpolazione\_polinomiale}{http://it.wikipedia.org/wiki/Interpolazione\_polinomiale}}.
\bibitem{WIKIN} Wikipedia, Isaac Newton, \\ {\href{http://en.wikipedia.org/wiki/Isaac\_Newton}{http://en.wikipedia.org/wiki/Isaac\_Newton}}.
\bibitem{WIKLI} Wikipedia, Lagrange, \\ {\href{http://it.wikipedia.org/wiki/Lagrange}{http://it.wikipedia.org/wiki/Lagrange}}.
\bibitem{WIKNP} Wikipedia, Newton polynomial, \\ {\href{http://en.wikipedia.org/wiki/Newton\_polynomial}{http://en.wikipedia.org/wiki/Newton\_polynomial}}.
\bibitem{WIKNC} Wikipedia, Nodi di Chebyshev, \\ {\href{http://it.wikipedia.org/wiki/Nodi\_di\_Chebyshev}{http://it.wikipedia.org/wiki/Nodi\_di\_Chebyshev}}.
\bibitem{WIKPI} Wikipedia, Polynomial interpolation, \\ {\href{http://en.wikipedia.org/wiki/Polynomial\_interpolation}{http://en.wikipedia.org/wiki/Polynomial\_interpolation}}.
\bibitem{WIKRF} Wikipedia, Runge's phenomenon, \\ {\href{http://en.wikipedia.org/wiki/Runge\%27s\_phenomenon}{http://en.wikipedia.org/wiki/Runge\%27s\_phenomenon}}.
\bibitem{WIKQR} Wikipedia, QR decomposition, \\ {\href{http://en.wikipedia.org/wiki/QR\_decomposition}{http://en.wikipedia.org/wiki/QR\_decomposition}}.
\bibitem{WIKV} Wikipedia, Vandermonde matrix, \\ {\href{http://en.wikipedia.org/wiki/Vandermonde\_matrix}{http://en.wikipedia.org/wiki/Vandermonde\_matrix}}.
\bibitem{VW} Greg von Winckel, {\tt{barylag.m}}, \\ {\href{http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=4478\&objectType=FILE}{http://www.mathworks.com/matlabcentral/fileexchange}}.
\end{thebibliography}

\end{document}








