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

Calcul scientifique Python Discussion :

Graphique avec condition IF


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur GCSTR
    Inscrit en
    Octobre 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur GCSTR

    Informations forums :
    Inscription : Octobre 2023
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Graphique avec condition IF
    Bonjour,
    Comment puis-je faire pour faire un graphique regroupant les résultats de calcul suivant une condition IF?
    J'ai fait ce code et je comprend pas l'erreur SyntaxError: invalid syntax. Comment il faut que je m'y prenne?
    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
    print("Longueur")
    L1 = input()
    L = float(L1)
    z=np.linspace(0, L, 30)
     
    If z<zc
    yz = f(z)
    dydz = g(z)
    Mz = h(z)
    Tz = i(z)
    Else
    yz = f2(z)
    dydz = g2(z)
    Mz = h2(z)
    Tz = i2(z)
     
    plt.plot(z, dydz) #regroupant le tracé de la courbe pour z<zc et z>zc
    Merci
    MJl

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Quel dommage que Python ne dise pas où se trouve l'erreur de syntaxe !
    Attends mais si en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      File "C:\Users\Ppo\Documents\Python\Projects\Test1\venv\test.py", line 6
        If z < zc
           ^
    SyntaxError: invalid syntax
    L'instruction if s'écrit en minuscule et elle se termine avec :.
    Idem pour else.
    Tu n'a pas respecté l'indentation.

    Et j'en passe.

    La première chose à faire est d'apprendre les bases de Python.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur GCSTR
    Inscrit en
    Octobre 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur GCSTR

    Informations forums :
    Inscription : Octobre 2023
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Effectivement je n'ai pas respecté la syntaxe, je m'en suis rendu compte après avoir posté le message.
    Je voulais savoir si c'est possible de faire un graphe dont la fonction est sujet à une condition.
    C'est-à-dire que pour un certain intervalle python trace une fonction et sur un autre intervalle python trace une autre fonction.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Il est impossible de faire quoi que ce soit avec le code que tu fournis.

    Il est syntaxiquement incorrect et tu n'as pas pris la peine de le corriger même après ma remarque.
    On ne sais pas à quoi correspond zc.
    On ne sais pas ce que font les routines f(), g(), h(), i(), f2(), g2(), h2() et i2().
    Et du coup on y ignore ce que que contient [C]dydz /C].
    Que viennent faire les variables yz, Mz et Tz dans ton exemple alors que visiblement tu ne t'en sers pas ?

    La seule chose que je parviens à extirper de ton code et tes explications, c'est que tu souhaites tracer deux courbes.
    Pour cela, il faut deux appels à plot ou alors fournir deux séries de coordonnées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    plt.plot([1, 2, 3], [1, 4, 9])
    plt.plot([2, 3, 4], [2, 5, 10])
    plt.show()
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plt.plot([1, 2, 3], [1, 4, 9], [2, 3, 4], [2, 5, 10])
    plt.show()

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur GCSTR
    Inscrit en
    Octobre 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur GCSTR

    Informations forums :
    Inscription : Octobre 2023
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par popo Voir le message
    Il est impossible de faire quoi que ce soit avec le code que tu fournis.

    Il est syntaxiquement incorrect et tu n'as pas pris la peine de le corriger même après ma remarque.
    On ne sais pas à quoi correspond zc.
    On ne sais pas ce que font les routines f(), g(), h(), i(), f2(), g2(), h2() et i2().
    Et du coup on y ignore ce que que contient [C]dydz /C].
    Que viennent faire les variables yz, Mz et Tz dans ton exemple alors que visiblement tu ne t'en sers pas ?

    La seule chose que je parviens à extirper de ton code et tes explications, c'est que tu souhaites tracer deux courbes.
    Pour cela, il faut deux appels à plot ou alors fournir deux séries de coordonnées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    plt.plot([1, 2, 3], [1, 4, 9])
    plt.plot([2, 3, 4], [2, 5, 10])
    plt.show()
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plt.plot([1, 2, 3], [1, 4, 9], [2, 3, 4], [2, 5, 10])
    plt.show()
    Voici le code complet avec les corrections apportées
    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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    import numpy as np
    import matplotlib.pyplot as plt
    import math 
     
    print("Longueur du pieu L")
    L1 = input()
    L = float(L1)
    print("Profondeur zc en m")
    zc1 = input()
    print("Diametre en m")
    D1 = input()
    zc = float(zc1)
    D = float(D1)
    E = 35000
    I = np.pi*(D**4)/64
    print(I, "m4 Inertie I")
    print("Module de reaction K")
    K1 = input()
    K = float(K1)
    print(K, "MPa Module de reaction K")
    print("Module de reaction en surface Ks")
    Ks1 = input()
    Ks = float(Ks1)
    print(Ks, "MPa Module de reaction en surface Ks")
    print("Effort horizontal en tete Hd")
    Hd1 = input()
    Hd = float(Hd1)
    print("Moment en tete Md")
    Md1 = input()
    Md = float(Md1)
    l0 = (4*E*I/K)**0.25
    a = (Ks/K)**0.25
    lamH = 2*Hd/(l0*K*a**3)
    lamM = 2*Md/(l0**2*K*a**2)
    ca = np.cos(zc/l0)
    cb = np.cos(a*zc/l0)
    sa = np.sin(zc/l0)
    sb = np.sin(a*zc/l0)
     
    mu1 = (1+a**2)+(1-a**2)*np.cos(2*a*zc/l0)-2*a*np.sin(2*a*zc/l0)
    mu2 = 2*(1+a**2)+(1+2*a-a**2)*np.cos(2*a*zc/l0)-(1-2*a-a**2)*np.sin(2*a*zc/l0)
    mu3 = np.exp(2*a*zc/l0)*((1+a)*(1+a**2)/(1-a))
    mu4 = np.exp(-2*a*zc/l0)*((1+a)*(1+a**2)/(1-a))+2*(2*(1+a**2)+(1-a**2)*np.cos(2*a*zc/l0)-2*a*np.sin(2*a*zc/l0))
    mu5 = (1+a**2)-2*a*np.cos(2*a*zc/l0)-(1-a**2)*np.sin(2*a*zc/l0)
     
    C1 = (mu1*lamH-(mu2+mu3)*lamM)/(mu3+mu4)
    C2 = ((mu5+mu3)*lamH+(mu2-2*mu1+mu3)*lamM)/(mu3+mu4)
    C3 = C1+lamM
    C4 = C1+C2+C3-lamH
    C5 = np.exp((1-a)*zc/l0)*(C1*(a**2*ca*cb+sa*sb)-C2*(a**2*ca*sb-sa*cb))+np.exp((1+a)*zc/l0*(C3*(-a**2*ca*cb+sa*sb)+C4*(a**2*ca*sb+sa*cb)))
    C6 = np.exp((1-a)*zc/l0)*(C1*(-a**2*sa*cb+ca*sb)+C2*(a**2*sa*sb+ca*cb))+np.exp((1+a)*zc/l0)*(C3*(a**2*sa*cb+ca*sb)-C4*(a**2*sa*sb-ca*cb))
     
    z = np.linspace(0, L, 30)
     
    if z.any()<zc:
        yz = np.exp(-a*z/l0)*(C1*np.sin(a*z/l0)+C2*np.cos(a*z/l0))+np.exp(a*z/l0)*(C3*np.sin(a*z/l0)+C4*np.cos(a*z/l0))
        dydz = a/l0*(np.exp(-a*z/l0)*(-(C1+C2)*np.sin(a*z/l0)+(C1-C2)*np.cos(a*z/l0))+np.exp(a*z/l0)*((C3-C4)*np.sin(a*z/l0)+(C3+C4)*np.cos(a*z/l0)))
        Mz = 2*E*I*a**2/(l0**2)*(np.exp(-a*z/l0)*(C2*np.sin(a*z/l0)-C1*np.cos(a*z/l0))+np.exp(a*z/l0)*(-C4*np.sin(a*z/l0)+C3*np.cos(a*z/l0)))
        Tz = 2*E*I*a**3/(l0**3)*(np.exp(-a*z/l0)*((C1-C2)*np.sin(a*z/l0)+(C1+C2)*np.cos(a*z/l0))+np.exp(a*z/l0)*((-C3+C4)*np.sin(a*z/l0)+(C3-C4)*np.cos(a*z/l0)))
     
    else:
        yz2 = np.exp(-z/l0)*(C5*np.sin(z/l0)+C6*np.cos(z/l0))
        dydz2 = 1/l0*np.exp(-z/l0*(-(C5+C6)*np.sin(z/l0)+(C5-C6)*np.cos(z/l0)))
        Mz2 = 2*E*I/(l0**2)*np.exp(-z/l0)*(C6*np.sin(z/l0)-C5*np.cos(z/l0))
        Tz2 = 2*E*I/(l0**3)*np.exp(-z/l0)*((C5-C6)*np.sin(z/l0)+(C5+C6)*np.cos(z/l0))
     
    import matplotlib.pyplot as plt
     
    plt.plot(z, yz*1000, label="Deformee")
    plt.ylabel('y(z) (mm)')
    plt.xlabel("Profondeur (m)")
    plt.title("Deformee du pieu")
    plt.grid(which="both")
    plt.legend()
    plt.show()
     
    plt.plot(z, dydz, label="Rotation")
    plt.ylabel('dy/dz(z) (rad)')
    plt.xlabel("Profondeur (m)")
    plt.title("Rotation du pieu")
    plt.grid(which="both")
    plt.legend()
    plt.show()
     
    plt.plot(z, Mz, label="Moment z")
    plt.ylabel('M(z) (MN.m)')
    plt.xlabel("Profondeur (m)")
    plt.title("Moment du pieu")
    plt.grid(which="both")
    plt.legend()
    plt.show()
     
    plt.plot(z, Tz, label="Tranchant z")
    plt.ylabel('T(z) (MN)')
    plt.xlabel("Profondeur (m)")
    plt.title("Tranchant du pieu")
    plt.grid(which="both")
    plt.legend()
    plt.show()
    J'ai l'impression que ca marche pour z<zc mais pas pour z>zc car la courbe ne correspond pas à ce que ça devrait être.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Lorsque tu passe dans le else, tu n'alimentes pas les même variables (elles ont un 2 à la fin).
    Ces variables n'ont pas l'air d'être réutilisées dans la suite.

    Et cela correspond avec le cas où z>zc (ou avec z=zc)
    Il y a des chances que ton problème provienne de là.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur GCSTR
    Inscrit en
    Octobre 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur GCSTR

    Informations forums :
    Inscription : Octobre 2023
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par popo Voir le message
    Lorsque tu passe dans le else, tu n'alimentes pas les même variables (elles ont un 2 à la fin).
    Ces variables n'ont pas l'air d'être réutilisées dans la suite.

    Et cela correspond avec le cas où z>zc (ou avec z=zc)
    Il y a des chances que ton problème provienne de là.
    J'ai corrigé les 2, mais quand je fais un plot de yz par exemple avec la condition if et que je compare le plot avec celui sans la condition if, ça affiche exactement les même résultats et le même plot !
    Une idée?

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Pars du principe que je ne peux pas deviner ce que tu as fait pour corriger.
    Ecrit le de manière explicite.

    Par ailleurs, tu n'es pas obligé citer l'intégralité de mon message lorsque tu réponds.

    En attendant, je te suggère de faire print sur yz pour vérifier ce qu'il y a dedans.
    Si la courbe générée est la même, c'est que les données doivent être les mêmes.

    Exécute ton code en pas à pas ou fait des print régulier pour analyser ce qui ce passe.

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Je viens de remarquer quelque chose et je pense que ça pourrait expliquer pas mal de choses.

    tu teste si z.any()<zc.
    Cette routine renvoie True dès lors qu'au moins un des élément est évalué à True.

    Et np.linspace(0, L, 30) va remplir le tableau avec des nombres de 0 à L .
    Ce qui fait qu'à moins que L soit à zéro, z.any() renverra toujours True.

    Je pense que tu ne pas jamais dans le else.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/08/2020, 12h24
  2. [XL-2013] Graphique avec conditions en abscisse
    Par Dreaa dans le forum Excel
    Réponses: 0
    Dernier message: 07/04/2014, 14h28
  3. [XL-2010] Créer graphique en vba avec condition
    Par vins86 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/03/2014, 12h53
  4. faire des graphiques avec Perl
    Par And_the_problem_is dans le forum Modules
    Réponses: 2
    Dernier message: 16/07/2003, 16h08
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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