|
[Date Index]
[Thread Index]
[Author Index]
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
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
|