Comment #1 on issue 1598 by asmeurer: New polynomials manipulation module
http://code.google.com/p/sympy/issues/detail?id=1598

Wow!  This is great.  Simplification is much better with this.  For  
example, consider the complex expression
from issue 1562.  In your branch:
>>> a = wronskian([sin(x), cos(x), sin(x)*x, cos(x)*x, 1], x)
>>> print a
8*cos(x)**2*sin(x)**2 + 4*cos(x)**4 + 4*sin(x)**4
>>> a = factor(a)
>>> print a
4*(cos(x)**2 + sin(x)**2)**2
>>> trigsimp(a)
4

The original wronskian is simpler (I am assuming because of better  
intermediate simplification), and the
expression can be factored!  I tried running a more complex expression  
through simplify, but it hangs.

>>> simplify(-576*cos(x)**26*sin(x)**30/(32*cos(x)**18*sin(x)**30 +  
>>> 224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
6336*cos(x)**24*sin(x)**32/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
31680*cos(x)**22*sin(x)**34/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
95040*cos(x)**20*sin(x)**36/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
190080*cos(x)**18*sin(x)**38/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
266112*cos(x)**16*sin(x)**40/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
266112*cos(x)**14*sin(x)**42/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
190080*cos(x)**12*sin(x)**44/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
95040*cos(x)**10*sin(x)**46/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
31680*cos(x)**8*sin(x)**48/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
6336*cos(x)**6*sin(x)**50/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44) -
576*cos(x)**4*sin(x)**52/(32*cos(x)**18*sin(x)**30 +  
224*cos(x)**16*sin(x)**32 +
672*cos(x)**14*sin(x)**34 + 1120*cos(x)**12*sin(x)**36 +  
1120*cos(x)**10*sin(x)**38 +
672*cos(x)**8*sin(x)**40 + 224*cos(x)**6*sin(x)**42 +  
32*cos(x)**4*sin(x)**44))

It takes 218.32 s to complete.  If I substitute sin(x) and cos(x) for  
symbols first, that drops to 88.54 s.  On the
other hand, cancel(together(expr)) takes 0.30 s to produce the same result.

This is from wronskian([sin(x)**2, cos(x)**2, sin(x)*cos(x), sin(x),  
cos(x)], x) in the current SymPy.  Fortunately,
if you run the wronskian straight in your branch, it comes out nice:
In [1]: wronskian([sin(x)**2, cos(x)**2, sin(x)*cos(x), sin(x), cos(x)], x)
Out[1]: -72*cos(x)**6*sin(x)**2 - 108*cos(x)**4*sin(x)**4 -  
72*cos(x)**2*sin(x)**6 - 18*cos(x)**8 -
18*sin(x)**8

In [2]: trigsimp(factor(wronskian([sin(x)**2, cos(x)**2, sin(x)*cos(x),  
sin(x), cos(x)], x)))
Out[2]: -18

I posted some comments on the code in your branch.  I like the philosophy  
that you outline in your commit
7f4e5466414302c3106b2ac9e2224eac2f4d75d2.  I don't know much about abstract  
algebra (yet), so I can't
say much about the internal part, though the code looks clean.

--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sympy-issues" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sympy-issues?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to