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 :

Sympy : probleme pour factoriser


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Sympy : probleme pour factoriser
    Bonjour, je débute avec le module sympy de Python et je trouve un phénomène étrange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    from sympy import *
    x = symbols('x')
    factor(-2*x**2+2*x)
    donne
    -2*x*(x - 1)
    C'est ce que j'attendais mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    from sympy import *
    x = symbols('x')
    factor(-2*x**2+2*x-1/2)
    donne
    -1.0*(1.0*x - 0.5)**2
    Il y a manifestement un problème de coefficient et je suppose que le 1/2 y est pour quelque chose mais comment obtenir la bonne factorisation :
    - (2·x - 1)**2/2 ou -2.0*(1.0*x - 0.5)**2 ?
    Et pourquoi obtient-on ceci ?
    Merci pour vos éclaircissement...
    Olivier

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    depuis la doc :
    If you do <number>/<number> inside of a SymPy expression, Python will evaluate the two numbers before SymPy has a chance to get to them. The solution is to sympify() one of the numbers, or use Rational.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> factor(-2*x**2 + 2*x - 1/2)
    -1.0*(1.0*x - 0.5)**2
    >>> factor(-2*x**2 + 2*x - simplify(1)/2)
    -(2*x - 1)**2/2
    >>> factor(-2*x**2 + 2*x - Rational(1/2))
    -(2*x - 1)**2/2

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse ça marche bien.
    EN revanche, je ne comprends pas le terme "évaluer ".
    Que fait sympy ? Si on avait écrit 0.5 au lieu de 1/2 c'est pareil alors qu'avec un entier ça marcherait bien.
    Que se passe-t-il exactement dans sympy ?
    Merci en tout cas pour la réponse mais du coup, il faut faire attention ! Est-ce que cela signifie, que dès que l'on a une fraction, il faut écrire Rational(de la fraction) ?

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par olivier_1970 Voir le message
    je ne comprends pas le terme "évaluer ".
    Que fait sympy ? Si on avait écrit 0.5 au lieu de 1/2 c'est pareil alors qu'avec un entier ça marcherait bien.
    Que se passe-t-il exactement dans sympy ?
    entre le code source dans lequel on écrit "5 + 3" et l'exécution par le processeur, il y a Python qui va lire chaque terme, interpréter les nombres, l'opération etc. comme du code machine, et pour le moins au préalable ranger le tout proprement dans une structure de donnée interne à son fonctionnement, c'est ça qu'on entend par "évaluer"

    le but c'est d'intercepter la fraction avant qu'elle soit évaluée de manière standard par Python, et faire en sorte qu'elle soit évaluée en priorité par le module Sympy, donc en passant la fraction en tant qu'argument d'une fonction Sympy on arrive à retrouver ses petits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> type(0.3333)           # <class 'float'>
    >>> type(1/3)              # <class 'float'>
    >>> type(Rational(1/3))    # <class 'sympy.core.numbers.Rational'>

    du coup, il faut faire attention ! Est-ce que cela signifie, que dès que l'on a une fraction, il faut écrire Rational(de la fraction) ?
    oui c'est à peu près ce que veut dire la réponse précédente

Discussions similaires

  1. [debutant] Probleme pour dessiner un simple cube
    Par scorpiwolf dans le forum DirectX
    Réponses: 6
    Dernier message: 02/07/2003, 20h29
  2. [LG]Divers problémes pour un programme.
    Par Horus TCT dans le forum Langage
    Réponses: 14
    Dernier message: 24/05/2003, 23h04
  3. Probleme pour les insertion au format etranger
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 19/03/2003, 10h55
  4. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 09h39
  5. Réponses: 2
    Dernier message: 30/05/2002, 08h54

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