\documentclass[a4paper,14pt,DIV22]{scrartcl}
\RequirePackage[T1]{fontenc}
\RequirePackage[latin1]{inputenc}
\RequirePackage[frenchb]{babel}
\RequirePackage{lmodern}
\RequirePackage{amssymb,amsmath,latexsym, amsthm}
\RequirePackage{pifont}
 
\newcommand{\R}{\ensuremath{\mathbb{R}}}
\newcommand{\SSI}{\Leftrightarrow}
\newcommand{\note}{\ding{46}\,\,}

%opening
\title{Interpolation polynômiale par morceaux}
\author{Nicolas Pourcelot} 

\begin{document}

\maketitle

\begin{abstract}
Le but de ce document est d'offrir des interpolations polynômiales par morceaux utiles à la réalisation d'exercices de lecture graphique, en particulier en classe de seconde.

Il s'agit de générer des courbes passant par des points donnés, et semblant le plus élégantes possible, c'est-à-dire sans artefacts.

Ce document est distribué selon les termes de la GNU Free Documentation License.
\end{abstract}

\section{Interpolation par une courbe de fonction cubique par morceaux}
\subsection{Énoncé du problème}
On cherche à tracer la courbe ${\cal C}$ d'une \emph{fonction} $f$ passant simplement par un certain nombre de points (en particulier, l'utilisateur final ne fournit pas de conditions sur les dérivées).

On supposera toujours ces points d'abscisses deux à deux distinctes, et rangés par ordre (strictement) croissant d'abscisse.

Soient trois points $A$, $B$, $C$ par laquelle notre courbe doit passer.

La courbe doit en outre respecter les contraintes suivantes~:
\begin{itemize}
 \item si $y_B>y_A$ et $y_B>y_C$, alors $y_B$ doit être le maximum de $f$ sur l'intervalle $[x_A;x_C]$~;
\item si $y_B<y_A$ et $y_B<y_C$, alors $y_B$ doit être le minimum de $f$ sur l'intervalle $[x_A;x_C]$~;
\item sinon (c-à-d. si $y_A<y_B<y_C$, ou $y_A>y_B>y_C$), la pente de la courbe ${\cal C}$ au point $B$ est celle de la droite $(AC)$.
\end{itemize}

Les deux premières contraintes permettent de réaliser facilement des courbes d'extrema locaux choisis.

La dernière contrainte est, elle, purement esthétique.

