On Sun, Aug 24, 2008 at 8:12 PM, William Stein <[EMAIL PROTECTED]> wrote:
>
> On Sun, Aug 24, 2008 at 11:03 AM, Ryan <[EMAIL PROTECTED]> wrote:
>>
>> Thanks, both seem like workable options.  A related question...
>>
>> There are alot of different simplify commands, but not one that seems
>> to be effective for hyperbolic trig functions.  For instance
>>
>> cosh(arcsinh(3/2)) simplifies to sqrt(13)/2
>>
>> but none of the simplify commands seem to produce this.
>>
>> Any thoughts?
>>
>
> Wait a little?  In the new Ginac-based Sage symbolic
> code that Burcin and I are implementing right now this works
> automatically:
>
> sage: x = var('x', ns=1); S = x.parent()
> sage: S(3/2).arcsinh().cosh()
> sqrt(13/4)
>
> Keep your eye on
>    http://trac.sagemath.org/sage_trac/ticket/3872
>
> Ginac is a very robust fast C++ library for symbolic manipulation
> that will replace most of Sage's current dependence on Maxima
> by something much better.  http://www.ginac.de/
>
> Sympy doesn't automatically do the above simplification (yet):
>
> sage: import sympy
> sage: Integer = sympy.Integer
> sage: sympy.cosh(sympy.asinh(3/2))
> cosh(asinh(3/2))
>
>
> By the way, in ginac the C++ code that defines the above simplification
> is here:
>
>
>        if (is_exactly_a<function>(x)) {
>                const ex &t = x.op(0);
>
>                // cosh(acosh(x)) -> x
>                if (is_ex_the_function(x, acosh))
>                        return t;
>
>                // cosh(asinh(x)) -> sqrt(1+x^2)
>                if (is_ex_the_function(x, asinh))
>                        return sqrt(_ex1+power(t,_ex2));
>
>                // cosh(atanh(x)) -> 1/sqrt(1-x^2)
>                if (is_ex_the_function(x, atanh))
>                        return power(_ex1-power(t,_ex2),_ex_1_2);
>        }
>
> It's in the file inifcns_trans.cpp in the ginac distribution.

I sent a patch fixing this to:

http://code.google.com/p/sympy/issues/detail?id=1037

This is what I did in sympy:

+            if isinstance(arg, acosh):
+                return arg.args[0]
+
+            if isinstance(arg, asinh):
+                return sqrt(1+arg.args[0]**2)
+
+            if isinstance(arg, atanh):
+                return 1/sqrt(1-arg.args[0]**2)

Ondrej

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to