>-----Original Message-----
>From: Roman Maeder [mailto:maeder@XXXXXXX.ch]
>Sent: Thursday, October 16, 2003 7:29 PM
>To: Jens Bredenbeck
>Cc: demug@XXXXXXX.ch
>Subject: Re: Auf ein neues: Cos[x]^2 statt Cos[2x]
>
>
>> Das war falsch formuliert, sorry...
>>
>> Ich möchte in Outputs wie z.B.
>>
>> 2+Cos[2 x]+Cos[2 y]+Cos[2 (x+y)]
>>
>> Cos[2x] durch 2Cos[x]^2-1 ersetzt haben, also kein
>TrigExpand, wo dann
>> der Sin[x] auftaucht
>
>Vielleicht verstehe ich es immer noch nicht richtig, aber wenn Sie nur
>Cos[2x] durch 2Cos[x]^2-1 ersetzen wollen, dann tun Sie es
>doch einfach:
>
> irgendwas /. Cos[2x_] :> 2Cos[x]^2-1
>
>
>In[1]:= 2+Cos[2 x]+Cos[2 y]+Cos[2 (x+y)]
>
>Out[1]= 2 + Cos[2 x] + Cos[2 y] + Cos[2 (x + y)]
>
>In[2]:= % /. Cos[2x_] :> 2Cos[x]^2-1
>
> 2 2 2
>Out[2]= -1 + 2 Cos[x] + 2 Cos[y] + 2 Cos[x + y]
>
>
>das ist natürlich nicht sehr allgemein (und geht z. Bsp. für
>Cos[4x] nicht).
>Allgemeinere Ersetzungsregeln behandle ich in Kapitel 6 meines
>"Programming in Mathematica", dort ist auch ein Beispiel über
>trigonometrische
>Vereinfachungen.
>
>Roman Mäder
>
>
(Ja, diese Literaturstelle kann ich auch empfehlen ;-)
Vielleicht hilft einfach diese Regel:
srule = Sin[v_]^ (n_ /; n >= 2) :> (1 - Cos[v]^2)Sin[v]^( n - 2)
und damit
In[61]:= (Sin[3 x]// TrigExpand) //. srule // Factor
Out[61]= (-1 + 2 Cos[x]) (1 + 2 Cos[x]) Sin[x]
In[63]:= (2 + Cos[2*x] + Cos[2*y] +
Cos[2*(x + y)]// TrigExpand) //. srule //Factor
Out[63]= 1 + 4*Cos[x]^2*Cos[y]^2 - 4*Cos[x]*Cos[y]*Sin[x]*Sin[y]
In[64]:= (Cos[4*x]//TrigExpand) //. srule //Factor
Out[64]= 1 - 8*Cos[x]^2 + 8*Cos[x]^4
In[66]:= (Sin[4*x]// TrigExpand) //. srule //Factor
Out[66]= 4*Cos[x]*(-1 + 2*Cos[x]^2)*Sin[x]
Es kommt Sin dann nur mit maximaler Potenz 1 vor. (Wenn auch negative
Potenzen möglich sind, muß man die Regel für Csc erweitern.)
An Out[63] mag häßlich sein, daß x+y aufgelöst ist und deshalb gemischte
Terme (mit Sin) auftreten. Man kann dies vermeinden, wenn man diese für
TrigExpand verfremdet.
In[113]:= expr
Out[113]= 2 + Cos[2 x] + Cos[2 y] + Cos[2 (x + y)]
(nur eine Abkürzung)
In[114]:= pp = Position[expr, (Sin | Cos)[_. Plus[_, __]]];
In[115]:=
(MapAt[Hold, expr, Join[#, {1, 2}] & /@ pp] // TrigExpand) //.
srule // ReleaseHold
Out[115]=
-1 + 2*Cos[x]^2 + 2*Cos[y]^2 + 2*Cos[x + y]^2
(Wenn's das gesucht war ??)
--
Hartmut Wolf