Print exp(x) instead of e^x in symbolic expressions

82 views
Skip to first unread message

Serge Torres

unread,
Nov 27, 2012, 5:23:01 AM11/27/12
to sage-s...@googlegroups.com
Hi,

I'm pretty sure this question has been answered over and over but
despite intensive googling I could not find these answers.

I have expressions (say, f = exp(x)) that want to export to another
computing system.

str(f) is 'e^x' but the target system does not understand it.

Is there a way to have a string version of f with the exp() notation
preserved?

Thanks in advance and sorry for being so dumb.

--
Regards,

Serge Torres


Burcin Erocal

unread,
Nov 27, 2012, 6:16:20 AM11/27/12
to sage-s...@googlegroups.com
On Tue, 27 Nov 2012 11:23:01 +0100
Serge Torres <Serge....@laposte.net> wrote:

> I'm pretty sure this question has been answered over and over but
> despite intensive googling I could not find these answers.
>
> I have expressions (say, f = exp(x)) that want to export to another
> computing system.
>
> str(f) is 'e^x' but the target system does not understand it.
>
> Is there a way to have a string version of f with the exp() notation
> preserved?

This is #11428 on trac.

http://trac.sagemath.org/sage_trac/ticket/11428

The patch on the ticket does not work. It needs to go through the
registry of functions stored in Pynac and update the name or the
printing functions there. Unfortunately I don't have time to implement
that right now.


As a workaround in your case, you can modify the definition of
Function_exp in sage/functions/log.py to set a latex_name in the
initializer, or if that doesn't work, define a _print_latex_ method.


Cheers,
Burcin

Burcin Erocal

unread,
Nov 27, 2012, 11:15:44 AM11/27/12
to sage-s...@googlegroups.com
Here is a simpler solution:

Create a symbolic function fn that prints as '\exp', replace e^x in your
expression with fn, translate the new expression to latex:

# the top level function method injects the name of the function into
# the name space. I don't want to overwrite the exp method in the top
# level. Hence the import
sage: from sage.symbolic.function_factory import function
sage: fn = function('exp', latex_name='\exp')
sage: fn
exp
sage: type(exp)
<class 'sage.functions.log.Function_exp'>
sage: latex(fn(x))
\exp\left(x\right)


sage: t = exp(x^2) + (x+1)*exp(a^2+b)
sage: latex(t)
{\left(x + 1\right)} e^{\left(a^{2} + b\right)} + e^{\left(x^{2}\right)}
sage: latex(t.substitute_function(exp, myfn))
{\left(x + 1\right)} \exp\left(a^{2} + b\right) + \exp\left(x^{2}\right)



Cheers,
Burcin

Reply all
Reply to author
Forward
0 new messages