Revision history [back]

This is actually pretty normal behavior. Let's compare some examples from the documentation.

      sage: x, y = var('x, y')
sage: solve([x+y==6, x-y==4], x, y)
[[x == 5, y == 1]]


So the answers appear in a list; in this case, the answer is two variables equalling something, so it is a list with one element which has two elements in it.

      sage: solve([sin(x)==x,y^2==x],x,y)
[sin(x) == x, y^2 == x]


Here, Sage/Maxima doesn't know how to solve this, so it just returns a list with the original equations. And that is what is happening in your case too, only your equation is slightly rearranged and is long enough that the brackets appear above and below it because it doesn't fit on one line.

In general I don't know that one can expect all solutions - there is always a place a human will be smarter than the computer.

sage: S = solve(qe,r)[0]
sage: S.lhs()^2==S.rhs()^2
M^2 + r^2 == (u - sqrt(m^2 + r^2))^2
sage: S.lhs()^2==(S.rhs()^2).expand()
M^2 + r^2 == m^2 + r^2 + u^2 - 2*sqrt(m^2 + r^2)*u


But trying to solve the latter for r throws an error because it wants to know if something is positive. Here I intervene.

sage: T = M^2-m^2-u^2==-2*u*sqrt(m^2 + r^2)
sage: T^2
(M^2 - m^2 - u^2)^2 == 4*(m^2 + r^2)*u^2
sage: (T^2).expand()
M^4 - 2*M^2*m^2 - 2*M^2*u^2 + m^4 + 2*m^2*u^2 + u^4 == 4*m^2*u^2 + 4*r^2*u^2
sage: solve((T^2).expand(),r)
[r == -1/2*sqrt(M^4 - 2*M^2*m^2 - 2*M^2*u^2 + m^4 - 2*m^2*u^2 + u^4)/u, r == 1/2*sqrt(M^4 - 2*M^2*m^2 - 2*M^2*u^2 + m^4 - 2*m^2*u^2 + u^4)/u]


I have no idea if spurious solutions were introduced - squaring is dangerous! But the moral is that sometimes you have to do things 'by hand', even with computers.