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
>

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

```

• Prev by Date: Re: extracting a list to a list, help please
• Next by Date: Re: extracting a list to a list, help please
• Previous by thread: Re: Algebraic Manipulation
• Next by thread: Re: Algebraic Manipulation