IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

danielhagnoul

Python, pandas. Trouver les minimas et les maximas d'une courbe périodique.

Noter ce billet
par , 09/04/2020 à 11h18 (1754 Affichages)
Lorsque vous utilisez un Dataframe pour contenir les valeurs x et y d'une courbe périodique il est possible de trouver les minimas et les maximas de cette courbe.

J'ai utilisé la méthode à plusieurs reprises sur des équations de courbes périodiques très diverses, mais je ne peux pas garantir la justesse du résultat (minimas et maximas) dans tous les cas de figure. C'est la raison pour laquelle je vous recommande vivement de toujours comparer le résultat (minimas et maximas) avec le tracé de la courbe périodique (matplotlib).

Lorsqu'un résultat semble étrange par rapport au tracé de la courbe périodique n'oubliez pas de zoomer sur la zone concernée du graphique, car selon son échelle il peut y avoir un plat apparent la où il y a un petit creux ou une petite bosse.

La comparaison de la valeur de deux réels quasi égaux doit se faire avec une petite tolérance (epsilon) pour trouver les minimas et les maximas.

Nom : Figure_1.png
Affichages : 532
Taille : 22,8 Ko

Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#! python3
# coding: utf-8
 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
epsilon = 1e-7  # tolérance par rapport à 1
# tolérance relative : x + x * epsilon = x * (1 + epsilon)
rtol_plus = (1 + epsilon)
rtol_moins = (1 - epsilon)
 
pd.options.display.max_rows = 999  # liste au maximum 999 valeurs du Dataframe
 
""" Exemple y = 1e-12 * np.sin(x) """
 
x = np.linspace(0, np.pi, 200)
y = [1e-12 * np.sin(item) for item in x]
df = pd.DataFrame({'x': x, 'y': y})
 
plt.title("1e-12 * np.sin(x)")
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
 
df['Minimums'] = df['y'][(df['y'].shift(1) > df['y'] * rtol_moins) & (
    df['y'].shift(-1) > df['y'] * rtol_moins)]
 
df['Maximums'] = df['y'][(df['y'].shift(1) < df['y'] * rtol_plus) & (
    df['y'].shift(-1) < df['y'] * rtol_plus)]
 
pd.options.display.max_rows = 999
 
print(df)
 
""" Exemple y = 2.0 * np.cos(np.sqrt(2.0 * x)) + 3.0 * np.cos(np.sqrt(3.0 * x) + 5.0 * np.cos(np.sqrt(5.0 * x))) - """
 
x = np.linspace(0, 5.0 * np.pi, 400)
y = [2.0 * np.cos(np.sqrt(2.0 * item)) + 3.0 * np.cos(np.sqrt(3.0 *
                                                              item) + 5.0 * np.cos(np.sqrt(5.0 * item))) for item in x]
df = pd.DataFrame({'x': x, 'y': y})
 
plt.title("2.0 * np.cos(np.sqrt(2.0 * x)) + 3.0 * np.cos(np.sqrt(3.0 * x) + 5.0 * np.cos(np.sqrt(5.0 * x)))")
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
mng = plt.get_current_fig_manager()
mng.window.state('zoomed')  # plot plein écran
plt.show()
 
df['Minimums'] = df['y'][(df['y'].shift(1) > df['y'] * rtol_moins) & (
    df['y'].shift(-1) > df['y'] * rtol_moins)]
 
df['Maximums'] = df['y'][(df['y'].shift(1) < df['y'] * rtol_plus) & (
    df['y'].shift(-1) < df['y'] * rtol_plus)]
 
 
print(df)

Nom : Figure_2.png
Affichages : 462
Taille : 39,7 Ko

Licence Creative Commons Attribution 2.0 Belgique

Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog Viadeo Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog Twitter Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog Google Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog Facebook Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog Digg Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog Delicious Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog MySpace Envoyer le billet « Python, pandas. Trouver les minimas et les maximas d'une courbe périodique. » dans le blog Yahoo

Mis à jour 09/04/2020 à 11h44 par danielhagnoul

Catégories
Programmation , Python , Python

Commentaires