
\documentclass{beamer}

\input{hal_prefs_lab}


\title[Introduzione\hspace{2em}\insertframenumber/
\inserttotalframenumber]{Chebfun}

\author{Alvise Sommariva}
\institute{Universit\`a degli Studi di Padova\\Dipartimento di Matematica}
\date{\today}

\begin{document}

%-----------------------------------
% TITOLO!!!
%-----------------------------------
\frame{\titlepage}

\begin{frame}[fragile]
\frametitle{Introduzione a Chebfun}
In questa nota, descriveremo i comandi di base dell'ambiente Chebfun, di rilevante importanza per l'analisi numerica ed in particolare per la teoria dell'approssimazione.

Utilizzeremo tale ambiente per studiare in particolare alcuni problemi quali:

\bit
\item interpolazione in nodi equispaziati;
\item interpolazione in nodi di Chebyshev;
\item migliore approssimazione con algoritmo di Remez.
\eit


Per una guida si consulti

{\blues{
{\vspace{0.1cm}}
\begin{center}
\href{http://www.chebfun.org/docs/guide/}{http://www.chebfun.org/docs/guide/}
\end{center}
{\vspace{0.25cm}}
}}



mentre per installare l'ambiente in Matlab, si veda

{\blues{
{\vspace{0.1cm}}
\begin{center}
\href{http://www.chebfun.org/download/}{http://www.chebfun.org/download/}
\end{center}
{\vspace{0.25cm}}
}}





\end{frame}


\begin{frame}[fragile]
\frametitle{Introduzione a Chebfun}
Quanto faremo di seguito, \mye tratto ed adattato da 
{\blues{
{\vspace{0.1cm}}
\begin{center}
\href{http://www.chebfun.org/docs/guide/guide01.html}{http://www.chebfun.org/docs/guide/guide01.html}
\end{center}
{\vspace{0.25cm}}
}}

L'idea di Chebfun consiste nell'idea che per rappresentare funzioni regolari spesso basta interpolare in 20 o 30 nodi di Chebyshev, ma che tale processo, qualora implementato adeguatamente, rimane stabile anche con migliaia o milioni di nodi di Chebyshev. 

\smsp

Avendo questo in mente, nella prima versione di Chebfun, ad una funzione $f$, l'ambiente {\tt{chebfun}}, tramite procedure adattative, determinava il numero di punti $n+1$ di Chebyshev per cui l'interpolante $p_n$ era tale da approssimare $f$ con un errore relativo di $10^{-15}$.

\end{frame}


\begin{frame}[fragile]
\frametitle{Introduzione a Chebfun}

Nelle versioni successive, l'ambiente \mye stato adeguato per poter trattare adeguatamente funzioni regolari a pezzi, determinando automaticamente i punti in cui suddividere l'approssimazione. 

Per capire questo punto, consideriamo la funzione 
{\reds{
$$
f(x)=|x-0.3|
$$
}}

\bignsp

Digitiamo

\begin{lstlisting} [frame=single]
f = chebfun('abs(x-.3)');
 \end{lstlisting}
 
 \bignsp
 
 e otteniamo quale risposta
 
 \begin{lstlisting} [frame=single]
Warning: Function not resolved using 65537 pts. Have you tried 'splitting on'? 
 \end{lstlisting}
 
 
\bignsp
 
 col significato che troppi punti vengono utilizzati per studiare la funzione $f$.
 

\end{frame}




\begin{frame}[fragile]
\frametitle{Introduzione a Chebfun}

Se invece chiediamo all'ambiente {\tt{chebfun}} di suddividere il dominio, il risultato migliora. Infatti
 
 \begin{lstlisting} [frame=single]
f = chebfun('abs(x-.3)','splitting','on');
 \end{lstlisting}

\bignsp

non da' problemi. Per capire cosa sia successo e quali punti abbia usato {\tt{chebfun}}, digitiamo 

 \begin{lstlisting} [frame=single]
>> f
f =

   chebfun column (2 smooth pieces)
       interval       length     endpoint values  
[      -1,     0.3]        2       1.3        0 
[     0.3,       1]        2         0      0.7 
vertical scale = 1.3    Total length = 4
>> 
  \end{lstlisting}
  
 Evidentemente {\tt{chebfun}} ha trovato il punto {\sl{critico}} $0.3$, e utilizzato l'interpolazione su due punti di Chebyshev scalati negli intervalli per determinare un approssimazione della funzione $f$.
  
\end{frame}



\begin{frame}[fragile]
\frametitle{Esempio 1. Interpolazione in nodi equispaziati.}

Consideriamo la funzione di Runge
$$
f(x)=\frac{1}{1+25 x^2}, \smhsp x \in [-1,1].
$$

e digitiamo

 \begin{lstlisting} [frame=single]
>> x=chebfun('x'); % Inizializzazione.
>> f=1./(1+25*x.^2); % RUNGE.
>> f
f =

   chebfun column (1 smooth piece)
       interval       length     endpoint values  
[      -1,       1]      181     0.038    0.038 
vertical scale =   1 
>> 
  \end{lstlisting}
  
  \smnsp
  
 La funzione di Runge \mye stata approssimata con un errore relativo di $10^{-15}$ utilizzando 181 nodi di Chebyshev.
  
\end{frame}

\begin{frame}[fragile]
\frametitle{Esempio 1. Interpolazione in nodi equispaziati.}

Digitiamo nel file {\blues{\href{http://www.math.unipd.it/~alvise/AN_2018/LABORATORI/CHEBFUN/MATLAB/esempio1.m}{esempio1.m}}}

 \begin{lstlisting} [frame=single]
function [eequi,echeb]=esempio1

d = [-1, 1]; % INTERVALLO.
ff = @(x) 1./(1+25*x.^2); % FZ. RUNGE
f=chebfun(ff,d);
eequi=[];
echeb=[];
nn=1:1:100;
for n=nn
    x = linspace(d(1), d(2), n+1);
    p = chebfun.interp1(x, ff(x)); % INTERPOLAZIONE NEI NODI x.
    fc = chebfun(ff, n+1);
    eequi=[eequi norm(f-p,inf)];
    echeb=[echeb norm(f-fc,inf)];
end

clf;
semilogy(nn,eequi,'r-');
pause;
semilogy(nn,echeb,'r-');
  \end{lstlisting}
  
  
  \bignsp
  
e di seguito
  
   \begin{lstlisting} [frame=single]
>> [eequi,echeb]=esempio1;
  \end{lstlisting}
  
\end{frame}

\begin{frame}[fragile]
\frametitle{Esempio 1. Interpolazione in nodi equispaziati.}

Quale risultato abbiamo le seguenti figure.


 \begin{figure}
 \centering
   {\includegraphics[width=8cm]{fig1.eps}}
   
   \bignsp
   
 \caption{Grafico in scala semilogaritmica degli errori delle interpolanti in nodi equispaziati, al crescere del numero di nodi. }
 \end{figure}

\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 1. Interpolazione in nodi equispaziati.}


 \begin{figure}
 \centering
   {\includegraphics[width=8cm]{fig2.eps}}
   
   \bignsp
   
 \caption{Grafico in scala semilogaritmica degli errori delle interpolanti in nodi di Chebyshev al crescere del numero di nodi. }
 \end{figure}

\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 1. Interpolazione in nodi equispaziati.}

I grafici mostrano che

\bit
\item l'interpolazione in $n+1$ nodi equispaziati fornisce polinomi $p_n$ che non convergono alla funzione di Runge $f$;
\item l'interpolazione in $n+1$ nodi di Chebyshev fornisce polinomi $p_n$ che convergono alla funzione di Runge $f$.
\eit 

Dal punto di vista della programmazione si noti che

\bit
\item nella chiamata {\tt{f=chebfun(ff,d);}} si pu\myo dire in quale intervallo approssimare $ff$ tramite funzioni polinomiali a tratti di tipo {\tt{chebfun}}.
\item nella chiamata {\tt{fc = chebfun(ff, n+1);}} si determina il polinomio di Chebyshev di grado $n$ che interpola $ff$.
\item nella chiamata {\tt{norm(f-p,inf);}} si approssima l'errore in norma infinito tra $f$ e $p$.
\eit

\end{frame}


\begin{frame}[fragile]
\frametitle{Esercizio 1.}

\begin{esercizio}[1]
Sapendo che l'errore in norma infinito dell'interpolante nei nodi di Chebyshev \mye asintoticamente del tipo $C \gamma^n$, determinare $C$ e $\gamma$.

\smsp

Suggerimento: 

\bit
\item Calcolare il rapporto tra $e_n \approx C \gamma^n$ e $e_{n-2}\approx C \gamma^{n-2}$ e dedurre $\gamma$.
\item Noto $\gamma$, calcolare $C$.
\eit
\end{esercizio}
\end{frame}




\begin{frame}[fragile]
\frametitle{Esercizio 2.}

\begin{esercizio}[2]
\begin{fns}
Si modifichi la precedente routine cos\myi da studiare l'approssimazione, similmente all'esempio precedente, le funzioni

\begin{enumerate}
\item $f(x)=|x-0.3|$;
\item $f(x)=\exp(x^2)$;
\item $f(x)=\exp(x)$;
\item $f(x)=\sin(x)$;
\item $f(x)=\sl{sinc}(x)$ dove $\sl{sinc(x)}=\frac{\sin(x)}{x}$ se $x \neq 0$, $1$ se $x=0$ (funzione predefinita in {\tt{chebfun}}). 
\end{enumerate}

\bit
\item Serve {\tt{'splitting', 'on'}}? 
\item Qual'e' il numero di punti di Chebyshev affinch\mye la funzione sia approssimata alla precisione di macchina in ogni esempio?
\eit
\end{fns}
\end{esercizio}
\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 2. Miglior approssimante in norma infinito.}

Il comando {\tt{remez}} di una funzione $f$ definita tramite {\tt{chebfun}} fornisce la miglior approssimante in norma infinito di $f$. Vediamo un esempio, salvato in 
{\blues{\href{http://www.math.unipd.it/~alvise/AN_2018/LABORATORI/CHEBFUN/MATLAB/esempio2.m}{esempio2.m}}}
.

 \begin{lstlisting} [frame=single]
function esempio2

d = [-1, 1]; % INTERVALLO.
ff = @(x) 1./(1+25*x.^2);
f=chebfun(ff,d,'splitting','on');
n=10;
p = remez(f,n); % MIGLIOR APPROX GRADO n
fc = chebfun(ff, n+1); % INTP. CHEB.

erem=norm(f-p,inf);
echeb=norm(f-fc,inf);

fprintf('\n\t REMEZ: %1.5e',erem);
fprintf('\n\t CHEBYSHEV: %1.5e',echeb);
 \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Esempio 2. Miglior approssimante in norma infinito.}

Digitiamo quindi in workspace

 \begin{lstlisting} [frame=single]
>>  esempio2;
 
 	 REMEZ: 6.59229e-02
 	 CHEBYSHEV: 1.32197e-01 
 
>>  
 \end{lstlisting}

 \bignsp
 
\bit
\item Come previsto la miglior approssimante di grado $n$ offre risultati migliori dell'interpolante in $n+1$ nodi di Chebyshev. 
\item D'altro canto la differenza non \mye molta, relativamente agli errori assoluti compiuti.
\item Si noti che nella chiamata {\tt{f=chebfun(ff,d,'splitting','on');}} si pu\myo dire in quale intervallo approssimare $ff$ tramite funzioni polinomiali a tratti.
\item Si noti che nella chiamata {\tt{fc = chebfun(ff, n+1);}} si determina il polinomio di Chebyshev di grado $n$ che interpola $ff$.
\eit

\end{frame}



\begin{frame}[fragile]
\frametitle{Esercizio 3.}

\begin{esercizio}[3]
Si modifichi la routine {\tt{esempio1.m}} utilizzando quanto visto in {\tt{esempio2.m}}, cos\myi da paragonare la miglior approssimante di grado $n=10,20,\ldots,50$ con l'interpolante in $n+1$ nodi di Chebyshev, relativamente alle funzioni

\begin{enumerate}
\item $f(x)=|x-0.3|$;
\item $f(x)=\exp(x^2)$;
\item $f(x)=\exp(x)$;
\item $f(x)=\sin(x)$;
\item $f(x)=\sl{sinc}(x)$ dove $\sl{sinc(x)}=\frac{\sin(x)}{x}$ se $x \neq 0$, $1$ se $x=0$ (funzione predefinita in {\tt{chebfun}}). 
\end{enumerate}

\end{esercizio}

\end{frame}

\begin{frame}[fragile]
\frametitle{Esercizio 3.}

\begin{vuoto}


\bit
\item Serve {\tt{'splitting', 'on'}}? 
\item Negli esempi forniti \mye molta la differenza tra l'usare l'interpolante in nodi di Chebyshev e la miglior approssimante?
\eit

\end{vuoto}
\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 3. Costanti di Lebesgue.}
Dalla teoria \mye noto che asintoticamente la crescita della costante di Lebesgue in nodi di 
\bit
\item Chebyshev, unisolventi a grado $n$ \mye 
$$
\Lambda_n \sim \frac{2}{\pi} (\log(n)+\gamma+\log(\frac{8}{\pi}))
$$
dove $\gamma=0.57721566490153286060651209008240243104215933593992$ \mye la costante di Eulero-Mascheroni.
\item nodi equispaziati, unisolventi a grado $n$ \mye 
$$
\Lambda_n \sim  \frac{2^{n+1}}{\exp(1) \, n \log(n)} 
$$

\eit

\end{frame}

\begin{frame}[fragile]
\frametitle{Esempio 3. Costanti di Lebesgue.}
Lo verifichiamo tramite un esempio, salvato in 
{\blues{\href{http://www.math.unipd.it/~alvise/AN_2018/LABORATORI/CHEBFUN/MATLAB/esempio3.m}{esempio3.m}}}

 \begin{lstlisting} [frame=single]
function esempio3

fprintf('\n \t COSTANTI DI LEBESGUE, NODI CHEBYSHEV');
max_deg=50;
em=0.57721566490153286060651209008240243104215933593992; %EULERO-MASCHERONI
for deg=1:max_deg
    x=chebpts(deg); % PUNTI DI CHEB. IN CHEBFUN. PS: length(x)=deg.
    [L,Lconst]=lebesgue(x); % FUNZIONE E COSTANTE DI LEBESGUE.
    lebesgue_constants(deg)=Lconst;
    est(deg)=(2/pi)*(log(deg+1)+em+log(8/pi)); % STIMA COSTANTE LEBESGUE.
    fprintf('\n \t DEG: %3.0f LEBESGUE CONST.: %1.4e EST.:% 1.4e',...
        deg,Lconst,est(deg));
end

plot(1:max_deg,lebesgue_constants,'ro-');
\end{lstlisting} 
\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 3. Costanti di Lebesgue.}
Come risultato otteniamo
 \begin{lstlisting} [frame=single]
           COSTANTI DI LEBESGUE, NODI CHEBYSHEV
   DEG:   1 LEBESGUE CONST.: 1.0000e+00 EST.: 1.4038e+00
 	 DEG:   2 LEBESGUE CONST.: 1.0000e+00 EST.: 1.6619e+00
 	 DEG:   3 LEBESGUE CONST.: 1.2500e+00 EST.: 1.8451e+00
 	 DEG:   4 LEBESGUE CONST.: 1.6667e+00 EST.: 1.9871e+00
 	 DEG:   5 LEBESGUE CONST.: 1.7988e+00 EST.: 2.1032e+00
 	 DEG:   6 LEBESGUE CONST.: 1.9889e+00 EST.: 2.2013e+00
 	 DEG:   7 LEBESGUE CONST.: 2.0826e+00 EST.: 2.2863e+00
 	 DEG:   8 LEBESGUE CONST.: 2.2022e+00 EST.: 2.3613e+00
 	 DEG:   9 LEBESGUE CONST.: 2.2747e+00 EST.: 2.4284e+00
 	 DEG:  10 LEBESGUE CONST.: 2.3619e+00 EST.: 2.4891e+00
 	 DEG:  11 LEBESGUE CONST.: 2.4210e+00 EST.: 2.5445e+00
 	 DEG:  12 LEBESGUE CONST.: 2.4894e+00 EST.: 2.5954e+00
 	 
	 . . . . . . . 
	 
 	 DEG:  40 LEBESGUE CONST.: 3.2948e+00 EST.: 3.3267e+00
 	 DEG:  41 LEBESGUE CONST.: 3.3105e+00 EST.: 3.3420e+00
 	 DEG:  42 LEBESGUE CONST.: 3.3267e+00 EST.: 3.3570e+00
 	 DEG:  43 LEBESGUE CONST.: 3.3416e+00 EST.: 3.3716e+00
 	 DEG:  44 LEBESGUE CONST.: 3.3570e+00 EST.: 3.3859e+00
 	 DEG:  45 LEBESGUE CONST.: 3.3712e+00 EST.: 3.3999e+00
 	 DEG:  46 LEBESGUE CONST.: 3.3859e+00 EST.: 3.4136e+00
 	 DEG:  47 LEBESGUE CONST.: 3.3996e+00 EST.: 3.4270e+00
 	 DEG:  48 LEBESGUE CONST.: 3.4136e+00 EST.: 3.4401e+00
 	 DEG:  49 LEBESGUE CONST.: 3.4267e+00 EST.: 3.4530e+00
 	 DEG:  50 LEBESGUE CONST.: 3.4402e+00 EST.: 3.4656e+00
\end{lstlisting} 
\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 3. Costanti di Lebesgue.}
  \begin{figure}[h!]\label{fig1a}
 \centering
   {\includegraphics[scale=0.40,clip]{plot_cheb.eps}}
 \caption{Grafico della costante di Lebesgue dei nodi di Chebyshev, per gradi compresi tra 1 e 50.}
 \end{figure}
\end{frame}



\begin{frame}[fragile]
\frametitle{Esercizio 4.}

\begin{esercizio}[4]
Verificare che per nodi equispaziati, unisolventi a grado $n$, per $n=1,\ldots,50$ si ha che 
$$
\frac{2^{n-2}}{n^2} \leq \Lambda_n \leq \frac{2^{n+3}}{n}
$$
come stabilito in {\blues{\href{https://people.maths.ox.ac.uk/trefethen/publication/PDF/1991_49.pdf}{Two results on Polynomial Interpolation in Equally Spaced Points}}}, da Trefethen e Weideman, J.A.T. (65), 247-260 (1991).

E' buona la stima asintotica
$
\Lambda_n \sim  \frac{2^{n+1}}{\exp(1) \, n \log(n)} 
$?

\end{esercizio}

Suggerimento:

\bit
\item Modificare l'esempio 3, 
\item ricordare il comando {\tt{linspace}}.
\eit

\end{frame}




\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}
Dalla release di Chebfun 5, Chebfun \mye in grado di trattare polinomi trigonometrici invece di algebrici, come descritto nella guida {\blues{\href{http://www.chebfun.org/docs/guide/guide11.html}{Periodic Chebfuns}}}.
Quindi si approssima una generica funzione ``$u$'' (di default in $[-\pi,\pi]$), tramite serie troncate
{\reds{
$$
q_N(t)=\left\{
\begin{array}{l}
\sum_{k=-(N-1)/2}^{(N-1)/2} a_k \exp(ikt), {\mbox{ se N dispari}}, \\
\smsp \\
\sum_{k=-N/2}^{N/2} a_k \exp(ikt), {\mbox{ se N pari}},
\end{array}
\right.
$$ 
}}
dove
$$
a_k \approx c_k:={\reds{\frac{1}{N} \sum_{j=0}^{N-1} u(t_j) \exp(-ikt_j)}}, \,\, {\reds{t_j=-\pi+2\pi j /N}}.
$$
con $c_k$ calcolati in $O(N \log(N)) $ operazioni con la {\reds{Fast Fourier Transform}}.
\end{frame}

\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}
Quale esempio trattiamo la funzione {\reds{$\tanh(3 \sin(t)) -\sin\left(t+\frac{1}{2}\right)$}}
 \begin{lstlisting} [frame=single]
>> f=chebfun(@(t) tanh(3*sin(t))-sin(t+1/2), [-pi pi])
f =
   chebfun column (1 smooth piece)
       interval       length     endpoint values  
[    -3.1,     3.1]      226      0.48     0.48 
vertical scale = 0.92 

>> format long e
>> f(-pi)
ans =
     4.794255386042027e-01
>> f(pi)
ans =
     4.794255386042033e-01
>> plot(f,'LineWidth',1.6)
\end{lstlisting} 

E' stato quindi necessario determinare un certo {\reds{polinomio algebrico}} di grado 225 (interpolante 226 punti di Chebyshev), per avere un errore dell'ordine della precisione di macchina.

\end{frame}





\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}



 \begin{figure}
 \centering
   {\includegraphics[scale=0.40,clip]{plot_tanh.eps}}
   
   \bignsp
   
 \caption{\fns{Grafico della funzione periodica $u(x)=\tanh(3 \sin(t)) -\sin\left(t+\frac{1}{2}\right)$ in cui $u(-\pi)=u(\pi) \approx 4.794255386042033e-01.$}}
 \end{figure}

\end{frame}









\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}
Approssimiamo ora con polinomi trigonometrici, aggiungendo alla chiamata {\tt{chebfun}}, la preferenza {\reds{\tt{'trig'}}}.
 \begin{lstlisting} [frame=single]
>> f=chebfun(@(t) tanh(3*sin(t))-sin(t+1/2), [-pi pi],'trig')
f =
   chebfun column (1 smooth piece)
       interval       length     endpoint values trig
[    -3.1,     3.1]      147      0.48     0.48 
vertical scale = 0.92 
>> 
\end{lstlisting} 
E' stato quindi necessario determinare un certo polinomio trigonometrico interpolante la funzione in $147$ punti equispaziati di $[-\pi,\pi]$, per avere un errore dell'ordine della precisione di macchina, contro i $226$ del polinomio algebrico precedentemente ottenuto. In effetti $147*\pi/2 =  230.9071 \approx 226$.

\end{frame}

\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}
\begin{nota}
Si noti che per funzioni periodiche regolari, questo deriva dal fatto che
\bit
\item interpolanti trigonometriche hanno un potere risolutivo di $2$ punti per lunghezza d'onda, 
\item le interpolanti di Chebyshev hanno un potere risolutivo di $\pi$  punti per lunghezza d'onda,
\eit
 che tradotto altrimenti dice che con polinomi trigonometrici ci si aspetta meno campionamenti rispetto alle classiche chebfuns.
\end{nota}
\end{frame}

\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}
Cambiamo funzione, e consideriamo $f(x)=5\sin(3t)+6 \cos(2t)$.
 \begin{lstlisting} [frame=single]
>> f=chebfun(@(t) 5*sin(3*t)+6*cos(2*t), [-pi pi],'trig')
f =
   chebfun column (1 smooth piece)
       interval       length     endpoint values trig
[    -3.1,     3.1]        7         6        6 
vertical scale = 9.3 
>> 
\end{lstlisting} 

\bignsp

Viene da domandarsi quale sia il polinomio trigonometrico ottenuto. Essendo facilmente dall'identit\mya di Eulero
$$\sin(kt)=\frac{i \cdot (\exp(-ikt)-\exp(ikt))}{2}, \smhsp \cos(kt)=\frac{\exp(ikt)+\exp(-ikt)}{2}$$
abbiamo che
{\fns{
\bea
f(t)&=& 5\sin(3\cdot t)+6\cos(2\cdot t) \nonumber \\
&=&5 \cdot  \frac{\exp(i3t)-\exp(-i3t)}{2}+6 \cdot  \frac{\exp(i2t)+\exp(-i2t)}{2} \nonumber \\
&=& (5i/2) \exp(-i3t) + 3 \exp(-i2t) +3  \exp(i2t) - (5i/2) \exp(i3t). \nonumber
\eea
}}
\end{frame}

\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}
Utilizzando il comando {\tt{trigcoeffs}}, che determina i coefficienti di Fourier ${c}^{\ast}_k=c_{-M-1+k}$ (attenzione all'ordine!), con $M=(N-1)/2$ se $N$ dispari o $M=N/2$ se $N$ pari,
 \begin{lstlisting} [frame=single]
>> trigcoeffs(f)

ans =
      4.762103912697982e-18 + 2.500000000000000e+00i 
      2.999999999999999e+00 - 4.598694340586186e-17i
      7.446384377092827e-16 + 1.360023205165817e-15i
      7.216449660063518e-16 + 0.000000000000000e+00i
      7.446384377092827e-16 - 1.360023205165817e-15i
      2.999999999999999e+00 + 4.598694340586186e-17i
      4.762103912697982e-18 - 2.500000000000000e+00i
>>
\end{lstlisting} 

\bignsp

e quindi i coefficienti sono, tolte le quantit\mya quasi nulle, $$[2.5i,3,0,0,0,3,-2.5i]$$ come richiesto, in quanto
$$
f(t)=(5i/2) \exp(-i3t) + 3 \exp(-i2t) +3  \exp(i2t) - (5i/2) \exp(i3t).
$$
\end{frame}


\begin{frame}[fragile]
\frametitle{Approssimazione con polinomi trigonometrici e Chebfun.}
Utilizzando un comando del tipo
\begin{lstlisting} [frame=single]
N=11; f1=chebfun(@(t) -sign(abs(t)-pi/2),[-pi pi],'trunc',N, 'trig'); 
\end{lstlisting}
si calcola la serie di Fourier troncata con {\reds{$N$ coefficienti}}, mentre con 
\begin{lstlisting} [frame=single]
N=11; f1=chebfun(@(t) -sign(abs(t)-pi/2),[-pi pi],N, 'trig'); 
\end{lstlisting}
si calcola l'interpolante polinomiale trigonometrica di grado {\reds{$(N-1)/2$}} .
In generale useremo valori $N$ dispari, anche se Chebfun permette $N$ pari (approssimando in qualche {\sl{spazio intermedio}}).
\end{frame}



\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}
Si consideri la funzione {\reds{\tt{-sign(abs(t)-pi/2)}}} e ci si proponga di approssimarla con polinomi trigonometrici. Utilizziamo il codice 
\begin{lstlisting} [frame=single]
function esempio4
warning off;
N1=11; f1=chebfun(@(t) -sign(abs(t)-pi/2),[-pi pi],'trunc',N1, 'trig'); maxN1=max(f1); % deg 5
N2=31; f2=chebfun(@(t) -sign(abs(t)-pi/2),[-pi pi],'trunc',N2, 'trig'); maxN2=max(f2); % deg 15
N3=5001; f3=chebfun(@(t) -sign(abs(t)-pi/2),[-pi pi],'trunc',N3, 'trig'); maxN3=max(f3); % deg 2500
fprintf('\n \t GIBBS SIZE (%3.0f): %1.5e',N1,maxN1)
fprintf('\n \t GIBBS SIZE (%3.0f): %1.5e',N2,maxN2)
fprintf('\n \t GIBBS SIZE (%3.0f): %1.5e',N3,maxN3)
hold on;
xx=linspace(-pi,pi,1000);  yy=-sign(abs(xx)-pi/2);
clf; hold on; plot(xx,yy,'r-'); plot(f1,'k-','LineWidth', 2); hold off;
fprintf('\n \t PAUSE'); pause;
clf;hold on; plot(xx,yy,'r-'); plot(f2,'k-','LineWidth', 2);
hold off; fprintf('\n \t PAUSE'); pause;
clf; hold on; plot(xx,yy,'r-'); plot(f3,'k-','LineWidth', 2); hold off;
fprintf('\n \t PAUSE'); pause;
fprintf('\n \n');\end{lstlisting}

\end{frame}

\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}

Otteniamo

\begin{lstlisting} [frame=single]
>> esempio4

 	 GIBBS SIZE ( 11): 1.18836e+00
 	 GIBBS SIZE ( 31): 1.18028e+00
 	 GIBBS SIZE (5001): 1.17801e+00
 	 PAUSE
 	 PAUSE
 	 PAUSE
 
>> 
 \end{lstlisting} 
 e tre grafici con delle gobbette sorprendenti, circa della stessa altezza (appunto $1.18836e+00$, $1.18028e+00$ e $1.17801e+00$ per interpolanti trigonometriche in cui $N=11$, $N=31$, $N=51$).

\end{frame}




\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}



 \begin{figure}
 \centering
   {\includegraphics[scale=0.40,clip]{gibbs11.eps}}
   
   \bignsp
   
 \caption{Grafico della funzione $-sign(|t|-\pi/2)$ in $[-\pi,\pi]$ e interpolante trigonometrica con $N=11$.}
 \end{figure}

\end{frame}

\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}

 \begin{figure}
 \centering
   {\includegraphics[scale=0.40,clip]{gibbs31.eps}}
   
   \bignsp
   
 \caption{Grafico della funzione $-sign(|t|-\pi/2)$ in $[-\pi,\pi]$ e interpolante trigonometrica con $N=31$.}
 \end{figure}

\end{frame}

\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}



 \begin{figure}
 \centering
   {\includegraphics[scale=0.40,clip]{gibbs5001.eps}}
   
   \bignsp
   
 \caption{Grafico della funzione $-sign(|t|-\pi/2)$ in $[-\pi,\pi]$ e interpolante trigonometrica con $N=5001$.}
 \end{figure}

\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}

Questo fenomeno, detto {\blues{\href{https://it.wikipedia.org/wiki/Fenomeno_di_Gibbs}{di Gibbs}}} (1899) anche se scoperto nel 1848 da Wilbraham, mostra un problema nell'approssimare mediante serie di Fourier funzioni con salti, pur essendo in $L_2(-\pi,\pi)$. 

\smsp

Problema:
\bit
\item se cos\myi fosse, al variare dei nodi, si pu\myo avere la convergenza in norma infinito?
\item se cos\myi fosse, al variare dei nodi, si pu\myo avere la convergenza in norma 2?
\eit
\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}
Se $f: \R \myra \R$ \mye continua a tratti e differenziabile, di periodo $L$
$$
S_N f (x)= \sum_{k=-N}^N a_k \exp(\frac{2 \pi i N x}{L})
$$
e 
$$
a=f(x_0^+)-f(x_0^-) \neq 0
$$

\smnsp

allora

\smnsp

\bit
\item $
\lim_N S_N f (x_0^+ + \frac{L}{2N})=f (x_0^+)+a \cdot 0.089490
$
\item 
$
\lim_N S_N f (x_0^- - \frac{L}{2N})=f (x_0^-)-a \cdot 0.089490.
$
\item 
$
\lim_N S_N f (x_0)=\frac{f (x_0^è)+f(x_0^-)}{2}.
$
\eit

Si noti che nei punti $x_0^+ + \frac{L}{2N}$, $x_0^- - \frac{L}{2N}$ avvengono le {\sl{gobbe}} del fenomeno di Gibbs. 

\end{frame}


\begin{frame}[fragile]
\frametitle{Esempio 4. Fenomeno di Gibbs.}
Questo teorema ci dice che in $x_0$ la funzione ha un salto di ampiezza
$$
a=f(x_0^+)-f(x_0^-) \neq 0
$$

allora asintoticamente in $N$ la serie di Fourier presenter\mya 
\bit
\item in $x_0^+ + \frac{L}{2N}$ valore $f (x_0^+)+a \cdot 0.089490$ 
\item in $x_0^+ - \frac{L}{2N}$ valore $f (x_0^-)-a \cdot 0.089490$ 
\eit
Nel nostro caso $a=2$.
\end{frame}

\begin{frame}[fragile]
\frametitle{Esercizio 5.}

\begin{esercizio}[5]
Cosa succede se invece di polinomi trigonometrici, si approssima la funzione $$f(t)=-sign(|t|-\pi/2)$$ in $[-\pi,\pi]$ con polinomi algebrici di grado $5$, $15$, {\reds{$25$}} via Chebfun?
\end{esercizio}

\end{frame}



\begin{frame}[fragile]
\frametitle{Facoltativo. Esempio 5. Serie di Fourier e interpolazione.}
Dalla teoria sappiamo che se i $2n+1$ coefficienti di Fourier in $[0,2\pi]$ sono approssimati mediante la formula dei trapezi, allora si ottiene la interpolante polinomiale nei punti $t_j=j\frac{2\pi}{2n+1}$, per $j=0,\ldots,2n$ (cf. {\cite[p.178]{ATK}}). Vediamo quale esempio la funzione
{\blues{\href{http://www.math.unipd.it/~alvise/AN_2018/LABORATORI/CHEBFUN/MATLAB/esempio5.m}{esempio5.m}}}
 
 \begin{lstlisting} [frame=single]
function esempio5
clear all; clf; 
n=2; % GRADO INTP. TRIG. 
f=@(x) 1./(1+(x-pi).^2); % FUNZ. DI RUNGE SHIFTATA IN [0,2*pi] (PERIODICA).
fa=chebfun(f,[0,2*pi]); % CHEBFUN ALGEBRICA.
ff=chebfun(f,[0 2*pi],2*n+1, 'trig');  % SERIE DI FOUR. (INTP).
% ATTENZIONE.
% IN ATKINSON SI DICE CHE INTERPOLA NEI PUNTI j*2*pi/(2*n+1), j=0,..,2*n.
t=linspace(0,2*pi,2*n+2); % NODI EQUISPAZIATI 
AE=max(abs(f(t)-ff(t)));
fprintf('\n \t MAX. ERR. INTP. PTS.:%2.2e \n',AE);
plot(fa,'Linewidth',2); hold on; plot(ff,'Linewidth',2); 
plot(t,ff(t),'o','MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',8); 
hold off;
legend('Funzione','Intp.Trig.');
 \end{lstlisting} 
 
\end{frame}


\begin{frame}[fragile]
\frametitle{Facoltativo. Esempio 5. Serie di Fourier e interpolazione.}

 \smnsp

Otteniamo
 \begin{lstlisting} [frame=single]
 >> esempio5
 	 MAX. ERR. INTP. PTS.:1.11e-16 
>> 
 \end{lstlisting} 
 
 \smnsp
 \smnsp
 \smnsp
  \smnsp
 
 \begin{figure}
 \centering
   {\includegraphics[scale=0.35,clip]{fourier_intp.eps}}
   
   \bignsp
   
 \caption{Grafico della funzione $-sign(|t|-\pi/2)$ in $[-\pi,\pi]$ e interpolante trigonometrica con $N=5$.}
 \end{figure}

\end{frame}





\begin{frame}[fragile]
\frametitle{Esercizio Facoltativo.}
{\fns{
\begin{esercizio}[Facoltativo]

Che errore si compie in norma $\infty$ e in norma 2, approssimando la funzione $$f(t)=\log(0.001+t), \,\, t \in [0,1]$$ con 
\bit
\item polinomi algebrici di grado $11$, $31$, {\reds{$51$}} via Chebfun?
\item polinomi trigonometrici di grado $11$, $31$, {\reds{$51$}} via Chebfun (nella versione col {\tt{'trunc'}})?
\eit
Quale delle due approssimazioni \mye migliore? Ha senso quella trigonometrica (plot!)?
\begin{itemize}
\item Se {\tt{deg}} \'e il grado allora {\tt{'trunc'}} va fatto per $N=...$.
\item Si noti che se {\tt{fa}} \'e un oggetto chebfun di natura algebrica e {\tt{ft}} di natura trigonometrica, allora si pu\'o fare 
{\tt{norm{(fa-ft)}}}, {\tt{norm{(fa-ft,inf)}}}.
\item Possibili warnings sorgono dalla versione trigonometrica di Chebfun.
\item Versioni diverse di Matlab/Chebfun possono influenzare il risultato.
\end{itemize}
\end{esercizio}
}}
\end{frame}

\begin{frame}[fragile]
\frametitle{Esercizio Facoltativo.}

\begin{nota}
Per avere qualche informazione su cosa succede analizzando funzioni non periodiche, per via trigonometrica, da

\smsp

{\sl{G. Wright, M. Javed, H. Montanelli, L.N. Trefethen, Extension of Chebfun to periodic functions, SIAM Sc. Comput., Vol. 37, No. 5, (2015) pp. 554-573}}:

\smsp

\begin{fns}
{\reds{
If one tries to construct a trigfun by sampling a function that is not smoothly
periodic, Chebfun will by default go up to length $2^{16}$ and then issue a warning:
\begin{lstlisting}
>> h = chebfun('exp(t)', [0 2*pi], 'trig')
Warning: Function not resolved using 65536 pts.
Have you tried a non-trig representation?
\end{lstlisting}

\smnsp
\smnsp
\smnsp

On the other hand, computations that are known to break periodicity or smoothness
will result in the representation being automatically cast from a trigfun to a chebfun.
}}
\end{fns}
\end{nota}


\end{frame}

\begin{frame}[fragile]
\frametitle{Bibliografia}
{\tiny{
\begin{thebibliography}{99}
\bibitem{ATK} K. Atkinson, {\em An Introduction to Numerical Analysis\/}, Wiley, 1989.
\bibitem{QUALARGE} A. Quarteroni, R. Sacco e F. Saleri {\em Matematica Numerica\/}, Springer, 1998.
\bibitem{WJMT} G.B. Wright, M. Javed, H. Montanelli, L.N. Trefethen, {\sl{Extension of Chebfun to periodic functions}}, SIAM J. Sci. Comp., 2015.
\bibitem{WIKIFS} Wikipedia, (Fourier Series), {\href{http://en.wikipedia.org/wiki/Fourier\_series}{http://en.wikipedia.org/wiki/Fourier\_series}}.
\end{thebibliography}
}}
\end{frame}


\end{document}


\begin{lstlisting} [frame=single]

 \end{lstlisting}