is_real should return the right thing regardless of the form of the
expression. See also
https://code.google.com/p/sympy/issues/detail?id=4011.

I would avoid expanding unless that's the only way to tell. Also note
that in general, the real solution from a cubic cannot be written
without a nested I.

Aaron Meurer

On Wed, Sep 11, 2013 at 6:22 AM, Thilina Rathnayake
<thilina.r...@gmail.com> wrote:
> Hi Mario,
>
> Thank you for the reply.
>
> `solutions = [s.expand(complex=True) for s in solutions]` worked for me, now
> `im()`
> and `is_real()` return the correct results.
>
> Of course the solutions were correct, the problem was with `im()` and
> `is_real()` not being
> able to calculate the correct results. May be they should be modified to
> simplify
> (in this case, expand) the inputs before doing anything else?
>
> Regards,
> Thilina.
>
>
>
> On Wed, Sep 11, 2013 at 5:02 PM, mario <mario.pern...@gmail.com> wrote:
>>
>> The solutions are correct but  the real solution is not written in a
>> simple form
>>
>>
>> >>> solutions = solve(2*x**3 - 3*x**2 - 3*x - 1)
>> >>> solutions[1].n()
>> 2.26116669667966 - 0.e-23*I
>> >>> solutions = [s.expand(complex=True) for s in solutions]
>> >>> solutions[1]
>> 1/2 + 3**(1/3)/2 + 3**(2/3)/2
>>
>>
>>
>> On Wednesday, September 11, 2013 12:36:56 PM UTC+2, Thilina Rathnayake
>> wrote:
>>>
>>> Hi All,
>>>
>>> I am trying to implement the solutions for cubic Thue equation and to do
>>> that
>>> I have to solve cubic equations. I use `solve()` to do this. But I am
>>> having a little
>>> trouble filtering out real solutions from the solution list returned by
>>> `solve()`.
>>>
>>> I tried the following.
>>>
>>>> In [5]: from sympy.abc import x
>>>> In [6]: solutions = solve(2*x**3 - 3*x**2 - 3*x - 1)
>>>>
>>>> In [8]: for s in solutions:
>>>>    ...:         print(sympify(s).is_real)
>>>>    ...:
>>>> None
>>>> None
>>>> None
>>>
>>>
>>> But one of the solutions in this equation is real. See below:
>>> http://www.wolframalpha.com/input/?i=2*x**3+-+3*x**2+-+3*x+-+1
>>>
>>> That is also included in the list returned by `solve()`
>>>
>>>> In [9]: solutions[0]
>>>> Out[9]: 1/2 - (-3)**(1/3)/2 + (-3)**(2/3)/2
>>>
>>>
>>> But, Interestingly,
>>>
>>>> In [10]: for s in solutions:
>>>>    ....:     print(im(s))
>>>>    ....:
>>>> -3**(5/6)/4 + 3*3**(1/6)/4
>>>> im((-3)**(2/3)/(-1/2 + sqrt(3)*I/2))/2 - im((-3)**(1/3)*(-1/2 +
>>>> sqrt(3)*I/2))/2
>>>> im((-3)**(2/3)/(-1/2 - sqrt(3)*I/2))/2 - im((-3)**(1/3)*(-1/2 -
>>>> sqrt(3)*I/2))/2
>>>
>>>
>>> `im()` of `solutions[0]` should be zero. Am I doing something wrong here
>>> or is this a bug?
>>> Are there any other methods to find whether a number is purely real or
>>> not?
>>>
>>> Thank you in advance.
>>>
>>> Regards,
>>> Thilina.
>>>
>> --
>> 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 sympy+unsubscr...@googlegroups.com.
>> To post to this group, send email to sympy@googlegroups.com.
>> 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 sympy+unsubscr...@googlegroups.com.
> To post to this group, send email to sympy@googlegroups.com.
> 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 sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
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