Ask Your Question

Rearranging expressions to minimize negative signs

asked 2019-05-13 10:14:37 -0500

SageMath newbie still learning the basics here. My goal is to mostly use Sage for basic arithmetic and calculus. I'm playing with some basic equations here, but I can't seem to figure out how to rearrange the output the way I'd like.

For instance:

f, s, s_i = var("f, s, s_i")
thin_lens_formula = 1/f == 1/s + 1/s_i
solve(thin_lens_formula, s)[0]


s == -f*s_i/(f - s_i)

I'd prefer this to be expressed as s == f*s_i / (s_i - f), multiplying both numerator and denominator by -1 so there is one less negative sign in total. Is there a way to do this or is Sage not really meant to be micro-managed like this?

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2019-05-13 15:17:12 -0500

rburing gravatar image

You can't really control the expression in this way because Sage does some automatic simplifications.

However, you can control how the expression is output, e.g. as $\LaTeX$:

def latex_with_few_minuses(frac):
    numer, denom = frac.numerator_denominator()
    permutations = ((1, numer, denom), (-1, numer, -denom), (-1, -numer, denom), (1, -numer, -denom))
    total_minuses = lambda args: sum(str(latex(arg)).count('-') for arg in args)
    prefactor, numer, denom = min(permutations, key=total_minuses)
    return LatexExpr(('-' if prefactor == -1 else '') + r'\frac{' + latex(numer) + '}{' + latex(denom) + '}')

In your example:

f, s, s_i = var("f, s, s_i")
thin_lens_formula = 1/f == 1/s + 1/s_i
sol = solve(thin_lens_formula, s)[0].rhs()


$$\frac{ f s_{i} }{ -f + s_{i} }$$

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2019-05-13 10:14:37 -0500

Seen: 25 times

Last updated: May 13