Re: Common factors in a list
- To: mathgroup at smc.vnet.net
- Subject: [mg58373] Re: Common factors in a list
- From: Peter Pein <petsie at dordos.net>
- Date: Tue, 28 Jun 2005 21:57:05 -0400 (EDT)
- References: <d9r50q$568$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
John Reed schrieb:
> I'm working with a list (vector) that's composed of functions such as
> complex exponentials and Bessel functions. Some of the functions are common
> to each element of the list. I'm trying to find a way to do the following:
>
> {a x, a y, a z}-> a *{x, y, z}
>
> In this expression, a, x, y, z are polynomials, exponentials and/or Bessel
> functions.
>
> So far I haven't had any luck with this. Does anyone have a simple
> solution?
>
> John Reed
>
Because of Mathematica's built-in "simplification" of
In[1]:= a*{x, y, z}
to
Out[1]={a*x, a*y, a*z},
I'll use \[CircleDot] as replacement for the multiplication character:
In[2]:= a \[CircleDot] {x, y, z}
Out[2]= a \[CircleDot] {x, y, z}
In[3]:=
vecFactor[vec_List] :=
Module[{ql, fl = FactorList[Plus @@ vec], mp, f2},
ql = FoldList[Cancel[#1/Power @@ #2]& , vec, fl];
f2 = ql[[ mp = Position[#1, Min[#1]]&[LeafCount /@ ql][[1, 1]]]];
ql = Times @@ Power @@@ Take[fl, {1, mp - 1}];
ql \[CircleDot] f2
]
In[4]:=
vecFactor[
{6*BesselJ[0, x]* xp[-x]*(x^2 - 1), 4*(x - 1)*Exp[-x]*BesselJ[1, x],
2*(1 - x)^2*BesselJ[2, x]*Exp[-x]}
]
Out[4]=
((2*(-1 + x))/E^x) \[CircleDot]
{3*(1 + x)*BesselJ[0, x], 2*BesselJ[1, x], (-1 + x)*BesselJ[2, x]}
Later you can use expr/.\[CircleDot]->Times to get back your product.
Maybe someone else has a better trick to avoid the distribution of the
common factor...
--
Peter Pein
Berlin