Rational is only needed if you have the division of integer literals,
because SymPy cannot control how Python evaluates 1/3. Once you have a
fraction in an expression, it will stay exact:
>>> (-((s)/(j))*((4*(j-1)*s+4*j**2+4*j-2-4*(s-j+1)*m+m**2)/(2*(4*j**2-1)-4*m+m**2))).subs({s: 3, j: 1})
-3*(m**2 - 12*m + 6)/(m**2 - 4*m + 6)
It's not necessary to use Rational to create a symbolic fraction.
Using / as you have done is the correct way to do that.
It's possible I'm misunderstanding your question because what you
described is not what happens. The problem that you are perhaps having
is that if one of the numbers you substitute is substituted as a
float, then SymPy will evaluate the entire expression as a float.
>>> (-((s)/(j))*((4*(j-1)*s+4*j**2+4*j-2-4*(s-j+1)*m+m**2)/(2*(4*j**2-1)-4*m+m**2))).subs({s: 3, j: 1, m: 1.0})
5.00000000000000
If you want an exact number in your answer then all your numeric
constants should be rational numbers rather than floats.
Aaron Meurer
> --
> You received this message because you are subscribed to the Google Groups "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to
sympy+un...@googlegroups.com.
> To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/aba4d9d8-4533-4649-a9b4-ea0e83116e20n%40googlegroups.com.