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 :

Simulation trajectoire satellite en chute


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Simulation trajectoire satellite en chute
    Bonjour pour un projet que je dois rendre dans 2 jours j'ai réalisé un programme me permettant de simuler la trajectoire d'un satellite en orbite autour de la Terre et je l'ai ensuite complété en simulant sa chute, j'ai utilisé des équations différentielles pour ça et pour la seconde simulation j'ai juste rajouté les forces de frottement dans les équa diffs. Mais j'obtient une erreur quand je lance mon programme pour la simulation avec frottement .
    Voilà 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
    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
    from math import *
    import numpy as np
    import matplotlib.pyplot as plt
    import decimal
     
    from pylab import *
     
    m=11000
    C=0.5
     
    A=31416
    def f(x, y,x_1,y_1,g=9.82):
     
        l=0.001*math.exp(-0.15*(x-600000))
        y_2 =(-g*y/((x**2+y**2)**0.5)-(1/2*m)*A*C*l*(y_1)**2)
     
     
        x_2 =(-g*x/((x**2+y**2)**0.5)-(1/2*m)*A*C*l*(x_1)**2)
     
        return x_2, y_2
     
     
     
    temps_finale= 5500
    dt = 0.001
    N= int(temps_finale / dt)
    print ('N=',N)
     
     
     
    x_1 = [0]
    y_1= [0]
     
    x_0 = [0]
    y_0= [0]
     
     
     
     
    x_0[0], y_0[0] = (6745752,0) 
     
    x_1[0], y_1[0] = (0,7600)
     
     
    for i in range(N):
     
        x_dot, y_dot = f(x_0[i], y_0[i],x_1[i], y_1[i])
     
        x_1_i = x_1[i] + (x_dot * dt)
        y_1_i = y_1[i] + (y_dot * dt)
     
     
        x_0_i = x_0[i] + (x_1[i] * dt)
        y_0_i = y_0[i] + (y_1[i] * dt)
     
     
        x_1.append(x_1_i)
        y_1.append(y_1_i)
     
     
        x_0.append(x_0_i)
        y_0.append(y_0_i)
     
     
    x,y=x_0,y_0  
     
    X=[a*10**(-5) for a in x] 
    Y=[a*10**(-5) for a in y]
     
    plt.plot(X,Y)
     
     
    plt.legend()
    plt.show()
    Et voilà l'erreur
    runfile('C:/Users/samy_/Desktop/traj2.py', wdir='C:/Users/samy_/Desktop')
    N= 5500000
    Traceback (most recent call last):

    File "<ipython-input-23-3a3e81023870>", line 1, in <module>
    runfile('C:/Users/samy_/Desktop/traj2.py', wdir='C:/Users/samy_/Desktop')

    File "C:\Users\samy_\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)

    File "C:\Users\samy_\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

    File "C:/Users/samy_/Desktop/traj2.py", line 54, in <module>
    x_dot, y_dot = f(x_0[i], y_0[i],x_1[i], y_1[i])

    File "C:/Users/samy_/Desktop/traj2.py", line 21, in f
    l=0.001*math.exp(-0.15*(x-600000))

    OverflowError: math range error
    Quelqu'un a une idée de ce que je pourrai faire sachant que je suis vraiment débutant sur python et que le temps presse?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 704
    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 704
    Points : 31 006
    Points
    31 006
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Le souci, c'est que quand x vaut 595264, -0.15*(x-600000) vaut 710 et math.exp(710) est trop grand pour le module "math"

    Ce que tu peux faire, c'est utiliser le fait que e(-0.15 * k)=e(-0.15)^k et passer par le module "decimal" qui permet de calculer beaucoup plus loin (mais aussi beaucoup plus lentement) et réécrire ta formule de cette façon
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import decimal
    l=0.001*decimal.Decimal(math.exp(-0.15)) ** (x-600000)
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    D'accord merci beaucoup je vais essayer comme ça!

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Du coup ça me renvoie cette erreur :

    l=0.001*decimal.Decimal(math.exp(-0.15)) ** (x-600000)

    TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal'

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 704
    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 704
    Points : 31 006
    Points
    31 006
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dualism Voir le message
    TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal'
    Oui, j'avais juste testé decimal.Decimal(math.exp(-0.15)) ** (x-600000) (sans tester la multiplication par "0.001") et j'ai tapé mon post en live. Et en plus j'ai écrit "decimal.decimal" alors que c'est "decimal.Decimal" mais apparemment t'as rattrappé l'erreur.

    Le module "decimal" n'accepte pas de multiplication par des flottants. Mais il accepte la multiplication par des décimaux.

    Donc la formule devient l=decimal.Decimal("0.001") * decimal.Decimal(math.exp(-0.15)) ** (x-600000) et "l" devient ensuite un nombre décimal. Que tu ne pourras pas reconvertir en float car sinon le résultat devient "inf" (j'ai testé).

    Donc il te faudra tout continuer ensuite tes calculs en décimal.
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    D'accord merci beaucoup je vais tester comme ça !

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Peut être faudrait-il justifier/valider le calcul de math.exp(-0.15*(x-600000)), car s'il ne sert à rien pas la peine de...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Alors du coup ça marche avec le passage à decimal mais le temps de calcul est monstrueux comparé à avant

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 704
    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 704
    Points : 31 006
    Points
    31 006
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Peut être faudrait-il justifier/valider le calcul de math.exp(-0.15*(x-600000)), car s'il ne sert à rien pas la peine de...
    A l'occasion effectivement. Si Dualism veut bien nous détailler comment il est arrivé à cette formule parce que le seul nombre qui m'a paru familier c'est l'accélération gravitationnelle de 9.82 m/s²...

    Citation Envoyé par Dualism Voir le message
    Alors du coup ça marche avec le passage à decimal mais le temps de calcul est monstrueux comparé à avant
    Hé oui. En fait le module décimal sert à travailler en précision absolue dans des mondes où cela est nécessaire (les comptes bancaires par exemple). Chaque digit est stocké sur une position (exactement comme en Cobol) et les calculs se font comme au primaire (enfin c'est comme cela que je l'imagine). Fatalement c'est long. Surtout qu'ici toi tu les utilises pour traiter des nombres très grands...
    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]

Discussions similaires

  1. [Python 3.X] Simulation trajectoire d'une particule ponctuelle
    Par Démocrite5 dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 07/06/2018, 10h20
  2. Simulation trajectoire de balle java
    Par Julienjava dans le forum Général Java
    Réponses: 7
    Dernier message: 06/04/2014, 00h16
  3. Probleme Voyageur de Commerce - Recuit Simulé
    Par dinver dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/06/2009, 22h26
  4. Comment simuler la chute du curseur ?
    Par Chyokyka dans le forum Débuter
    Réponses: 42
    Dernier message: 25/11/2007, 10h33
  5. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51

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