---
jupyter:
  jupytext:
    text_representation:
      extension: .md
      format_name: markdown
      format_version: '1.3'
      jupytext_version: 1.14.1
  kernelspec:
    display_name: Python 3 (ipykernel)
    language: python
    name: python3
---

<!-- #region nbgrader={"grade": false, "grade_id": "cell-64e0c6b530adef13", "locked": true, "schema_version": 3, "solution": false} -->
# TP Modélisation d'un looping

![Montagne russe](montagne-russe-looping.jpg)
<!-- #endregion -->

```python hide_input=false nbgrader={"grade": false, "grade_id": "cell-c0e6f4e24e2405d8", "locked": true, "schema_version": 3, "solution": false}
%matplotlib inline
# bibliotheques de base
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from   time import time
from IPython.display import Markdown, display
def printmd(string):
    display(Markdown(string))
# test si numero étudiant spécifier
from validation.validation import info_etudiant
try: NUMERO_ETUDIANT
except NameError: NUMERO_ETUDIANT = None 
if type(NUMERO_ETUDIANT) is not int :
    printmd("**ERREUR:** numéro d'étudiant non spécifié!!!")
    NOM,PRENOM,NUMERO_ETUDIANT=info_etudiant()
# parametres spécifiques
_uid_    = NUMERO_ETUDIANT 
_precis_ = 1.0e-5
printmd("**Login étudiant {} {} uid={}**".format(NOM,PRENOM,_uid_))
np.random.seed(_uid_)
# parametres
_NC_ = 1 + np.random.randint(9)
_H_  = 8 + np.random.randint(12)
printmd("**parametre:** courbe numéro={}  h={}".format(_NC_,_H_))
```

<!-- #region nbgrader={"grade": false, "grade_id": "cell-75e0dac09ff8c3f4", "locked": true, "schema_version": 3, "solution": false} -->
## liste des courbes
la courbe étudiée correspond au numéro précédent

1. $$ x^{2} - y^{2} + y \left(x^{2} + y^{2}\right) = 0 $$
1. $$27 x^{2} - y^{2} \left(- y + 9\right) = 0$$
1. $$x^{2} - 3 y^{2} + y \left(x^{2} + y^{2}\right) = 0$$
1. $$2 x^{2} - 6 y^{2} + y \left(x^{2} + y^{2}\right) = 0$$
1. $$x^{2} - \frac{y^{2} \left(- y + 3\right)}{y + 1} = 0$$
1. $$54 x^{2} - y^{2} \left(- y + 18\right) = 0$$
1. $$x^{2} - \frac{y^{2} \left(- y + 6\right)}{y + 2} = 0$$
1. $$2 x^{2} - 2 y^{2} + y \left(x^{2} + y^{2}\right) = 0$$
1. $$x^{2} - \frac{y^{2} \left(- y + 12\right)}{y + 4} = 0$$
1. $$3 x^{2} - 9 y^{2} + y \left(x^{2} + y^{2}\right) = 0$$
<!-- #endregion -->

## Travail demandé

 1. dans le cas d'un looping elliptique de demi grand axe h/2 et de demi petit axe h/3 
 
 $$ \frac{x^2}{(\frac{h}{3})^2} + \frac{y(y-h)}{(\frac{h}{2})^2}=0$$
 
    faire l'étude précédente (vu avec un looping circulaire) 
 2. Appliquer l'étude au cas du looping sélectionné (numéro dans la cellule précédente)

 3. Comparer les résultats et répondre aux questions du notebook.
 4. Ecrire un compte rendu au format LaTex dans le fichier `monCR.tex`
 
   - formalisme Lagrangien
   - simulation numérique
   
 5. Convertir le compte rendu en pdf en utilisant la commande
 
         pdflatex monCR.tex

<!-- #region nbgrader={"grade": false, "grade_id": "cell-8c875bcbd6114dd2", "locked": true, "schema_version": 3, "solution": false} -->
## Mise en équation avec sympy
<!-- #endregion -->

