\documentclass[11 pt,xcolor={dvipsnames,svgnames,x11names,table}]{beamer} \usepackage[english]{babel} \usepackage{polski} \usetheme[ bullet=circle, % Other option: square bigpagenumber, % circled page number on lower right topline=true, % colored bar at the top of the frame shadow=false, % Shading for beamer blocks watermark=BG_lower, % png file for the watermark ]{Flip} %\logo{\kern+1.em\includegraphics[height=1cm]{SHiP-3_LightCharcoal}} \usepackage[lf]{berenis} \usepackage[LY1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{cases} \usepackage{mathtools} \usepackage{emerald} \usefonttheme{professionalfonts} \usepackage[no-math]{fontspec} \defaultfontfeatures{Mapping=tex-text} % This seems to be important for mapping glyphs properly \setmainfont{Gillius ADF} % Beamer ignores "main font" in favor of sans font \setsansfont{Gillius ADF} % This is the font that beamer will use by default % \setmainfont{Gill Sans Light} % Prettier, but harder to read \setbeamerfont{title}{family=\fontspec{Gillius ADF}} \input t1augie.fd %\newcommand{\handwriting}{\fontspec{augie}} % From Emerald City, free font %\newcommand{\handwriting}{\usefont{T1}{fau}{m}{n}} % From Emerald City, free font % \newcommand{\handwriting}{} % If you prefer no special handwriting font or don't have augie %% Gill Sans doesn't look very nice when boldfaced %% This is a hack to use Helvetica instead %% Usage: \textbf{\forbold some stuff} %\newcommand{\forbold}{\fontspec{Arial}} \usepackage{graphicx} \usepackage[export]{adjustbox} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{bm} \usepackage{colortbl} \usepackage{mathrsfs} % For Weinberg-esque letters \usepackage{cancel} % For "SUSY-breaking" symbol \usepackage{slashed} % for slashed characters in math mode \usepackage{bbm} % for \mathbbm{1} (unit matrix) \usepackage{amsthm} % For theorem environment \usepackage{multirow} % For multi row cells in table \usepackage{arydshln} % For dashed lines in arrays and tables \usepackage{siunitx} \usepackage{xhfill} \usepackage{grffile} \usepackage{textpos} \usepackage{subfigure} \usepackage{tikz} \usepackage{hyperref} %\usepackage{hepparticles} \usepackage[italic]{hepparticles} \usepackage{hepnicenames} % Drawing a line \tikzstyle{lw} = [line width=20pt] \newcommand{\topline}{% \tikz[remember picture,overlay] {% \draw[crimsonred] ([yshift=-23.5pt]current page.north west) -- ([yshift=-23.5pt,xshift=\paperwidth]current page.north west);}} % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % \usepackage{tikzfeynman} % For Feynman diagrams \usetikzlibrary{arrows,shapes} \usetikzlibrary{trees} \usetikzlibrary{matrix,arrows} % For commutative diagram % http://www.felixl.de/commu.pdf \usetikzlibrary{positioning} % For "above of=" commands \usetikzlibrary{calc,through} % For coordinates \usetikzlibrary{decorations.pathreplacing} % For curly braces % http://www.math.ucla.edu/~getreuer/tikz.html \usepackage{pgffor} % For repeating patterns \usetikzlibrary{decorations.pathmorphing} % For Feynman Diagrams \usetikzlibrary{decorations.markings} \tikzset{ % >=stealth', %% Uncomment for more conventional arrows vector/.style={decorate, decoration={snake}, draw}, provector/.style={decorate, decoration={snake,amplitude=2.5pt}, draw}, antivector/.style={decorate, decoration={snake,amplitude=-2.5pt}, draw}, fermion/.style={draw=gray, postaction={decorate}, decoration={markings,mark=at position .55 with {\arrow[draw=gray]{>}}}}, fermionbar/.style={draw=gray, postaction={decorate}, decoration={markings,mark=at position .55 with {\arrow[draw=gray]{<}}}}, fermionnoarrow/.style={draw=gray}, gluon/.style={decorate, draw=black, decoration={coil,amplitude=4pt, segment length=5pt}}, scalar/.style={dashed,draw=black, postaction={decorate}, decoration={markings,mark=at position .55 with {\arrow[draw=black]{>}}}}, scalarbar/.style={dashed,draw=black, postaction={decorate}, decoration={markings,mark=at position .55 with {\arrow[draw=black]{<}}}}, scalarnoarrow/.style={dashed,draw=black}, electron/.style={draw=black, postaction={decorate}, decoration={markings,mark=at position .55 with {\arrow[draw=black]{>}}}}, bigvector/.style={decorate, decoration={snake,amplitude=4pt}, draw}, } % TIKZ - for block diagrams, % from http://www.texample.net/tikz/examples/control-system-principles/ % \usetikzlibrary{shapes,arrows} \tikzstyle{block} = [draw, rectangle, minimum height=3em, minimum width=6em] \usetikzlibrary{backgrounds} \usetikzlibrary{mindmap,trees} % For mind map \newcommand{\degree}{\ensuremath{^\circ}} \newcommand{\E}{\mathrm{E}} \newcommand{\Var}{\mathrm{Var}} \newcommand{\Cov}{\mathrm{Cov}} \newcommand\Ts{\rule{0pt}{2.6ex}} % Top strut \newcommand\Bs{\rule[-1.2ex]{0pt}{0pt}} % Bottom strut \graphicspath{{images/}} % Put all images in this directory. Avoids clutter. % SOME COMMANDS THAT I FIND HANDY % \renewcommand{\tilde}{\widetilde} % dinky tildes look silly, dosn't work with fontspec \newcommand{\comment}[1]{\textcolor{comment}{\footnotesize{#1}\normalsize}} % comment mild \newcommand{\Comment}[1]{\textcolor{Comment}{\footnotesize{#1}\normalsize}} % comment bold \newcommand{\COMMENT}[1]{\textcolor{COMMENT}{\footnotesize{#1}\normalsize}} % comment crazy bold \newcommand{\Alert}[1]{\textcolor{Alert}{#1}} % louder alert \newcommand{\ALERT}[1]{\textcolor{ALERT}{#1}} % loudest alert %% "\alert" is already a beamer pre-defined \newcommand*{\Scale}[2][4]{\scalebox{#1}{$#2$}}% \def\Put(#1,#2)#3{\leavevmode\makebox(0,0){\put(#1,#2){#3}}} \usepackage{gmp} \usepackage[final]{feynmp-auto} \usepackage[backend=bibtex,style=numeric-comp,firstinits=true]{biblatex} \bibliography{bib} \setbeamertemplate{bibliography item}[text] \makeatletter\let\frametextheight\beamer@frametextheight\makeatother % suppress frame numbering for backup slides % you always need the appendix for this! \newcommand{\backupbegin}{ \newcounter{framenumberappendix} \setcounter{framenumberappendix}{\value{framenumber}} } \newcommand{\backupend}{ \addtocounter{framenumberappendix}{-\value{framenumber}} \addtocounter{framenumber}{\value{framenumberappendix}} } \definecolor{links}{HTML}{2A1B81} %\hypersetup{colorlinks,linkcolor=,urlcolor=links} % For shapo's formulas: \def\lsi{\raise0.3ex\hbox{$<$\kern-0.75em\raise-1.1ex\hbox{$\sim$}}} \def\gsi{\raise0.3ex\hbox{$>$\kern-0.75em\raise-1.1ex\hbox{$\sim$}}} \newcommand{\lsim}{\mathop{\lsi}} \newcommand{\gsim}{\mathop{\gsi}} \newcommand{\wt}{\widetilde} %\newcommand{\ol}{\overline} \newcommand{\Tr}{\rm{Tr}} \newcommand{\tr}{\rm{tr}} \newcommand{\eqn}[1]{&\hspace{-0.7em}#1\hspace{-0.7em}&} \newcommand{\vev}[1]{\rm{$\langle #1 \rangle$}} \newcommand{\abs}[1]{\rm{$\left| #1 \right|$}} \newcommand{\eV}{\rm{eV}} \newcommand{\keV}{\rm{keV}} \newcommand{\GeV}{\rm{GeV}} \newcommand{\im}{\rm{Im}} \newcommand{\disp}{\displaystyle} \def\be{\begin{equation}} \def\ee{\end{equation}} \def\ba{\begin{eqnarray}} \def\ea{\end{eqnarray}} \def\d{\partial} \def\l{\left(} \def\r{\right)} \def\la{\langle} \def\ra{\rangle} \def\e{{\rm e}} \def\Br{{\rm Br}} \def\fixme{{\color{red} FIXME!}} \def\mc{{\color{Magenta}{MC}}\xspace} \def\pdf{{\rm p.d.f.}} \def\ARROW{{\color{JungleGreen}{$\Rrightarrow$}}\xspace} \def\ARROWR{{\color{WildStrawberry}{$\Rrightarrow$}}\xspace} \author{ {\fontspec{Trebuchet MS}Marcin Chrz\k{a}szcz, Danny van Dyk} (UZH)} \institute{UZH} \title[Function interpolation]{Function Interpolation} \date{21 September 2016} \begin{document} \tikzstyle{every picture}+=[remember picture] { \setbeamertemplate{sidebar right}{\llap{\includegraphics[width=\paperwidth,height=\paperheight]{bubble2}}} \begin{frame}[c]%{\phantom{title page}} \begin{center} \begin{center} \begin{columns} \begin{column}{0.9\textwidth} \flushright\fontspec{Trebuchet MS}\bfseries \Huge {Function Interpolation} \end{column} \begin{column}{0.2\textwidth} %\includegraphics[width=\textwidth]{SHiP-2} \end{column} \end{columns} \end{center} \quad \vspace{3em} \begin{columns} \begin{column}{0.6\textwidth} \flushright \vspace{-1.8em} {\fontspec{Trebuchet MS} \large Marcin ChrzÄ…szcz, Danny van Dyk\\\vspace{-0.1em}\small \href{mailto:mchrzasz@cern.ch}{mchrzasz@cern.ch}, \href{mailto:dany.van.dyk@gmail.com}{danny.van.dyk@gmail.com}} \end{column} \begin{column}{0.4\textwidth} \includegraphics[height=1.3cm]{uzh-transp} \end{column} \end{columns} \vspace{1em} % \footnotesize\textcolor{gray}{With N. Serra, B. Storaci\\Thanks to the theory support from M. Shaposhnikov, D. Gorbunov}\normalsize\\ \vspace{0.5em} \textcolor{normal text.fg!50!Comment}{Numerical Methods, \\ 21 September, 2016} \end{center} \end{frame} } \begin{frame}\frametitle{Interpolation - graphical interpretation} \begin{small} \ARROW Let's assume we have a given function in a tabular form: \begin{tabular}{c||c|c|c|c|c} $x_i$ & $x_1$ & $x_2$ & $x_3$ & ... & $x_n$ \\ \hline $f_i=f(x_i)$ & $f_1$ & $f_2$ & $f_3$ & ... & $f_n$ \\ \end{tabular}\\ \ARROWR The $x_i$ are data points.\\ \ARROW The problem is how to calculate the function values between the points ({\it interpolation}) or outside ({\it extrapolation} - see next lecture!) . \end{small} \begin{center} \includegraphics[angle=-90,width=0.5\textwidth]{images/mass_resolution_Bconstr_afterSel_errBand_scaled.pdf} \end{center} \end{frame} \begin{frame}\frametitle{Interpolation - formal formulation} \begin{small} \ARROW On the interval: $\left[ a, b \right] \subset \mathbb{R}$ and set of points: $D=(x_i, y_i)$, $x_i \neq x_j~ \Leftrightarrow~ i \neq j$.\\ \ARROW The interpolation is to find a function $F:\left[ a, b \right] \rightarrow \mathbb{R}$ that satisfies: \begin{align*} \forall (x_i,y_i) \in D:~~~ F(x_i)=y_i \end{align*} \ARROW The above equation is called the interpolation equation.\\ \ARROW The interpolation error: \begin{align*} \epsilon(x)=f(x)-F(x), \end{align*} where $f(x)$ is the function that is being interpolated.\\ \ARROW Each interpolation method has different errors, each of it can be estimated. \end{small} \end{frame} \begin{frame}\frametitle{Linear Interpolation} \begin{small} \ARROW Let's say we have $n+1$ interpolation points: $(y_i, x_i)$.\\ \ARROW The linear interpolation is given with with the equation: \begin{align*} F(x)=\sum_{j=0}^n a_j \psi_j(x)=a_0 \psi_0(x) + a_1 \psi_1(x) + a_2 \psi_2(x)+ ... + a_n \psi_n(x), \end{align*} where: \begin{itemize} \item $a_j$ - parameter, \item $\psi_j(x)$ - base function. \end{itemize} \ARROW Now the only thing one needs to do is to find the $a_i$ coefficients. Now there are infinite number such solutions so we need to assume that the number interpolation points is equal to number of base functions. \end{small} \end{frame} \begin{frame}\frametitle{Linear Interpolation} \begin{small} \ARROW Now to find all the $a_i$ one just needs to solve the linear equation system: \begin{align*} \begin{pmatrix} \psi_0(x_0) & \psi_1(x_0) & ... & \psi_n(x_0) \\ \psi_0(x_1) & \psi_1(x_1) & ... & \psi_n(x_1) \\ & ... \\ \psi_0(x_0) & \psi_1(x_0) & ... & \psi_n(x_2) \end{pmatrix} \begin{pmatrix} a_0\\ a_1\\ ...\\ a_n \end{pmatrix}= \begin{pmatrix} y_0\\ y_1\\ ...\\ y_n \end{pmatrix} \end{align*} \ARROW The only necessary condition to solve the equation is that the: \begin{align*} \det \left[ \psi_i(x_j) \right] \neq 0 \end{align*} \ARROW The polynomial of the order $n$ has $n+1$ base functions, so system has only one solution.\\ \ARROW We can choose the base functions on many different ways. This depends on the input points and our own judgement. Often use are trigonometric functions and polynomials.\\ \ARROW The proper selection of the base function can hugely simplify the problem by making the matrix triangular or even diagonal. \end{small} \end{frame} \begin{frame}\frametitle{Linear Interpolation, simplest base} \begin{small} \begin{exampleblock}{Theorem:} If all of the interpolation points $x_0,x_1,...,x_n$ are pair different there exists one and only one solution of the interpolation function of the order max. $n$. \end{exampleblock} The simplest base functions one can imagine to use is the natural base: \begin{align*} \psi_0=1,~~~\psi_1=x,~~~\psi_2=x^2,~~~...~~~, \psi_n=x^n \end{align*} \begin{alertblock}{Attention/Achtung:} This kind of interpolation is wrongly conditioned: small changes of input parameters will cause large output differences. \end{alertblock} \ARROW Because of the above it is used almost not used in practice. \\ \ARROW For education purposes we will analyse it. \end{small} \end{frame} \begin{frame}\frametitle{Linear Interpolation, simplest base} \begin{small} \ARROW When using natural base the interpolation polynomial will have the structure: \begin{align*} F(x)=a_0+a_1 x + a_2 x^2 + a_3 x^3 ... a_n x^n \end{align*} \ARROW Now base matrix (so-called Vandermonde matrix) has the form: \begin{align*} V=\begin{pmatrix} 1 & x_0 & x_0^2 & ... & x_0^n \\ 1 & x_1 & x_1^2 & ... & x_1^n \\ & ... \\ 1 & x_n & x_n^2 & ... & x_n^n \\ \end{pmatrix} \end{align*} \ARROW Now the only thing one needs to do is to solve: \begin{align*} \begin{pmatrix} 1 & x_0 & x_0^2 & ... & x_0^n \\ 1 & x_1 & x_1^2 & ... & x_1^n \\ & ... \\ 1 & x_n & x_n^2 & ... & x_n^n \\ \end{pmatrix} \begin{pmatrix} a_0\\ a_1\\ ...\\ a_n \end{pmatrix}= \begin{pmatrix} y_0\\ y_1\\ ...\\ y_n \end{pmatrix} \end{align*} \ARROW Because the natural base is wrongly conditioned the increase of the interpolation points significantly increases the condition parameter. \end{small} \end{frame} \begin{frame}\frametitle{Lagrange interpolation} \begin{small} \ARROW Now let's choose a better base function that are given by: \begin{align} \label{eq:langrange} l_i(x)= \prod_{j=0,~j \neq i}^n \frac{x-x_j}{x_i-x_j} = \frac{(x-x_0)(x-x_1)...(x-x_n)}{(x_i-x_0)(x_i-x_1)...(x_i-x_n)} \end{align} \ARROW It is easy to notice: \begin{align*} l_i(x_j)=\begin{cases} 0~~~i \neq j \\ 1~~~i=j \end{cases} \end{align*} \ARROW Now putting this into base matrix we get: \begin{align*} \begin{pmatrix} 1 & 0 & 0 & ... & 0 \\ 0 & 1 & 0 & ... & 0 \\ & ... \\ 0 & 0 & 0 & ... & 1 \\ \end{pmatrix} \begin{pmatrix} a_0\\ a_1\\ ...\\ a_n \end{pmatrix}= \begin{pmatrix} y_0\\ y_1\\ ...\\ y_n \end{pmatrix} \end{align*} \ARROW Now this is something we like :) The interpolating function then takes the form: \begin{align*} F(x)=L_n(x)=\sum_{i=0}^n y_i l_i(x) \end{align*} \end{small} \end{frame} \begin{frame}\frametitle{Lagrange interpolation - the algorithm} \begin{small} \begin{enumerate} \item Get the input data $(x_i,y_i),~i=0,...,n$. \item The coefficients of the polynomial are $y_i$. \item Calculate the base functions from Eq.~\ref{eq:langrange}. \item Put everything together to get the $L_n$ Lagrange polynomial. \end{enumerate} \begin{alertblock}{Disadvantage:} The problem with this method is the fact that if you add another interpolation point you need to start over and recalculate everything. \end{alertblock} \begin{exampleblock}{Advantege} \only<1>{ It is very popular and simple method. It is used in many different places: differential equations, numerical integrations, etc. Because of this the precision of the method depends on the precision of the interpolation is self: \begin{align*} \epsilon(x) = f(x) - F(x) = \frac{f^{(n+1}(\xi) }{(n+1)!} \omega_n(x) \end{align*} } \only<2>{ where:\\ $\omega_n(x)=(x-x_0)(x-x_1)...(x-x_n)$\\ $f$ function of class $C^{n+1}$ on $\left [a,b\right]$\\ $\xi$ average values.h } \end{exampleblock} \end{small} \end{frame} \begin{frame}\frametitle{Newton interpolation} \begin{small} \ARROW Sir Isaac Newton proposed a different base for the problem: \begin{align*} p_0(x) & =1\\ p_1(x) & =(x-x_0)\\ p_2(x) & =(x-x_0)(x-x_1)\\ ...\\ p_n(x) & =(x-x_0)(x-x_1)...(x-x_n) \end{align*} \only<1>{ \ARROW Using the above functions the basis matrix takes a nice form: \begin{align*} V=\begin{pmatrix} 1 & 0 & 0 & ... & 0 \\ 1 & p_1(x_1) & 0 & ... & 0 \\ & ... \\ 1 & p_1(x_n) & p_2(x_n) & ... & p_n(x_n) \\ \end{pmatrix} \end{align*} } \only<2>{ \ARROW And the linear equation system: \begin{align*} \begin{pmatrix} 1 & 0 & 0 & ... & 0 \\ 1 & p_1(x_1) & 0 & ... & 0 \\ & ... \\ 1 & p_1(x_n) & p_2(x_n) & ... & p_n(x_n) \\ \end{pmatrix} \begin{pmatrix} a_0\\ a_1\\ ...\\ a_n \end{pmatrix} = \begin{pmatrix} y_0\\ y_1\\ ...\\ y_n \end{pmatrix} \end{align*} } \end{small} \end{frame} \begin{frame}\frametitle{Newton interpolation} \begin{small} \ARROW We can solve the aforementioned system by noticing that $a_0$ depends only on $y_0$, $a_1$ depends on $y_0$ and $y_1$, etc.\\ \ARROW They can be calculated using difference quotient: \begin{align*} f\left[ x_0,x_1 \right] =\frac{y_1-y_0}{x_1-x_0},~~f\left[ x_1,x_2 \right] =\frac{y_2-y_1}{x_2-x_1}, \rm~etc. \end{align*} \begin{align*} f\left[ x_0,x_1, x_2 \right] = \frac{ f\left[ x_1,x_2 \right]- f\left[x_0,x_1 \right] }{x_2-x_1} \end{align*} \ARROW In general: \begin{align*} f\left[ x_i,x_{i+1},..., x_{i+k} \right] = \frac{ f\left[ x_{i+1},x_{i+2},...,x_{i+k} \right] - f\left[ x_{i},x_{i+1},...,x_{i+k-1} \right]}{x_{i+k}-x_i} \end{align*} \ARROW Using difference quotient we can calculate the coefficients: \begin{align*} a_i=f\left[x_0,x_1,...,x_i\right] \end{align*} \end{small} \end{frame} \begin{frame}\frametitle{Newton interpolation, the algorithm} \begin{small} \begin{itemize} \item We read the input interpolating points: $(x_i,y_i)$, $i=0,1,....,n$. \item Calculate the polynomial coefficients in an iterative way. \item Calculate the base functions. \item Put things together to get the Newton interpolation polynomial. \end{itemize} \begin{exampleblock}{Why do we bother?} \ARROWR Despite the procedure seems more complicated then the Lagrange interpolation it has a huge advantage: adding one more interpolation point does require to repeat the whole procedure, but we can reuse the previous steps. \end{exampleblock} \end{small} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}\frametitle{Runge oscillation} \begin{small} \ARROW If one has many points one needs to use a high order polynomial.\\ \ARROW The problem with high order polynomials is that they start oscilationg at the edges $\mapsto$ so-called Runge oscillations. \begin{center} \includegraphics[width=0.75\textwidth]{images/Runge.png} \end{center} \ARROW Danny will tell you more about this next lecture. \end{small} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}\frametitle{First degree spline function} \begin{small} \ARROW Till now using couple numerical methods we were able to calculate coefficients of a big single polynomial equation.\\ \ARROW Now we are smarter then Newton and Lagrange were over 300 years ago!\\ \ARROW We can use several interpolating functions and then glue them (splice) them together!\\ \ARROW In order to do so we divide the domain of the $F$ function $\left[ a,b \right]$ into: \begin{align*} a=x_0<x_1<x_2<...<x_n=b \end{align*} \ARROW The simplest is to use linear functions: \begin{align*} s(x)=\begin{cases} s_0(x)~~~~x \in \left[x_0,x_1 \right)\\ s_1(x)~~~~x \in \left[x_1,x_2 \right)\\ ...\\ s_{n-1}(x)~~~~x \in \left[x_{n-1},x_n \right), \end{cases} \end{align*} where \begin{align*} s_k(x)=a_{k,0}+a_{k,1}(x-x_k)~~x \in \left[ x_k, x_{k+1} \right) \end{align*} \end{small} \end{frame} \begin{frame}\frametitle{First degree spline function} \begin{small} \ARROW The above defined functions $s_k(x)$ need to obey the conditions: \begin{align*} s_k(x_k ) & = y_k\\ s_k(x_{k+1}) & = s_{k+1}(x_{k+1}) \end{align*} \ARROW From the above we can calculate the linear equation coefficients: \begin{align*} a_{k,0} & =y_k\\ a_{k,1} & =\frac{y_{k+1} - y_k}{x_{k+1}-x_k} \end{align*} \begin{exampleblock}{Advantage:} \ARROWR The biggest advantage of this method is it's simplicity. If you have a large number of interpolating points that are ''densely '' packed you can get very good and fast aproximation with this function. \end{exampleblock} \begin{alertblock}{Disadvantage:} \ARROW The interpolating function is not smooth on the interpolation points. \end{alertblock} \end{small} \end{frame} \begin{frame}\frametitle{Third degree spline function} \begin{small} \ARROW As mentioned before the first degree spline function suffer from the continuity problem. \\ \ARROW A solution would be to use the higher order polynomials to aproximate the function. For example the 3rd order: \begin{align*} s_k(x)=a_{k,0} + a_{k,1}(x-x_k)+ a_{k,2}(x-x_k)^2 + a_{k,3}(x-x_k)^3,~~~~x \in \left[x_k,x_{k+1} \right) \end{align*} \ARROW Now this polynomial needs to obey conditions: \begin{align*} s_k(x_k)&=y_k\\ s_k(x_{k+1})& = s_{k+1}(x_{k+1})\\ s^{\prime}_k(x_{k+1})& = s^{\prime}_{k+1}(x_{k+1})\\ s^{\prime\prime}_k(x_{k+1})& = s^{\prime\prime}_{k+1}(x_{k+1}) \end{align*} \ARROW In total we will have $4n$ coefficients to find. But we will only have $4n-2$ equations.\\ \ARROW To solve the system we need to assume somethings about the endpoints (there are many options here).\\ \ARROW The most popular ones are: \begin{align*} &s^{\prime}(a)=f^{\prime}(a)~~~~s^{\prime}(b)=f^{\prime}(b)~~~~ {\rm or}\\ &s^{\prime\prime}(a)=s^{\prime\prime}(b)=0 \end{align*} \end{small} \end{frame} \begin{frame}\frametitle{Third degree spline function} \begin{small} \ARROW Now to efficiently solve the system we will define temporary variables: \begin{align*} h_k&=x_{k+1}-x_k\\ d_k&=\frac{y_{k+1}-y_k}{h_k}\\ m_k&=s^{\prime\prime}(x_k) \end{align*} \ARROW Now the second derivative can be interpolated using the Lagrange polynomial: \begin{align*} s_k^{\prime\prime}(x)=s^{\prime\prime}(x)\frac{x-x_{k+1}}{x_{k}-x_{k+1}}+s^{\prime\prime}(x)\frac{x-x_{k}}{x_{k+1}-x_{k}}=\frac{m_k}{h_k}(x_{k+1}-x) + \frac{m_{k+}}{h_k}(x-x_k) \end{align*} \ARROW Now if we integrate the above equation (two times): \begin{align*} s_k^{\prime}(x)=-\frac{m_k}{2h_k}(x_{k+1}-x)^2 + \frac{m_{k+}}{2h_k}(x-x_k)^2 -p_k + q_k\\ s_k(x)=\frac{m_k}{6h_k}(x_{k+1}-x)^3 + \frac{m_{k+1}}{3h_k}(x-x_k)^3+p_k(x_{k+1}-x)+q_k(x-x_k) \end{align*} \end{small} \end{frame} \begin{frame}\frametitle{Third degree spline function} \begin{small} \ARROW Now we need to calculate the $s_k(x)$ for $x_k$ and $x_{k+1}$ using relations: $s_k(x_k)=y_k$ and $s_k(x_k+1)=y_{k+1}$: \begin{align*} x_k(x_k) & =y_k = \frac{m_k}{6h_k}(x_{k+1}-x_k)^3 + p_k(x_{k+1}-x_k)\\ x_k(x_{k+1}) & =y_{k+1} = \frac{m_{k+1}}{3h_k}(x_{k+1}-x_k)^3 + q_k (x_{k+1} -x_k) \end{align*} \ARROW From which we get: \begin{align*} p_k&=\frac{y_k}{h_k}-\frac{m_k h_k}{6}\\ p_{k+1}&=\frac{y_{k+1}}{h_{k+1}}-\frac{m_{k+1} h_{k+1}}{6} \end{align*} \ARROW Putting all the things together: \begin{align} S_k(x)= &\frac{m_k}{6h_k} (x_k-x)^3 + \frac{m_{k+1}}{6h_k}(x-x_k)^3+ \left( \frac{y_k}{h_k} -\frac{m_k h_k}{6}\right) (x_{k+1}-x)\\ + & \left(\frac{y_{k+1}}{h_k} - \frac{m_{k+1} h_k}{6} \right) (x-x_k) \label{eq:almostthere} \end{align} \end{small} \end{frame} \begin{frame}\frametitle{Third degree spline function} \begin{small} \ARROW The only unknown in the above equation are the $m_i$ variables. To get those we need to use the equation: $S^{\prime}_{k-1}(x_k)=s^{\prime}(x_k)$: \begin{align*} -\frac{1}{3}m_k h_k - \frac{1}{6} m_{k+1}h_k + d_k = \frac{1}{3}m_k h_{k-1} + \frac{1}{6}m_{k-1}h_{k-1}+d_{k-1} \end{align*} \ARROW So the complete solution is: \begin{align*} a_{k,0}&=y_k\\ a_{k,1}&=d_k -\frac{h_k}{6}(2m_k+m_{k+1})\\ a_{k,2}&= \frac{m_k}{2}\\ a_{k,3}&= \frac{m_{k+1}-m_k}{6 h_k} \end{align*} \ARROW To get the $m_0$ and $m_n$ one needs to use one of the aforementioned conditions. \end{small} \end{frame} \begin{frame}\frametitle{Third degree spline function algorithm} \begin{small} \begin{itemize} \item Get the input interpolation points. \item Calculate the temporary variables: $d_i, h_i$. \item Assume adequate conditions to get $m_0$, $m_n$. \item Solve linear equation system. \item Obtained values of the $a_{i,j}$ coefficients put in the interpolation equation. \end{itemize} \end{small} \end{frame} \begin{frame}\frametitle{Summary} \begin{small} \ARROW Interpolation playes essential role in almost all numerical methods!\\ \ARROW Even very old algorithms like Lagrange are still used(we used it in splines).\\ \ARROW There is a lot of algorithms on the market. From simple Lagrange and Newton interpolation algorithms up to modern splines.\\ \ARROW The most common used today are spline. They require a bit of work but they work very effectively.\\ \end{small} \end{frame} \backupbegin \begin{frame}\frametitle{Backup} \end{frame} \backupend \end{document}