% \subsection{Interpolation sur $[0;1]$}
% 
% Soient $a,b,c,d\in  \R $.
% 
% Soit $f$ la fonction définie sur \R par $f(x)=ax^3+bx^2+cx+d$.
% 
% On cherche à déterminer $a,b,c,d$ en fonction de $f(0)$, $f'(0)$, $f(1)$ et $f'(1)$.
% 
% $\forall x\in \R, f'(x)=3ax^2+2bx+c$.
% 
% On obtient donc~:
% 
% $
% \begin{aligned}[t]\begin{cases}
% f(0)=d \\
% f'(0)=c \\
% f(1)=a+b+c+d \\
% f'(1)=3a+2b+c
% \end{cases}
% &\SSI 
% \begin{cases}
% f(0)=d \\
% f'(0)=c \\
% 3f(1)-f'(1)=b+2c+3d \\
% f'(1)=3a+2b+c
% \end{cases} \\
% &\SSI 
% \begin{cases}
% f(0)=d \\
% f'(0)=c \\
% 3f(1)-f'(1)-2f'(0)-3f(0)=b\\
% \dfrac{f'(1)-2b-c}{3}=a
% \end{cases}\\
% &\SSI 
% \begin{cases}
%  d=f(0) \\
% c=f'(0) \\
% b=3f(1)-f'(1)-2f'(0)-3f(0) \\
% a=\dfrac{f'(1)-2(3f(1)-f'(1)-2f'(0)-3f(0))-f'(0)}{3}
% \end{cases}\\
% &\SSI 
% \begin{cases}
%  d=f(0) \\
% c=f'(0) \\
% b=3f(1)-f'(1)-2f'(0)-3f(0) \\
% a=\dfrac{3f'(1)-6f(1)+3f'(0)+6f(0)}{3}
% \end{cases} \\
% &\SSI 
% \begin{cases}
%  a=f'(1)-2f(1)+f'(0)+2f(0) \\
% b=3f(1)-f'(1)-2f'(0)-3f(0) \\
% c=f'(0) \\
% d=f(0)
% \end{cases}
% \end{aligned}$
% 
% \note \emph{On aurait pu supposer que $f(0)=0$ et $f(1)=1$ pour simplifier encore un peu les calculs.}


\subsection{Interpolation entre $(0;0)$ et $(1;1)$}

Soient $a,b,c,d\in  \R $.

Soit $f$ la fonction définie sur \R par $f(x)=ax^3+bx^2+cx+d$.

On cherche à déterminer $a,b,c,d$ en fonction de $f(0)=0$, $f'(0)$, $f(1)=1$ et $f'(1)$.

$\forall x\in \R, f'(x)=3ax^2+2bx+c$.

On obtient donc~:

$
\begin{aligned}[t]\begin{cases}
0=d \\
f'(0)=c \\
1=a+b+c+d \\
f'(1)=3a+2b+c
\end{cases}
&\SSI 
\begin{cases}
0=d \\
f'(0)=c \\
3-f'(1)=b+2c \\
f'(1)=3a+2b+c
\end{cases} \\
&\SSI 
\begin{cases}
0=d \\
f'(0)=c \\
3-f'(1)-2f'(0)=b\\
\dfrac{f'(1)-2b-c}{3}=a
\end{cases}\\
&\SSI 
\begin{cases}
 d=0 \\
c=f'(0) \\
b=3-f'(1)-2f'(0) \\
a=\dfrac{f'(1)-2(3-f'(1)-2f'(0))-f'(0)}{3}
\end{cases}\\
&\SSI 
\begin{cases}
 d=0 \\
c=f'(0) \\
b=3-f'(1)-2f'(0) \\
a=\dfrac{3f'(1)-6+3f'(0)}{3}
\end{cases} \\
&\SSI 
\begin{cases}
 a=f'(1)-2+f'(0) \\
b=3-f'(1)-2f'(0) \\
c=f'(0) \\
d=0
\end{cases}
\end{aligned}$



\subsection{Cas général~: interpolation entre $A$ et $B$}

On se ramène au cas précédent par transformation affine (attention, les dérivées sont modifiées~!).

Puis, on obtient une interpolation entre $A$ et $B$ en appliquant à la fonction solution trouvée la transformation affine inverse.

% \[\forall x\in \R, f(x)=k_y(a(k_xx-x_A)^3+b(k_xx-x_A)^2+c(k_xx-x_A)+d)+y_A\] avec~:

% \[\begin{cases}
%   k_x = \dfrac{1}{x_B-x_A}\text{\qquad car $x_B-x_A\ne 0$} \\
%   k_y = y_B-y_A \\
%   a=f'(1)-2f(1)+f'(0)+2f(0) \\
%   b=3f(1)-f'(1)-2f'(0)-3f(0) \\
%   c=f'(0) \\
%   d=0
%  \end{cases}
% \]

\[\forall x\in \R, f(x)=k_y\left(a\left(\dfrac{x}{k_x}-x_A\right)^3+b\left(\dfrac{x}{k_x}-x_A\right)^2+c\left(\dfrac{x}{k_x}-x_A\right)\right)+y_A\] avec~:

\[\begin{cases}
  k_x = x_B-x_A\text{\qquad ($k_x\ne 0$ car $x_A\ne x_B$)} \\
  k_y = y_B-y_A \\
  a=\dfrac{k_x}{k_y}f'(x_B)-2+\dfrac{k_x}{k_y}f'(x_A) \\
  b=3-\dfrac{k_x}{k_y}f'(x_B)-2\dfrac{k_x}{k_y}f'(x_A) \\
  c=f'(x_A) \\
 \end{cases}
\]



\end{document}