```python nbgrader={"grade": false, "grade_id": "cell-bbc0eae483f4862b", "locked": true, "schema_version": 3, "solution": false}
# sympy avec Lagrange
import sympy as sp
from sympy.physics.mechanics import *
sp.init_printing()
```

<!-- #region nbgrader={"grade": false, "grade_id": "cell-77e270b5f1fafe9f", "locked": true, "schema_version": 3, "solution": false} -->
### Modèlisation avec sympy
modèle simple d'un masse m se déplacant sur une courbe sous l'effet de la gravité

1. définir les degrés de liberté du système et les symbols
2. calculer le lagrangien du sytème non contraint
<!-- #endregion -->

```python nbgrader={"grade": true, "grade_id": "cell-f54f928f9e0e62f5", "locked": false, "points": 3, "schema_version": 3, "solution": true, "task": false}

```

<!-- #region nbgrader={"grade": false, "grade_id": "cell-b0c1969893724bc9", "locked": true, "schema_version": 3, "solution": false} -->
## Etude du looping elliptique

- définition de la contrainte (cas d'une ellipse passant par (0,0))
de demi grand axe h/2 et de demi petit axe h/3. 
   - définir la contrainte en la normalisant, i.e. avec une hauteur maximale de h
   
 $$ \frac{x^2}{(\frac{h}{3})^2} + \frac{y(y-h)}{(\frac{h}{2})^2}=0$$
 
- définir sous sympy l'équation de la contrainte
- construire la méthode de Lagrange sous contrainte (holonomique)
- en déduire les équations de Lagrange sous contrainte du problème
- mettre le système sous forme matricielle 
- faire le changement de variable en introduisant $Y$ t.q

$$ A \dot{Y} = B(Y) $$

- génération automatique des fonctions pour le calcul de A et de B
<!-- #endregion -->

```python nbgrader={"grade": true, "grade_id": "cell-69f13d03e7e42c39", "locked": false, "points": 3, "schema_version": 3, "solution": true}
# Lagrange
```

<!-- #region nbgrader={"grade": false, "grade_id": "cell-35e7ca459dac3a31", "locked": true, "schema_version": 3, "solution": false} -->
## Simulation numérique

- en utilisant la bibliothéque scikits.odes, écrire la fonction résidu qui calcule
$$ res = A\dot{Y} - B(Y)$$
- choisir la valeur des paramêtres 
- vérifier en utilisant les points d'équilibre
- résoudre le système en fixant les conditions initiales
- tracer la trajectoire
<!-- #endregion -->

```python nbgrader={"grade": false, "grade_id": "cell-faf7c3f8709aeccb", "locked": true, "schema_version": 3, "solution": false}
# bibliotheque scikit
from scikits.odes.dae import dae
from scikits.odes.ode import ode
from scipy.optimize import fsolve
```

```python nbgrader={"grade": true, "grade_id": "cell-63eeb2e5a55756ab", "locked": false, "points": 4, "schema_version": 3, "solution": true}
# simulation numérique
```

<!-- #region nbgrader={"grade": false, "grade_id": "cell-ade835b7d5ae7c6c", "locked": true, "schema_version": 3, "solution": false} -->
## Analyse de la solution

- calculer le module de l'accélération le long de la trajectoire, pour différente vitesse initiale
- comparer par rapport au cas d'un cercle de même hauteur h
<!-- #endregion -->

<!-- #region nbgrader={"grade": false, "grade_id": "cell-bd091397e6eba422", "locked": true, "schema_version": 3, "solution": false} -->
## Etude avec la courbe demandée

- faire la même étude avec la courbe sélectionnée
- attention à la vitesse initiale 
- refaire le calcul en prenant en compte une force  de frottement $-C_f \vec{U}$
- Ecrire un rapport de quelques pages avec votre analyse et conclusion dans le fichier `monCR.tex`

<!-- #endregion -->

```python nbgrader={"grade": true, "grade_id": "cell-e50ac99e2103d821", "locked": false, "points": 10, "schema_version": 3, "solution": true, "task": false}
# simulation
```

## FIN du TP
