Re: Expression manipulation
- To: mathgroup at smc.vnet.net
- Subject: [mg88738] Re: Expression manipulation
- From: "David Park" <djmpark at comcast.net>
- Date: Thu, 15 May 2008 06:51:46 -0400 (EDT)
- References: <g0edhe$9eq$1@smc.vnet.net>
David,
You should be able to do all the manipulations using Mathematica. You should
learn how to use rule based programming, commands such as MapAt, Apart,
Together, Cancel. HoldForm and of course Simplify.
Still, Mathematica is often very theoretically oriented and lacks some of
the practical operations often used. The Presentations package, at my web
site below, has a 'Manipulations' section that contains some practical
additions. Sometimes these are useful in manipulating expressions and
sometimes useful to get expressions in particular standard forms for display
in reports or to match a textbook expression.
If you want to keep a particular subexpression together as a unit you can
wrap it in a HoldForm. This prevents routines like Simplify from splitting
it up. Presentations has a CreateSubexpression and a ReleaseSubexpressions
routines that allow you to wrap a subexpression in a tagged Tooltip. This
works just as well as a HoldForm and allows you to see what the
subexpressions are.
FactorOut can be used to remove a factor from an expression - even if the
factor is not initially in the expression. For example, you can pull a
factor out of a matrix and wrap the matrix in a HoldForm all in one
operation.
MultiplyByOne will multiply the numerator and denominator of an expression
by the same factor and Simplify, or perform any other specified operations
on the numerator and denominator, so the factor won't cancel back out.
MapLevelParts and MapLevelPatterns will map an operation onto a subset of
level parts in an expression. The most common use is to apply some function
to a selected subset of terms in a sum.
LinearBreakout[f1,f2,...][v1,v2,..][expr] will break out the linear terms of
any expressions within expr that have heads matching the patterns fi over
variables matching the patterns vj.
PushOnto is a much improved version of the Through command that will push a
list of arguments onto specific functions.
HoldOp[operation][expr] will prevent an explicit operation in expr from
being evaluated but will evaluate the arguments of the operation. It is
useful when operation has a number of definitions with it, but you want to
see what the expression looks like before these definitions are applied.
EvaluateAtPattern will evaluate specific patterns in held expressions.
Here is an example of using some of these routines to manipulate an
expression as you might do it 'by hand':
a + b + c
% // MapLevelParts[CreateSubexpression, {{1, 3}}]
d % // Expand
% // FactorOut[sub]
% // ReleaseSubexpressions[]
a + b + c
b + (a + c) where (a+c) has a tag and Tooltip 'held'.
b d+d (a + c) where d did not Distribute across the subexpression.
(d+(b d)/(a+c)) (a+c) factoring out the subexpression (a+c), even though it
is not a true 'factor'.
(a+c) (d+(b d)/(a+c)) releasing the subexpression keeps the overall
structure.
Finally, I might mention the annoying tendency of Mathematica to get more
minus signs into standard expressions than you might wish. One way to
correct this is just to Map Minus onto two factors in a product. For
example:
3 - a (c - b)
MapAt[Minus, %, {{2, 1}, {2, 3}}]
3 - a (-b + c)
3 + a (b - c)
--
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
"David" <David.B.A.Epstein at googlemail.com> wrote in message
news:g0edhe$9eq$1 at smc.vnet.net...
> When trying to simplify an expression by hand, one carries out various
> kinds of steps:
> 1. Replace a subexpression that occurs repeatedly by a single symbol.
> 2. Multiply numerator and denominator of some subexpression by the
> same factor.
> 3. Cancel particular factors in numerator and denominator of some
> subexpression.
> 4. Gather together two subexpressions that were added together, and
> rewrite with a common denominator.
> 5. Remove common factors.
>
> etc. etc. etc.
>
> Using Part, one can of course access any particular subexpression. But
> this is time-consuming and clumsy. I find that I need trial and error
> to access the correct subexpression. Once I've accessed it, I often
> have difficulty in persuading Mathematica to perform the desired
> operation. And then I have trouble putting the subexpression back into
> place. It's something like 20 times slower than working with pencil
> and paper. HOWEVER pencil and paper calculations are more prone to
> stupid arithmetic errors, particularly if the computation is a long
> one.
>
> I have been unable to find a convenient way of doing this in
> Mathematica. I use version 5.2, but because of my University's site
> license, I have access to more recent versions. Would it help to
> change?
>
> Can anyone point me to a tutorial where experts use Mathematica to do
> a typical pencil and paper computation?
>
> Thanks a lot. Please copy replies to my personal email address as I
> don't look at the newsgroup very often.
>
> David
>
- Follow-Ups:
- Re: Re: Expression manipulation
- From: Syd Geraghty <sydgeraghty@mac.com>
- Re: Re: Expression manipulation