Re: How to separate imaginary unit inside an arbitrary function?

*To*: mathgroup at smc.vnet.net*Subject*: [mg32467] Re: How to separate imaginary unit inside an arbitrary function?*From*: bghiggins at ucdavis.edu (Brian Higgins)*Date*: Tue, 22 Jan 2002 03:19:42 -0500 (EST)*Organization*: http://groups.google.com/*References*: <a2gi3d$ks$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Kostya, I assume that "I" in your expression is Sqrt[-1]. So lets start with your expression In[2]:=data = f[5 I a] Out[2]=f[5 I a] Then if you look at the FullForm of your expression we see how it is stored In[4]:=FullForm[data] Out[4]//FullForm=f[Times[Complex[0, 5], a]] Based on the FullForm expression we can define a replacement rule as follows In[15]:= data /. f[x_Complex z_] -> Apply[Times, {f[Im[x]], f[I], f[z]}] Out[15]=f[I] f[5] f[a] Cheers, Brian "Kostya" <zlo at science.nus.edu> wrote in message news:<a2gi3d$ks$1 at smc.vnet.net>... > Dear all > > Have a simple problem: > have a function, say > Name[5*I*a] but want to break it into multiples: > Name[5*I*a]->Name[5]*Name[I]*Name[a] > > The issue is that the standard :> rule does not work properly: > Name[5*I*a]//.{Name_[exa_*exb_]:>(Name[exa]*Name[exb]), > Name_[exa_*exb_*exc_]:>(Name[exa]*Name[exb]*Name[exc])} > > yields just: > Name[5*I]*Name[a] instead of desired "Name[5]*Name[I]*Name[a]" > > > any suggestions? > > with regards > Kostya