Hi,

On 8 October 2013 20:30, Aaron Meurer <[email protected]> wrote:
> Working on a solution to this,

This should help: https://github.com/sympy/sympy/pull/2520

> but there's one thing I'm unsure about.
> Is it OK to also assume sqrt(x*y) == sqrt(x)*sqrt(y) in this context?
>
> Aaron Meurer
>
> On Tue, Oct 8, 2013 at 12:19 PM, Aaron Meurer <[email protected]> wrote:
>> I guess this is just a deficiency in the root finding algorithms. For
>> quadratics, it uses the quadratic formula, but as you point out, if
>> you factor the polynomial, you get a simpler result. SymPy won't
>> simplify sqrt(x**2) to x because it's not true unless x is
>> nonnegative, but what *is* true for any complex x is that sqrt(x**2)
>> is either x or -x, and so by the symmetry of the quadratic formula, it
>> is OK to do this reduction.
>>
>> I wonder if this issue comes up in the root formulas for higher degrees as 
>> well.
>>
>> Aaron Meurer
>>
>> On Tue, Oct 8, 2013 at 11:49 AM, Ondřej Čertík <[email protected]> 
>> wrote:
>>> On Tue, Oct 8, 2013 at 11:48 AM, Ondřej Čertík <[email protected]> 
>>> wrote:
>>>> On Tue, Oct 8, 2013 at 10:02 AM, Taylan Şengül <[email protected]> 
>>>> wrote:
>>>>> Hi all,
>>>>>
>>>>> I am quite new to sympy.
>>>>>
>>>>> When I type the following
>>>>>
>>>>> a = symbols('a')
>>>>> m = Matrix( [ [a, 0], [0, 1] ] )
>>>>> m.eigenvals()
>>>>>
>>>>> I expect the answer to
>>>>> {a: 1,  1: 1}
>>>>>
>>>>> But I get
>>>>>
>>>>> {a/2 + sqrt((a - 1)**2)/2 + 1/2: 1, a/2 - sqrt((a - 1)**2)/2 + 1/2: 1}
>>>>>
>>>>> I think first the characteristic polynomial is computed and then roots are
>>>>> found. This produces the mess. Wouldn't it be better to try to factor the
>>>>> characteristic polynomial first and then find roots?
>>>>
>>>>
>>>> SymPy assumes that "a" is complex, so no simplifications can be done, 
>>>> isn't it?
>>>> But you can tell SymPy that "a" is real, then some simplifications can be 
>>>> done:
>>>>
>>>> In [1]: a = symbols('a')
>>>>
>>>> In [2]: m = Matrix( [ [a, 0], [0, 1] ] )
>>>>
>>>> In [3]: m.eigenvals()
>>>> Out[3]:
>>>> ⎧       __________                __________       ⎫
>>>> ⎪      ╱        2                ╱        2        ⎪
>>>> ⎨a   ╲╱  (a - 1)     1     a   ╲╱  (a - 1)     1   ⎬
>>>> ⎪─ - ───────────── + ─: 1, ─ + ───────────── + ─: 1⎪
>>>> ⎩2         2         2     2         2         2   ⎭
>>>>
>>>> In [4]: a = Symbol("a", real=True)
>>>>
>>>> In [5]: m = Matrix( [ [a, 0], [0, 1] ] )
>>>>
>>>> In [6]: m.eigenvals()
>>>> Out[6]:
>>>> ⎧a   │a - 1│   1     a   │a - 1│   1   ⎫
>>>> ⎨─ - ─────── + ─: 1, ─ + ─────── + ─: 1⎬
>>>> ⎩2      2      2     2      2      2   ⎭
>>>
>>>
>>> Ah, I see your point --- because the eigenvalue are symmetric, you can
>>> actually simplify this to "a" and 1.
>>>
>>> Ondrej
>>>
>>> --
>>> 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.

Mateusz

-- 
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