\documentclass{tp-caml}


\tp{
  title={Rappels, DL, Courbes},
  number=Premier TD de maple,
  date=Vendredi 21 septembre 2012,
  class=MP1
}

\begin{document}

\begin{corpus}

\newcommand{\ie}{\textsl{i.e.~}}
\newcommand{\via}{\textsl{via~}}
\newcommand{\eg}{\textsl{e.g.~}}

\newenvironment{maple}{
  \small
  \verbatim
}{\endverbatim}
\section{Rappels}

\subsection{L'aide}

Votre meilleur amie pour Maple. Placez vous sur un nom de fonction Maple et
appuyez sur F2 ; ou lancez l'aide \via Ctrl+F1 ou Help > Maple Help.

\subsection{Principes de base}


\textbf{Instruction} terminée par \textbf{;} (avec affichage) ou \textbf{:}
(sans affichage), rappel de la dernière expression calculée avec \textbf{\%},
commentaires avec \textbf{\#}
\begin{maple}
2 + 2; # blabla qui ne sera pas évalué
3 * 4:
% ** 5;
\end{maple}

\textbf{Affectation} \via \textbf{:=}
\begin{maple}
x := 3;
x * 18;
\end{maple}

\textbf{Libération} d'une variable \via \textbf{' '}
\begin{maple}
x := 3;
x;
x := 'x';
x;
\end{maple}

Comprendre les problèmes de variables est vraiment crucial quand on
travaille avec Maple. Utiliser une variable non libre (\ie qui a été assignée
et pas libérée) dans une expression provoquera son évaluation immédiate.


Tester par exemple~:
\begin{maple}
x := 3;
y := x + 2;
x := 'x';
y;
y := x + 2;
z := y ** 2;
\end{maple}

\textbf{Évaluation approchée} \via \textbf{evalf}
\begin{maple}
x := 99**98**97;
evalf(%);
\end{maple}

\textbf{Fonction} \via \textbf{->}
\begin{maple}
f := x -> x**3;
f(4);
g := y -> f(y+4);
g(0);
\end{maple}
\columnbreak
\textbf{Fonction} \via \textbf{unapply}
\begin{maple}
p := 3*x**3 + 5*x**2 + 2*x + 8;
f := unapply(p, x);
\end{maple}

\textbf{Changement de variable} \via \textbf{subs}
\begin{maple}
subs(x = 3, x ** 2 + 3 * x + 4);
subs(x = ln(y ** 3), exp(x**(1/3)));
subs(cos(x) = u, cos(x)/(1 - cos(x)));
\end{maple}


\subsection{Structures de contrôle}

\textbf{Conditions} avec \textbf{if} ... \textbf{then} ... \textbf{else}
... \textbf{fi} \\
Éventuellement avec des \textbf{elif}
\begin{maple}
if 42**12 < 17**28 then 17 else 12 fi;
if 42**12 < 17**28
then 17
elif 5**3 > 4**4
then 15
else 12 fi;
f := (x,y) -> if (x + y > 0) then 1
              else -1 fi;
f(1,-2);
\end{maple}

\textbf{Boucles} avec \textbf{while} ... \textbf{do} ... \textbf{od}
\begin{maple}
x := 2;
while x < 10**100
do
  x := x ** x;
od;
\end{maple}

\textbf{Boucles} avec \\
\textbf{for} ... \textbf{from} ... \textbf{to} ...
\textbf{by} ... \textbf{while} ... \\
\textbf{do} ... \textbf{od}
\begin{maple}
for i from 0 to 10 do i od;
x := 1;
for i from 1 to 42 by 2 while i < 12
do
  x := x * i:
od:
x;
\end{maple}

\textbf{Procédures} avec \textbf{proc}
\begin{maple}
f := proc(a,b)
local t;
t := a; # Ça sert à rien mais bon
t ** 3 + b ** 2
end;
f(2, 3);
\end{maple}

\textbf{Procédures récursives} (\ie s'appelant elles-mêmes avec de nouveaux arguments)
\begin{maple}
ackermann := proc(m,n)
if (m < 0) or (n < 0) then ERROR(``m or n < 0'')
elif m = 0 then n + 1
elif n = 0 then ackermann(m - 1, 1)
else ackermann(m - 1, ackermann(m, n - 1))
fi:
end:
ackerman(3, 3);
\end{maple}


\subsection{Fonctions internes à connaître}

À vous de consulter le manuel pour savoir ce qu'elles font et comment les
utiliser !
\begin{itemize}
  \item \texttt{sqrt}, \texttt{exp}, \texttt{ln}
  \item \texttt{iquo}, \texttt{irem}
  \item \texttt{seq}, \texttt{zip}
  \item \texttt{solve}
  \item \texttt{simplify}, \texttt{expand}, \texttt{combine}
  \item \texttt{int}, \texttt{diff}, \texttt{D},
        \texttt{series}, \texttt{limit},
        \texttt{sum}, \texttt{product}
  \item \texttt{plot}
\end{itemize}

\bigskip

\section{Au boulot}

\begin{exo} Écrire une procédure \texttt{pgcd} qui calcule le pgcd de deux
entiers positifs à l'aide de l'algorithme d'Euclide (pgcd(a,b) = pgcd(b,
reste(a/b)) si b > 0, a sinon) avec une boucle \textbf{while}
\end{exo}
\begin{exo} Réécrire cette procédure sans boucle \end{exo}
\begin{exo} Écrire une procédure calculant $u_n = 1 + \sum_{i=0}^{n-1}{(n - i) u_i}$ et
calculer $u_{100}$\end{exo}
\begin{exo} Calculer $\int_0^{1/2}{\frac{\ln^2(x)}{1 - x}dx}$\end{exo}
\begin{exo} Tracer $f(x) = \cos(3x)+2\sin(x) $ entre 0 et 10\end{exo}


\subsection{Développements limités}
\begin{exo} Calculer les développements limités usuels de $\exp$, $\ln$,
$\sin$, $\cos$... Noter que Maple fait ses développements en $O$ et
pas en $o$, il faut donc monter à l'ordre suivant pour avoir nos
développements en $o$.\end{exo}
\begin{exo} Donner un équivalent simple au voisinage de $+\infty$ de
$\sqrt{x+\sqrt{x^2+1}}-\sqrt{x+\sqrt{x^2-1}}$\end{exo}


\medskip
\subsection{Courbes planes}
\begin{exo} Tracer la courbe paramétrée $x(t) = t(t+1)$, $y(t)=2t^2(t+1)$ sur
$-1..1\times-1..1$\end{exo}
\begin{exo} Déterminer les points multiples de cette courbe paramétrée\end{exo}
\begin{exo} Tracer la courbe en polaires $\rho(\theta) = 1 - \sin(\theta)$\end{exo}


\medskip

\subsection{Qu'est ce que ça fait ?}

Déterminer ce que font les programmes suivants en les exécutant/traçant leur
exécution.

\begin{exo} \begin{maple}
F:=proc(n)
  local i,j,k,l,x := 3;
  for i from 0 to n-1 do
    j := i*n; l :=i*j*n-j*x*k; 
    x := j-l*i;
    if (x < 0) then x :=-x fi 
  od; x; end proc;
\end{maple}
\end{exo}
\begin{exo} \begin{maple}
kmp:=proc(n) 
  local ret := 1;
  for i from 1 to n do
  ret := ret*i;
  end proc;
\end{maple}
\end{exo}

\begin{exo} \begin{maple}
pgcd:=proc(r0, r2)
if r0 > r2 then r0 := r2; r2 := r0; fi;
if r0 > 0 then pgcd(irem(r2/r0),r0)
else r2;
end proc;
\end{maple}
\end{exo}
\begin{exo} \begin{maple}
div:=proc(l, k)
local m;
if k mod 2 then l*div(l,k-1)
else m := div(l,k/2); m*m
fi;
end proc;
\end{maple}
\end{exo}

\begin{exod}
Donner un développement à l'infini de l'inverse de la fonction 
$f: x \rightarrow x\times ln(x)$. 
\end{exod}
\end{corpus}


\end{document}



