Menu

Calculs avec SYMPY : Comment obtenir des évaluations numériques fractionnaires

Messages postés
16
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
14 mai 2019
- - Dernière réponse : getudir78
Messages postés
16
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
14 mai 2019
- 14 mai 2019 à 00:09
Bonjour,

Pour pouvoir calculer simplement le quotient euclidien de deux polynômes à coefficients fractionnaires , j'utilise SYMPY comme le montre le programme ci-après. Tous les calculs se passent bien et donnent des résultats avec des coefficients fractionnaires comme souhaité.
Le problème apparaît lors des calculs de valeurs numériques avec evalf() ou N() : Les résultats sont automatiquement donnés en nombres flottants.
Est-il possible de les les obtenir au choix, soit en nombres fractionnaires (Rational), soit en nombre flottants ?
Je vous remercie par avance, pour l'aide que vous pourrez m'apporter.
Cordialement vôtre,
Getudir78
------------------------------------------------------------------------------------------------------
from sympy import *
x = symbols('x', domain='QQ')
f = Rational('5/7')*x**2 + Rational('10/7')*x +Rational('3/7')
ff = f.as_poly(domain='QQ')
print(" ff = ", ff)

g = Rational('2/3')*x + Rational('7/2')
gg = g.as_poly(domain='QQ')
print(" gg = ", gg)
q, r = div(ff, gg, domain='QQ')
print(" q = ", q)
print(" r = ", r)
cc = (q*gg + r).expand()
print(" cc = ", cc)
# Les calculs formels se passent bien
# Evaluation numérique des résultats
print(" val num = ", ff(Rational('2/7')).evalf(5))
print(" val num = ", N(ff(Rational('2/7'))))
# les résultats sont des nombres flottants
#
# EST-IL POSSIBLE DE FORCER evalf() ou N() A FOURNIR DES RESULTATS FRACTIONNAIRES (Rational)

Configuration: Windows / Firefox 66.0
Afficher la suite 

Votre réponse

1 réponse

0
Merci
Bonjour,

Tu peux peut-être mettre le résultat d'un nombre flottant dans une variable et transformer cette variable en résultat fractionnaire avec simpify:

sympify("0.2345", rational=True)

469/2000
getudir78
Messages postés
16
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
14 mai 2019
32 -
Merci pour ta contribution. Si le nombre flottant a un développement décimal qui inclut moins de chiffre que le nombre de chiffres significatifs du format flottant, on obtient bien par sympify un nombre rationnel rigoureusement égal au nombre flottant. Mais si le développement décimal du nombre flottant est périodique, la fraction est fabriquée sur la base du nombre de chiffres significatifs, ce qui introduit une différence entre le flottant et le rationnel qui ne sont
plus rigoureusement égaux.
Je suis parti sur d'autres bases : J'ai utilisé "sympy" pour créer des polynômes à coefficients rationnels
x = symbols('x', domain='QQ')
f = Rational('5/1')*x**2 + Rational('10/1')*x +Rational('3/1') (per exemple)
et j'ai utilisé la fonction "div" pour diviser des polynômes à coefficients rationnels, par exemple, le polynôme ff par gg,
q, r = div(ff, gg, domain='QQ')
où a = quotient et r = reste.Dans ces conditions, la division de deux polynômes à coefficients rationnels, fournit les polynômes quotient et reste avec des coefficients rationnels exacts; ce qui résout la problème que je m'étais posé.
Commenter la réponse de zucrezel