On Sat, Jul 6, 2013 at 5:45 PM, Amit Saha <[email protected]> wrote:

> On Sun, Jul 7, 2013 at 4:50 AM, Aaron Meurer <[email protected]> wrote:
> > I think you are confusing the assumptions system and the numeric classes
> in
> > SymPy.
> >
> > First, for the numeric classes, SymPy does not have a complex type.
> Rather,
> > we just have the object I, which represents sqrt(-1). If you want 12 +
> 3*I,
> > you just type exactly that. Internally, it is represented as Add(12,
> Mul(3,
> > I)).  One difference you'll notice here is that, because it is just an
> Add,
> > things like (12 + 3*I)**2 or 1/(12 + 2*I) are not reevaluated to real +
> > imag*I by default. You can use expand_complex() to do that (or
> as_real_imag
> > if you want to pull out the real and imaginary parts).
>
> Thanks for the explanation. Here is what I tried:
>
> >>> from sympy import Symbol
> >>>
> >>> i=Symbol('i')
> >>> c = 1 + 2*i
> >>> c.as_real_imag(c)
> (2*re(i) + 1, 2*im(i))
>
> Good so far, I understand that the real and imaginary components are
> being expressed as multiples of the real and and imaginary components
> of i, respectively.
>
> Now, I tried to to add this to a native CPython complex number:
>
> >>> c = c + 1+2j
> >>> c.as_real_imag(c)
> (2*re(i) + 2, 2*im(i) + 2.0)
>
> Here the real part is clear to me: 2*re(i) + 2 = 2*0 + 2 = 2
>
> But, I don't quite understand what the imaginary part: 2*im(i) + 2 is
> supposed to mean. I was expecting it to be 4*im(i).
>

Why? Symbol('i') has nothing to do with sqrt(-1). It's just a symbol named
i.  If you want sqrt(-1), use I (not Symbol('I'), just I).

If you look, your c is 2 + 2*i + 2*I. The i is Symbol('i') and the I is
sqrt(-1), which comes from the 2j.

It's also clear if you enable unicode pretty printing, because I is printed
as ⅈ.

Aaron Meurer


>
>
> >
> > Now, for the assumptions. Symbol('x', complex=True) means that the
> symbol is
> > assumed to be complex. This is in contrast to Symbol('x', real=True),
> which
> > is assumed to be real. This matters for things like x.is_real, and
> affects
> > how things are simplified. For example, sqrt(x**2) == x only when x is
> > positive, so it will remain unevaluated by default, but if you create
> > Symbol('x', positive=True), then sqrt(x**2) will simplify to just x.
> >
> > Symbols are assumed to be complex by default, so actually Symbol('x',
> > complex=True) is unnecessary. Actually, this isn't entirely true;
> apparently
> > Symbol('x', complex=True) is different from just Symbol('x'), which I
> don't
> > entirely understand why. I think this might be a bug. Could you open an
> > issue for it?
>
>
> Filed: https://github.com/sympy/sympy/issues/2260
>
> I hope I got the description right.
>
> Thanks,
> Amit.
>
>
>
> --
> http://echorand.me
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" 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/sympy.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" 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/sympy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to