Ask Your Question

Rearranging expressions to minimize negative signs

asked 2019-05-13 17:14:37 +0100

relatively_random gravatar image

updated 2022-10-27 20:16:23 +0100

FrédéricC gravatar image

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 22:17:12 +0100

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 17:14:37 +0100

Seen: 316 times

Last updated: May 13 '19