Re: Substitute expressions with FullSimplify
- To: mathgroup at smc.vnet.net
- Subject: [mg108672] Re: Substitute expressions with FullSimplify
- From: "David Park" <djmpark at comcast.net>
- Date: Sat, 27 Mar 2010 05:08:38 -0500 (EST)
Guido,
Your example is a little too simple. Why not just use x + y -> r?
This is an area where I'm not a total expert and you may get good methods
from others, but I will try to offer something. When FullSimplify is good,
then it is very very good, but when it is bad it is horrible. I find it
difficult to use ComplexityFunction and make it do precisely what I want. It
is rather like a crude hammer, when one needs a fine screwdriver.
Here us a routine that substitutes by solving equations. One secret to it
use is to apply it selectively and in order to substitute in an expression.
SubstituteSolve[eqns_List, eliminate_List][expr_] :=
Module[{result, workexpr, resultrules, neweqns},
neweqns = {result == expr, Sequence @@ eqns};
resultrules =
Solve[{result == expr, Sequence @@ eqns}, result, eliminate];
result /. First@resultrules]
Here is a somewhat complicated example:
expr = x + y + Sin[(x + y)^-2] + (x + y)^3 // ExpandAll
x + x^3 + y + 3 x^2 y + 3 x y^2 + y^3 + Sin[1/(x^2 + 2 x y + y^2)]
We don't want to try solving with a variable inside a Sin function so we
apply the routine to the argument of Sin first and then apply it to the
entire remaining expression.
MapAt[SubstituteSolve[{x + y == r}, {x}][#] &, expr, {{7, 1}}]
SubstituteSolve[{x + y == r}, {x}][%]
x + x^3 + y + 3 x^2 y + 3 x y^2 + y^3 + Sin[1/r^2]
r + r^3 + Sin[1/r^2]
I know that this method can have problems, especially if there are multiple
solutions. But I doubt if FullSimplify will handle those cases either. And
for special cases you might modify the routine, say pick a specific
solution, and apply it to specific portions of the initial expression.
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
From: Guido Walter Pettinari [mailto:coccoinomane at gmail.com]
Hello world!
This is my first post in this group, but it has been a while since I
started reading it. I always found it quite useful, therefore I wish
to thank everibody for their contributions!
Here is my problem. Let's say I have an expression. I would like to
substitute all the occurences of a given subexpression in this
expression with a symbol. I want to do it in an intelligent way, i.e.
by using FullSimplify instead of ReplaceAll.
If my expression is:
x^2 + y^2
I know that:
FullSimplify [ x^2 + y^2, x^2 + y^2 == r ]
will produce 'r' as a result, which is what I want.
However, if my expression is
x + y ,
then
FullSimplify [ x + y, x + y == r ]
produces 'x + y' and not 'r' ! I tried to use
FullSimplify [ x + y, x + y == r, ComplexityFunction -> LeafCount ]
but I still get 'x+y' as a result.
Do you have any idea on how to substitute x+y with r in an expression?
Thank you very much,
Guido