On Saturday, June 14, 2014 2:04:18 PM UTC-7, Michael Orlitzky wrote:
>
> On 06/14/2014 12:43 AM, [email protected] <javascript:> wrote:
> > I am coming up to speed on Python, Sympy, and Sage by doing some simple
> > problems on all three. Sympy has an option for its expand function,
> > complex=True, that has made some of my expressions easier to read/use.
> > I'm working with quotients of complex numbers. This option allows Sympy
> > to return expressions that look like a + bi broadly speaking with nice
> > relations for a and b. With Sage so far, I can't seem to get the
> > equivalent level of expansion.
> >
> > I'd like to ask if there is a way to invoke that complex=True or its
> > equivalent within Sage. I've done a bit of searching but so far the
> > answer has not jumped out at me. I also tried the other support system
> > but don't have enough points to post.
> >
>
> The sage expand() function doesn't use sympy. However, we have the
> ability to send symbolic expressions back and forth between sage and
> sympy, so it is possible.
>
> First thing you should do is open a trac ticket with a feature request.
> It should be possible to add the "complex" parameter to the sage
> expand() function using sympy.
>
> Second, for a workaround, you can do the following:
>
> sage: x = SR.symbol('x')
> sage: x._sympy_().expand()
> x
> sage: x._sympy_().expand(complex = True)
> re(x) + I*im(x)
>
> This will give you the *visual* representation that you want, but it
> isn't very convenient to work with. It looks like nobody's told sage how
> to convert the sympy im() function back into a sage expression yet:
>
> sage: x._sympy_().expand(complex = True)._sage_()
> ...
> AttributeError: 'im' object has no attribute '_sage_'
>
> This wouldn't be super difficult to do, though; the following already
> works in sage:
>
> sage: x.real_part() + I*x.imag_part()
> I*imag_part(x) + real_part(x)
>
This is very helpful, thanks.
In Sympy, I did the following:
var('A B C D u v', real=True)
qi = 1/(u - I*v)
qf = (A + B/qi)/(C + D/qi)
expand(1/qf, complex=True)A2+2ABu+B2u2+B2v2+ADuA2+2ABu+B2u2+B2v2−iADvA2+2ABu
+B2u2+B2v2+BCuA2+2ABu+B2u2+B2v2+iBCvA2+2ABu+B2u2+B2v2+BDu2A2+2ABu+B2u2+B2v2+
BDv2A2+2ABu+B2u2+B2v2
I got a reasonable 7 term expansion of 1/qf so long as I defined real=True
in the var statement (I learned that via the Sympy group). Before I
learned that step, the expansion was gigantic.
In Sage, I did
var('A B C D u v', domain = 'real')
defined qi, qf, and 1/qf as above
When I tried
(1/qf)._sympy_().expand(complex = True)
I got a huge expression similar to the one Sympy gave me before I learned
about the real=True setting on the initial variables.
So, it looks like the method you suggested does work. I'll dig deeper into
Sage to see how I can get the results to be the same. There may be
something in addition to domain='real' that I need to set and/or send into
Sympy.
Appreciate the help.
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.