Voici un programme Python bien élaboré qui résout l'équation différentielle donnée, calcule la hauteur
maximale d'eau dans la retenue, et affiche cette valeur directement sur le graphique. Le programme
utilise la méthode d'Euler pour résoudre l'équation différentielle et `matplotlib` pour tracer la courbe et
annoter la hauteur maximale.
```python
import numpy as np
import [Link] as plt
# Définir la fonction h'(t)
def dh_dt(t, h):
return t / h + 0.5 * h
# Méthode d'Euler
def euler_method(dh_dt, h0, t0, t_end, dt):
t_values = [Link](t0, t_end + dt, dt)
h_values = [Link](len(t_values))
h_values[0] = h0
for i in range(1, len(t_values)):
t = t_values[i-1]
h = h_values[i-1]
h_values[i] = h + dt * dh_dt(t, h)
return t_values, h_values
# Paramètres initiaux
h0 = 25 # Condition initiale h(0) = 25
t0 = 0 # Temps initial
t_end = 10 # Temps final (à ajuster selon le problème)
dt = 2 # Pas de temps
# Résolution de l'équation différentielle
t_values, h_values = euler_method(dh_dt, h0, t0, t_end, dt)
# Calcul de la hauteur maximale
h_max = [Link](h_values)
t_max = t_values[[Link](h_values)] # Temps correspondant à la hauteur maximale
# Affichage des résultats
[Link](figsize=(10, 6))
[Link](t_values, h_values, label='h(t)', color='blue', linewidth=2)
# Annoter la hauteur maximale sur le graphique
[Link](t_max, h_max, color='red', zorder=5) # Point rouge pour la hauteur maximale
[Link](f'Max: h = {h_max:.2f}', xy=(t_max, h_max), xytext=(t_max + 0.5, h_max + 1),
arrowprops=dict(facecolor='black', shrink=0.05), fontsize=12)
# Ajouter des labels et un titre
[Link]('Temps (t)', fontsize=14)
[Link]('Hauteur (h)', fontsize=14)
[Link]('Résolution de l\'équation différentielle par la méthode d\'Euler', fontsize=16)
[Link](fontsize=12)
[Link](True)
[Link]()
# Affichage de la hauteur maximale dans la console
print(f"La hauteur maximale d'eau dans la retenue est : {h_max:.2f}")
```
### Explication du programme :
1. **Fonction `dh_dt(t, h)`** :
- Cette fonction représente l'équation différentielle \( h'(t) = \frac{t}{h(t)} + \frac{1}{2}h(t) \).
2. **Méthode d'Euler** :
- La fonction `euler_method` résout l'équation différentielle en utilisant la méthode d'Euler. Elle
retourne les valeurs de temps `t_values` et les hauteurs correspondantes `h_values`.
3. **Calcul de la hauteur maximale** :
- `h_max = [Link](h_values)` calcule la hauteur maximale.
- `t_max = t_values[[Link](h_values)]` trouve le temps correspondant à cette hauteur maximale.
4. **Tracé du graphique** :
- Le graphique montre l'évolution de la hauteur d'eau en fonction du temps.
- La hauteur maximale est annotée sur le graphique avec une flèche et une étiquette.
5. **Affichage de la hauteur maximale** :
- La hauteur maximale est également affichée dans la console.
### Résultat attendu :
- Un graphique montrant la courbe de la hauteur d'eau en fonction du temps.
- Un point rouge indiquant la hauteur maximale, avec une annotation affichant la valeur exacte.
- La valeur de la hauteur maximale est également imprimée dans la console, par exemple :
```
La hauteur maximale d'eau dans la retenue est : 30.45
```
### Remarque :
- Vous pouvez ajuster `t_end` (temps final) et `dt` (pas de temps) en fonction des besoins du problème.