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 :

Vitesse de calcul de scipy.integrate


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut Vitesse de calcul de scipy.integrate
    Bonjour,

    J'utilise la version 3.3 64 bits de Python sous windows 7, module mis en jeu : [SCIPY]

    J'ai cherché à programmer les équations du mouvement d'un corps à partir d'un potentiel de la forme -G*M/r, et donc à partir d'un système d'équations différentielles du second ordre qui met en jeu une égalité entre accélération et -gradient du potentiel.

    Pour ce faire, j'ai chercher à résoudre ce système avec le module scipy.integrate.ode et scipy.integrate.odeint ( j'ai utilisé les deux séparément pour les comparer).
    J'obtiens bien les résultats qui me conviennent, seulement le temps de calcul pour la résolution du système par ode et odeint est trop long.
    J'ai réussi à le diminuer en diminuant le pas de temps et surtout en diminuant les exigences sur la précision du calcul avec ode(atol= , rtol= ). Pour se faire une idée, je suis passé d'un temps de 0.6 sec à 60 ms (pour une résolution du système) en faisant cela. Mais je souhaiterais que ce soit encore moins long, il faudrait que je gagne un bon facteur 10, car je dois exécuter ce calcul un grand nombre de fois.

    Je sais qu'il y a d'autres options dans ode et odeint mais je ne sais pas bien les utiliser, je cherche donc à savoir si il y en a qui m'aideraient à gagner en vitesse de calcul, ou même si vous avez d'autres astuces pour gagner en vitesse, ça m'avancerait bien.

    Merci par avance pour votre aide

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Même si je ne connais pas cette function de scipy je me permets de répondre.

    60ms c'est vraiment pas mal à mon avis. Tires-tu cette valeur d'un calcul ou de multiples calculs? Est-ce que t'es assuré de bien mesurer le temps d'exécution de la fonction seule sans être "pollué" par d'autres opérations? Faire un benchmark, c'est pas evident. Quelle method utilises-tu? timeit, time.clock()?

    Sinon, pour ce qui est de l'optimisation, tu pourrais soit te tourner vers du C (mais je pense que la function en question est déjà codée soit en C, soit en Fortran), ou passer par du multiprocess. Toutefois je ne suis pas sûr que pour des calculs aussi rapides ce soit avantangeux..


    Ju

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut
    Merci pour ta réponse Julien.

    60 ms c'est pour une seule résolution du système, ce qui me donne un résultat de 500 points (pour 500 temps différents), ce qui diffère selon le pas de temps que je donne, mais celui-ci ne change pas trop le temps de calcul.

    J'utilise time.clock() en le plaçant juste avant et juste après le solver ode, et je regarde la différence entre les deux temps, donc j'aurais tendance à penser que le calcul n'est pas pollué par d'autres opérations, mais je n'en suis pas certain.

    Le solver odeint que j'utilise provient d'une bibliothèque fortran à ce que j'ai vu. Et concernant le multiprocess je ne sais pas du tout ce que c'est.

Discussions similaires

  1. Gestion mémoire et vitesse de calculs
    Par moidibe dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2010, 13h08
  2. vitesse de calcul décroissante (différence fini)
    Par acx01b dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/01/2010, 17h49
  3. [MySQL] Vitesse de calcul MySQL Vs PHP
    Par Tacos dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/01/2010, 00h30
  4. probleme avec la vitesse du calcul
    Par kroma23 dans le forum Débuter
    Réponses: 6
    Dernier message: 23/10/2008, 19h17
  5. imbrication de tables dérivées et vitesse de calcul
    Par tinomulot dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/09/2008, 16h15

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