Calculs avec SYMPY : Comment obtenir des évaluations numériques fractionnaires
getudir78
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
-
getudir78 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
getudir78 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
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)
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
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é.