Re: Simplification with constraints
- To: mathgroup at smc.vnet.net
- Subject: [mg72063] Re: [mg72040] Simplification with constraints
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sun, 10 Dec 2006 04:49:17 -0500 (EST)
- References: <200612091109.GAA28038@smc.vnet.net>
On 9 Dec 2006, at 20:09, Vladimir wrote:
> Suppose we have a constraint:
>
> a*a+b*b+c*c+d*d==1
>
> What is the most elegant and general way to simplify any expression
> considering above constraint for simplification?
>
> For (just a simple) example:
>
> In[]:=simplify[b*b+c*c+d*d]
>
> should give:
>
> Out[]=1-a*a
>
> --
> thanks in advance,
> Vladimir
>
1. The faster method. Use PolynomialReduce directly:
Last[PolynomialReduce[b*b + c*c + d*d, 1 - (a*a + b*b + c*c + d*d),
{b, c, d, a}]]
1 - a^2
2. The slower but easier to use and understand method:
Use the Variable Order Independent version of Simplify due to Adam
Strzebonski (which he once posted on this list and which I have re-
posted at least twice)
VOISimplify[vars_, expr_, assum_:True] :=
Module[{perm, ee, best},
perm = Permutations[vars];
ee = (FullSimplify @@ ({expr, assum} /. Thread[vars -> #])) & /
@ perm;
best = Sort[Transpose[{LeafCount /@ ee, ee, perm}]][[1]];
best[[2]] /. Thread[best[[3]] -> vars]]
VOISimplify[{a, b, c, d}, b*b + c*c + d*d, a*a + b*b + c*c + d*d == 1]
1 - a^2
Andrzej Kozlowski
- References:
- Simplification with constraints
- From: "Vladimir" <vladimir347@yahoo.com>
- Simplification with constraints