IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Calcul de pente


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut Calcul de pente
    Bonjour à tous !

    J'écris ce message afin de demander votre aide concernant un problème que je rencontre lors de mon stage. Suite à une expérience, je suis amené à faire l’acquisition de données sur un fichier texte que j'exporte ensuite sur Python, une fois fait je cherche à calculer la pente à plusieurs endroits de cette même courbe. C'est pourquoi, j'ai commencé par lisser la courbe pour ensuite en extraire la pente. Malheureusement, compte tenu de mon niveau je n'y arrive pas... Je vous montre mon programme :
    Code : 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
     
    import numpy as np
    import matplotlib.pyplot as plt
     
     
     
    data_isotherme = np.loadtxt(u"Z:\\donnees\\rapport.txt",usecols = (0,1,2,3), 
                                  skiprows=1)
     
    x1 = data_isotherme[:,1]
    y1 = data_isotherme[:,2]
    ##permet d'effectuerle lissage de la courbe
    y = savgol_filter(y1, 3365, 3)#3365 est la taille de la fenêtre, 3e degré polynomial
     
    plt.plot(y,x1)
    #plt.plot(y1,x1, color='red')#La courbe sans le lissage !
    plt.grid()
    plt.xlim(40,140)
    plt.ylim(-5,35)   
    plt.title(u"Isotherme")
    plt.xlabel(u"AMM (A²)")
    plt.ylabel(u"P (mN/m)")
     
    #Tracer la pente
     
    M=np.where((y>60) & (y<60.1))
     
    N=np.diff(y==2971)
    une fois arrivé à la partie "tracer la pente" alors je n'arrive ni à la tracer et ni à en extraire la valeur.. sachant que je dois recommencer cette opération pour plusieurs autres position. Help !!

    Merci d'avance pour votre aide

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 795
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Pakos33 Voir le message
    je cherche à calculer la pente à plusieurs endroits de cette même courbe.
    Une pente (de droite donc) se calcule entre deux points. Dans l'équation de droite y=mx+p, c'est la valeur de "m". Je ne connais pas assez numpy pour dire s'il possède une méthode pour la calculer (probablement que oui) mais sinon pour deux points A(xa, ya) et B(xb, yb), elle vaut (yb-ya)/(xb-xa).
    Citation Envoyé par Pakos33 Voir le message
    Je vous montre mon programme :

    Citation Envoyé par Pakos33 Voir le message
    sachant que je dois recommencer cette opération pour plusieurs autres position.
    Peut-être qu'alors écrire une fonction serait un plus... Enfin c'est généralement un plus quand on doit effectuer la même opération à différents endroits quoi...

    pente=lambda A, B: (B[1] - A[1]) / (B[0] - A[0]) if B[0] != A[0] else float("inf").
    Ensuite tu l'appelles en lui passant les coordonnées des points sous forme de tuple (ex m=pente((2, 1), (3, 2)))...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Il existe une fonction qui permet de trouver les coefficients du polynôme de degré n qui s'ajuste au mieux à un nuage de points.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
    voir https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.polyfit.html

    On peut donc récupérer ces coefficients et la dérivée d'un polynôme de degré n étant facile à calculer, on trouve les coefficients de cette dérivée et sa valeur (la pente cherchée) pour tout x.

    Exemple
    Une fonction polynomiale de degré 3 s’écrit sous la forme suivante : ax³ + bx² + cx + d

    Sa dérivée : 3a + 2bx + c

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Bonjour,

    Désolé oui j'y penserai la prochaine fois.
    Tout d'abord Michel, je vois ce que tu veux par ta méthode mais cependant je ne comprend pas comment recommencer ça à chaque instant de la courbe afin d'obtenir toutes les pentes en fonction de l'évolution de la courbe.
    Ensuite Sve@r je te remercie, je pense que c'est ce qu'il me faut. Je vais essayer ça.
    Merci beaucoup de votre aide.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 795
    Billets dans le blog
    1
    Par défaut
    As-tu remarqué que ma solution et celle de Michel sont les mêmes ? Sauf que la mienne est plus simpliste puisqu'elle correspond à un polynome de degré 1.
    Donc si tu arrives à appliquer la mienne, tu devrais alors pouvoir appliquer celle de Michel qui te donnera une équation bien plus précise.

    Et en ce qui concerne le recommencemant à chaque instant de la courbe, comment ferais-tu pour appliquer ma solution à chaque point de ta courbe si tu ne sais pas le faire pour la solution de Michel ? Si tu as les points de ta courbe (donc les X et Y) tu peux alors appliquer une fonction quelconque pour chaque "X".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    Je te propose un petit exemple qu'il suffira d'adapter. Les données sont générées à partir d'un polynôme avec un bruit .

    Code : 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
    mport numpy as np
    import matplotlib.pyplot as plt
    np.random.seed(1)
    # points de l'axe x
    x = np.linspace(0,5, 100)
    #fonction polynome de degré 3 avec bruit pour l'exemple
    print("fonction avec bruit : 2.5x³ -12x²+10x-4 ")
    y = 2.5*x**3 -12*x**2+10*x-4+ np.random.random(100)*2
    # calcul de régression polynomiale de degré 3
    p=np.polyfit(x, y, 3)
    #fonction résultante
    yhat =p[0]*x**3+p[1]*x**2+p[2]*x+p[3]
    #coefficients du polynome par degré décroissant
    print(p[0],p[1],p[2],p[3])
    #calcul de la fonction pente en fonction de x
    pente=p[0]*3*x*x+2*p[1]*x+p[2]
    #affichage
    plt.grid()
    plt.plot(x,y)
    plt.plot(x,yhat, color='red',label="courbe lissée")
    plt.plot(x,pente, color='green',label="pente")
    plt.legend()
    plt.show()
    Nom : graphiquePy.png
Affichages : 6081
Taille : 30,8 Ko

Discussions similaires

  1. [Débutant] calculer les pentes positives d'une courbe
    Par Santoss dans le forum MATLAB
    Réponses: 12
    Dernier message: 09/02/2010, 19h00
  2. Proc Mixed mesures repetées et calcul de pente
    Par Can10ce dans le forum SAS STAT
    Réponses: 0
    Dernier message: 24/11/2009, 18h25
  3. Réponses: 1
    Dernier message: 25/08/2009, 10h59
  4. Calcul de pente
    Par Ptinéwik dans le forum Mathématiques
    Réponses: 6
    Dernier message: 29/06/2009, 02h54
  5. Calcul des pentes
    Par Lost in dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/07/2008, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo