# strange behaviour when solving equations symbolically

Anonymous

I'm new to sage and wanted to get startet. However, i tried solving equations symbolically and found a strang behaviour i do not understand. Can anybody explain to me this behaviour?

\$ sage
----------------------------------------------------------------------
| Sage Version 4.7.1, Release Date: 2011-08-11                       |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
sage: r, u, m, M = var('r, u, m, M')
sage: qe = (u == sqrt(r^2 + m^2) + sqrt(r^2 + M^2))
sage: qe
u == sqrt(m^2 + r^2) + sqrt(M^2 + r^2)
sage: print solve(qe, r)
[
sqrt(M^2 + r^2) == u - sqrt(m^2 + r^2)
]
sage:


Any suggestions?

edit retag close merge delete

Sort by ยป oldest newest most voted

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.

more