There's more discussion on this here:
http://mathworld.wolfram.com/Multiple-AngleFormulas.html.  I guess the
way we do it now coincides with the Chebyshev method, because they can
be expressed using Chebyshev polynomials (in particular, cos(n*x) =
Tn(cos(x)) exactly).  There are very efficient functions in the polys
to compute these, so perhaps this would be the best way to go for that
reason alone.

The formula from Wikipedia has the property that every term has the
same total degree.  I don't know if that is preferred or not.

I believe there are also formulas that give cos(n*x) or sin(n*x) in
terms of sin(x) or cos(x) only when possible (some cases require n to
be odd or even).

Aaron Meurer

On Wed, Jul 18, 2012 at 4:08 PM, Aaron Meurer <[email protected]> wrote:
> As I've mentioned in other threads, I'm in the process of refactoring
> expand.  One major consequence of my refactoring is that expand()
> doesn't try so hard to make everything expand "all the way".
>
> In doing this, I noticed that the expansions of the form sin(n*x) =>
> sum of powers of sin(x) and cos(x) is implemented recursively using
> the sin(x + y) => sin(x)*cos(y) + sin(y)*cos(x) formula.  Not only is
> this very inefficient, but it no longer expands all the way, leading
> to results like
>
> In [46]: print sin(3*x).expand(trig=True)
> (2*cos(x)**2 - 1)*sin(x) + 2*sin(x)*cos(x)**2
>
> instead of the behavior from master:
>
>>>> print sin(3*x).expand(trig=True)
> 4*sin(x)*cos(x)**2 - sin(x)
>
> I found the formula
> http://en.wikipedia.org/wiki/Trig_identities#Sine.2C_cosine.2C_and_tangent_of_multiple_angles.
>  However, this gives a different result:
>
> In [11]: print sin(3*x).expand(trig=True) # My branch
> -sin(x)**3 + 3*sin(x)*cos(x)**2
>
> These formulations are equivalent:
>
> In [14]: a = sin(3*x).expand(trig=True)
>
> In [15]: b = 4*sin(x)*cos(x)**2-sin(x)
>
> In [16]: trigsimp(a - b)
> Out[16]: 0
>
> And according to WolframAlpha, there is yet a third representation,
> 3*sin(x) - 4*sin(x)**3.  Which of these would be preferred?  I guess
> they are all related by replacing sin(x)**2 with 1 - cos(x)**2 or
> cos(x)**2 with 1 - sin(x)**2, which means that for larger n, there are
> dozens of different equivalent representations.
>
> Tom, no doubt changing this would affect trigsimp_groebner.  Do you
> have any opinion?
>
> If one of the ones other than the way from Wikipedia is preferred,
> does anyone know of a formula to generate it non-recursively?
>
> Aaron Meurer

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" 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?hl=en.

Reply via email to