Re: Collect and manipulate subexpressions
- To: mathgroup at smc.vnet.net
- Subject: [mg53891] Re: Collect and manipulate subexpressions
- From: bghiggins at ucdavis.edu
- Date: Wed, 2 Feb 2005 06:25:54 -0500 (EST)
- References: <ctnigg$evs$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hugh, Perhaps this will work for you: e1 = (2 c q r w (-1 + Cos[k L2]))/(c S r w ( 4 Cos[k L1] - Cos[k (L1 - L2)] - 3 Cos[k (L1 + L2)]) + 2 M (w - w0) (w + w0) Sin[k (L1 + L2)]); func1[exp_] := Module[{trigexp, placeholders, rules}, trigexp = Cases[exp, Cos[_] | Sin[_] | Tan[_] | Cot[_], 8]; placeholders = Table[f[i], {i, 1, Length[trigexp]}]; exp /. Thread[Rule[trigexp, placeholders]]] func1[e1] (2*c*q*r*w*(-1 + f[1]))/ (c*r*S*w*(4*f[2] - f[3] - 3*f[4]) + 2*M*(w - w0)*(w + w0)*f[5]) If you want to go a step further and try to group the trig functions as in your example you can add additional rules. For example func2[exp_] := Module[{trigexp, placeholders, rules, num, denom}, trigexp = \ Cases[exp, Cos[_] | Sin[_] | Tan[_] | Cot[_], 8]; placeholders = Table[f[i], {i, 1, Length[trigexp]}]; res = exp /. Thread[Rule[trigexp, placeholders]]; num = Numerator[res] /. (y___ + x_. f[_] + z___) -> g[3]; denom = Denominator[res] /. y__ + x_. f[_] + z__ -> g[4]; num/denom] func2[e1] (2*c*q*r*w*g[3])/(2*M*(w - w0)*(w + w0)*f[5] + c*r*S*w*g[4]) Cheers, Brian