Re: Factorise with respect to a variable
- To: mathgroup at smc.vnet.net
- Subject: [mg79640] Re: Factorise with respect to a variable
- From: Andrew Moylan <andrew.j.moylan at gmail.com>
- Date: Wed, 1 Aug 2007 04:53:52 -0400 (EDT)
- References: <200707301043.GAA01238@smc.vnet.net><f8n2bt$koe$1@smc.vnet.net>
Clever solution Andrzej! For those who are interested, you can add something like these extra definitions to generalise it to factorise with respect to multiple variables: FF[expr_, {x_}] := FF[expr, x] FF[expr_, xx_List] := With[{FFx = FF[expr, First[xx]]}, Union[{First[FFx]}, FF[FFx[[2]], Rest[xx]]]] Now FF[1/(x y z),{x,y}] becomes {1/x,1/y,1/z}. On Jul 31, 8:19 pm, Andrzej Kozlowski <a... at mimuw.edu.pl> wrote: > Its not perfect, but (I think) close enough: > > FF[expr_, x_] := > Module[{ls = FactorList[expr], s}, > s = DeleteCases[ls, _?(FreeQ[#, x] &), {1}]; {Times @@ (Power[##] > & @@@ s), > Times @@ (Power[##] & @@@ Complement[ls, s])}] > > Then > > FF[1/(2*x*y^2), x] > {1/x, 1/(2*y^2)} > > FF[1/(2*x*y^2), y] > {1/y^2, 1/(2*x)} > > and > > expr = (E^(I*(2*chi2 - kappa + 2*chi1*n1 - kappa*n1 - 2*chi2*n2 + > kappa*n2 + > I*x*SuperStar[x] + I*y*SuperStar[y]))*Sqrt[1 + n1]*Sqrt[n2] > *x^n1* > y^n2*SuperStar[x]^(1 + n1)*SuperStar[y]^(-1 + n2))/ > Sqrt[n1!*(1 + n1)!*(-1 + n2)!*n2!]; > > FF[expr, n1] > {(E^(2*I*chi1*n1 - I*kappa*n1)*Sqrt[n1 + 1]*x^n1* > SuperStar[x]^n1)/Sqrt[n1!*(n1 + 1)!*(n2 - 1)!* > n2!], E^(-2*I*n2*chi2 + 2*I*chi2 - I*kappa + > I*kappa*n2 - x*SuperStar[x] - y*SuperStar[y])* > Sqrt[n2]*y^n2*SuperStar[x]*SuperStar[y]^(n2 - 1)} > > Andrzej Kozlowski > > On 30 Jul 2007, at 12:43,AndrewMoylanwrote: > > > Here's an arbitrary expression that depends (non-polynominally) on > > n1 and > > some other variables: > > > expr = (E^(I*(2*chi2 - kappa + 2*chi1*n1 - kappa*n1 - 2*chi2*n2 + > > kappa*n2 + I*x*SuperStar[x] + I*y*SuperStar[y]))* > > Sqrt[1 + n1]* > > Sqrt[n2]*x^n1*y^n2*SuperStar[x]^(1 + n1)* > > SuperStar[y]^(-1 + n2))/ > > Sqrt[n1!*(1 + n1)!*(-1 + n2)!*n2!] > > > Is it possible to use Mathematica to factor out the dependence of > > expr on > > n1? That is, I would like to factorise expr into {expr1,expr2}, > > such that > > (i) expr1 depends on n1, (ii) expr2 does not depend on n1, and such > > that > > (given (i) and (ii)) expr1 is as simple as possible. > > > Here's a simpler example: When I factorise 1/(2*x*y^2) "with > > respect to" x, > > I want the result to be {1/x, 1/(2*y^2)}. > > > Do you think it's possible to easily get Mathematica to do > > something like > > this?