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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du 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
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 859
    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 859
    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
    Futur Membre du 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
    Par défaut
    D'accord merci beaucoup je vais essayer comme ça!

  4. #4
    Futur Membre du 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
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 859
    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 859
    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
    Futur Membre du 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
    Par défaut
    D'accord merci beaucoup je vais tester comme ça !

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