Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

.canonicalize_radical() produces incorrect result

I'm trying to simplify some trigonometric expressions using sage, and I noticed that .simplify_full() doesn't optimize those, unless a .canonicalize_radical() is used (thanks slelievre for the hint). But that yields incorrect results for some expressions. For example:

sage: y = sqrt(sin(x)^2 + 4*sin(x) + 4) - sqrt(sin(x)^2 - 4*sin(x) + 4)
sage: y.simplify_full()
sqrt(sin(x)^2 + 4*sin(x) + 4) - sqrt(sin(x)^2 - 4*sin(x) + 4)

.canonicalize_radical() simplifies it further:

sage: y.canonicalize_radical()
4

But that is wrong! The answer should be 2*sin(x). Obviously it selected an incorrect sign for the second sqrt(...). Is there a way to make .canonicalize_radical() smarter? Or any other way to simplify an expression like this correctly?

.canonicalize_radical() produces incorrect result

I'm trying to simplify some trigonometric expressions using sage, and I noticed that .simplify_full() doesn't optimize those, unless a .canonicalize_radical() is used (thanks slelievre for the hint). But that yields incorrect results for some expressions. For example:

sage: y = sqrt(sin(x)^2 + 4*sin(x) + 4) - sqrt(sin(x)^2 - 4*sin(x) + 4)
sage: y.simplify_full()
sqrt(sin(x)^2 + 4*sin(x) + 4) - sqrt(sin(x)^2 - 4*sin(x) + 4)

.canonicalize_radical() simplifies it further:

sage: y.canonicalize_radical()
4

But that is wrong! The answer should be 2*sin(x). Obviously it selected an incorrect sign for the second sqrt(...). sqrt(...).

Is there a way to make .canonicalize_radical() smarter? Or any other way to simplify an expression like this correctly?