Re: Algebraic Manipulation
- To: mathgroup at smc.vnet.net
- Subject: [mg46180] Re: [mg46159] Algebraic Manipulation
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Tue, 10 Feb 2004 00:05:50 -0500 (EST)
- References: <200402091054.FAA20968@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
David Park wrote: > Dear MathGroup, > > I'm always interested in Mathematica techniques for manipulating and simplifying > algebraic expressions. I came across the following problem, which I was only able > to do with a fair amount of difficulty. > > expr = x*y*(-(z^2/(r^2*(x^2 + y^2))) - 1/(r*(k + r)) + 1/(x^2 + y^2)) > > where > > r^2 == x^2 + y^2 + z^2 > > reduces to > > (k*x*y)/(r^2*(k + r)) > > I wonder if anyone can show an elegant or short method to do the simplification? > > (The problem arose in calculating the components of the Schwarzschild metric in Cartesian coordinates.) > > David Park > djmp at earthlink.net > http://home.earthlink.net/~djmp/ > One method is shown at: http://forums.wolfram.com/mathgroup/archive/2002/Jan/msg00354.html The code is short so I'll repeat it here. replacementFunction[expr_,rep_,vars_] := If [ PolynomialQ[Numerator[expr],vars] && PolynomialQ[Denominator[expr],vars], PolynomialReduce[expr, rep, vars][[2]], expr] For your example, one might do as follows. expr = x*y*(-(z^2/(r^2*(x^2 + y^2))) - 1/(r*(k + r)) + 1/(x^2 + y^2)); rep = r^2 - (x^2 + y^2 + z^2); In[6]:= InputForm[MapAll[replacementFunction[#, rep, {r}]&, Together[expr]]] Out[6]//InputForm= (k*x*y)/(r^2*(k + r)) Daniel Lichtblau Wolfram Research
- References:
- Algebraic Manipulation
- From: "David Park" <djmp@earthlink.net>
- Algebraic Manipulation