|   | 1 |  initial version  | 
Here is something that works on your second example:
def evaluate_with_units(expr):
    expr_canonical = expr.canonicalize_radical()
    num = expr_canonical.numerator().polynomial(ring=RR['meter,second'])
    denom = expr_canonical.denominator().polynomial(ring=RR['meter,second'])
    return SR((num.lc() / denom.lc()) * (num/num.lc()) / (denom / denom.lc()))
Example:
sage: stuck=123.0*sqrt(units.length.meter*(units.length.meter/units.time.second^2)/(17.0*tan(0.1*pi) + 1))/cos(0.2*pi)
sage: evaluate_with_units(stuck)
59.5254442433757*meter/second
|   | 2 |  No.2 Revision  | 
Here is something that works on your second example:
def evaluate_with_units(expr):
    expr_canonical = expr.canonicalize_radical()
    var_names = [str(v) for v in expr_canonical.variables()]
    poly_ring = PolynomialRing(RR, names=var_names)
    num = expr_canonical.numerator().polynomial(ring=RR['meter,second'])
expr_canonical.numerator().polynomial(ring=poly_ring)
    denom = expr_canonical.denominator().polynomial(ring=RR['meter,second'])
expr_canonical.denominator().polynomial(ring=poly_ring)
    return SR((num.lc() / denom.lc()) * (num/num.lc()) / (denom / denom.lc()))
Example:
sage: stuck=123.0*sqrt(units.length.meter*(units.length.meter/units.time.second^2)/(17.0*tan(0.1*pi) + 1))/cos(0.2*pi)
sage: evaluate_with_units(stuck)
59.5254442433757*meter/second
 Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.
 
                
                Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.