% -*- Encoding: utf-8 -*-
%-------------------------------------------------------------------------
%
% Exos Python Agrégatifs
% L. Le Guillou 
% 2023-2024
%
%-------------------------------------------------------------------------
\documentclass{tdpython}
%
\diploma{Agrégation}
\module{Python}
\academicyear{Année Universitaire 2023--2024}
%
\begin{document}
%
\maketitle
%
%
\section{Échauffement : Conjecture de Syracuse}\label{sec:syracuse}

La ``conjecture de Syracuse'' (aussi connue comme la conjecture de
Collatz, d'Ulam, etc) prédit que pour tout entier $n\geq 1$, lorsqu'on
applique l'algorithme suivant :
\begin{itemize}
  \item si $n$ est pair, on le divise par 2;
  \item si $n$ est impair, on le multiplie par 3 et on ajoute 1.
\end{itemize}   
de manière itérative, on arrive, après un certain nombre d'itérations,
au nombre~1. \textsl{Cette conjecture n'a encore jamais été ni
  démontrée, ni falsifiée par la découverte d'un contre-exemple. De
  nombreux mathématiciens se sont penchés sur la question et une littérature
  abondante y est consacrée.}

\ask Écrivez un court programme Python qui teste la conjecture
pour un entier~$n$ donné que vous choisirez.

\ask Transformez le programme précédent en une fonction \texttt{syracuse(n)} qui teste la
conjecture de Syracuse pour un nombre entier~$n$ donné, et qui retourne le
nombre d'itérations nécessaires pour atteindre 1 pour l'entier~$n$ (le ``temps de vol'' du nombre choisi). 

\ask Modifiez la fonction précédente pour qu'elle retourne la ``trajectoire''
complète jusqu'à 1, sous la forme d'une liste.

\ask Tracez la trajectoire, puis le temps de vol de tous les entiers inférieurs à 100.


\section{Trajectoire d'un obus}\label{sec:trajectoire}

On étude le mouvement d'un objet (par exemple, un obus) lancé à~$t=0$ à
une vitesse $v_0$ selon un angle~$\theta$ par rapport à l'horizontale.
Les positions successives ont été enregistrées dans le fichier~\texttt{positions.txt}.

\ask Lisez le fichier~\texttt{positions.txt} (fonction \texttt{numpy.loadtxt}).
Tracez l'évolution de l'abscisse~$x$ en fonction du temps; tracez de même l'évolution
de la hauteur~$z$ en fonction de~$t$ ; enfin, tracez la trajectoire~$z(x)$ de l'obus.

\ask Déterminez la hauteur maximale atteinte. A quel instant cela se produit-il ? (On utilisera
les fonctions~\texttt{max} et \texttt{argmax}).

Le mouvement est parabolique entre les instants~$t_1 = 0\,\text{s}$ et $t_2 = 115\,\text{s}$.

\ask En utilisant les fonctionnalités de~\texttt{numpy}, sélectionnez les
mesures dans cet intervalle de temps. Tracez en rouge les points correspondants
sur le graphe~$z = f(t)$, et en noir les points qui sont hors de cet intervalle.

\ask Dans l'intervalle de temps~$[t_1:t_2]$, ajustez un polynôme de degré~1 sur les mesures
de~$x(t)$ ; ajustez de même un polynôme de degré~2 sur les mesures de~$z(t)$.

\ask Déduisez-en la valeur de la vitesse initiale~$v_0$, et celle de l'angle de tir ; vérifiez
que vous retrouvez la valeur de~$g$.

\ask En considérant les mesures prises après le tir (lorsque l'objet
est retombé), estimez la dispersion sur les mesures de hauteur, et
déduisez-en une estimation de l'erreur de mesure de hauteur.


\section{Etude du pendule}

On considère un pendule de masse~$m$ et de longueur~$\ell$, qui oscille dans
le champ de pesanteur terrestre~$g$ avec une amplitude angulaire~$\pm\theta_0$.

Pour les applications numériques, on prendra $m=100\,\text{g}$,
$\ell = 70~\text{cm}$ et $g = 9.806~\text{m}\cdot\text{s}^{-2}$.


\subsection*{Modèle : formule de Borda}\label{sec:formule-de-borda}

\ask Dans la limite des petites oscillations, la période du pendule est
donnée par $T_0 = 2\pi\sqrt{\frac{\ell}{g}}$. Calculez numériquement~$T_0$.

La formule de Borda nous dit que, à l'ordre 2, la période du pendule dépend légèrement
de l'amplitude~$\theta_0$, selon :
\begin{equation*}
 \frac{T}{T_0} = 1 + \frac{\theta_0^2}{16}
\end{equation*}

\ask Tracez la formule de Borda pour $\theta_0$ entre $0$ et $\pi/2$

\subsection*{Analyse de données expérimentales}\label{analyse-de-donnees}

Vous venez de faire des mesures de la période du pendule pour différents
angles. Pour cela, vous avez mesuré à l'aide d'un chronomètre la durée
totale de~$N$ oscillations. Voici vos mesures :
\begin{center}
\begin{tabular}{lrr}
$\theta_0$ [${}^{o}$] & $N$ & Durée [s] \\
\noalign{\smallskip}
\hline
\noalign{\smallskip}
10 & 20 & 37.70 \\
20 & 15 & 28.28 \\
30 & 15 & 28.46 \\
40 & 20 & 38.71 \\
50 & 25 & 49.50 \\
15 & 20 & 37.64 \\
\noalign{\smallskip}
\hline
\end{tabular}
\end{center}

\ask Saisissez ces données dans un tableur (e.g.~libreoffice), sauvegardez
les dans un fichier csv et importez les données avec Python (par exemple avec \texttt{numpy.loadtxt}, ou
encore avec le module~\texttt{csv}).

\ask Tracez la periode en fonction de l'amplitude~$\theta_0$.

\ask On estime que l'incertitude dans la mesure de~$T$ est d'environ~$200\,\text{ms}$. Tracez
  les points avec des barres d'erreurs (fonction~\texttt{errorbar}).

\ask À l'aide de la fonction \texttt{curve\_fit} du module
\texttt{scipy.optimize}, ajustez les données par la fonction
$T(\theta) = T_0(1 + \beta\theta^2)$. Pour cela il faudra commencer
par écrire une fonction \texttt{periode(theta,\ T\_0,\ beta)}.
\begin{itemize}
\item[$\bullet$]
  Tracez les données avec l'ajustement.
\item[$\bullet$]
  Quelle est la longueur du pendule ?
\item[$\bullet$]
  Quelle est l'incertitude sur cette longueur ?
\end{itemize}


\subsection*{Intégration numérique}\label{calcul-numerique}

Dans le cas général, on peut démontrer que la période du pendule est
donnée par :
\begin{equation*}
  \frac{T}{T_0} = \frac 2\pi \int_0^{\pi/2} \frac{d\phi}{\sqrt{1-k^2\sin^2\phi}}
\end{equation*}
où $k=\sin\frac{\theta_0}2\). Calculez $T\) pour
$\theta_0 = \frac\pi4$. On utilisera la fonction \texttt{quad} du
package~\texttt{scipy.integrate}.

\ask Tracez avec des points la valeurs de $T(\theta_0)/T_0$ pour une
dizaine de points entre $0$ et $\pi/2$.

\ask  Tracez la formule de Borda sur le même graphe pour comparer.

\ask Vérifiez numériquement le coefficient $\frac 1{16}$ de la formule de
  Borda.

\subsection*{Résolution numérique de l'équation différentielle}  
\label{equation-differentielle}

\ask En utilisant la fonction \texttt{solve\_ivp} du package
\texttt{scipy.integrate}, résoudre l'équation différentielle associée
au pendule :
\begin{equation*}
  \ddot\theta = -g \sin \theta.
\end{equation*}
On prendra comme condition initiale $\theta(t=0) = \frac{3\pi}4$ et
$\dot\theta(t=0) = 0$.

\ask Tracez l'évolution au cours du temps.

\ask Vérifiez graphiquement que la période correspond à celle calculée
précédemment.

\end{document}


