Re: Simplifying vector expressions
- Subject: [mg2168] Re: [mg2140] Simplifying vector expressions
- From: danl (Daniel Lichtblau)
- Date: Wed, 11 Oct 1995 05:59:13 GMT
- Approved: usenet@wri.com
- Distribution: local
- Newsgroups: wri.mathgroup
- Organization: Wolfram Research, Inc.
- Sender: daemon at wri.com ( )
The difficulty lies in the fact that Times is Listable.
In[1]:= vec1 = { a, b, c }
Out[1]= {a, b, c}
In[2]:= vec2 = (1/x) * vec1 // InputForm
Out[2]//InputForm= {a/x, b/x, c/x}
In[3]:= ClearAttributes[Times, Listable]
In[4]:= vec3 = (1/x) * vec1 // InputForm
Out[4]//InputForm= {a, b, c}/x
You can change this as above, but if you do not change it back prior
to invoking any internal functions that rely on this property, be
prepared for strange results. In particular, I'dn ot be surprised if
Simplify got flaky, and it is not clear to me how Expand could work
if one argument involved a List.
A tactic that might serve your purposes is to (i) use Factor et al
as they are (that is, with Times left as Listable), (ii) find out the
PolynomialGCD of all elements in your list, (iii) divide through by
that gcd to remove it from each element (might need to apply Together
to get the job done completely), and (iv) make Times nonListable as
above, and now multiply through by that gcd to restore it. Note that
this will pull out factors in numerators as well as denominators,
which may or may not be what you want.
Daniel Lichtblau
WRI
danl at wri.com
Begin forwarded message:
>Date: Wed, 4 Oct 1995 01:57:42 -0400
>From: shenkin at still3.chem.columbia.edu (Peter Shenkin)
>Subject: [mg2140] Simplifying vector expressions
>Organization: MacroModel Development Group, Chemistry, Columbia U.,
>NY, NY
Consider the following vectors:
In[2]:= vec1 = { a, b, c }
Out[2]= {a, b, c}
In[3]:= vec2 = (1/x) * vec1
a b c
Out[3]= {-, -, -}
x x x
I am looking for a mechanism I can apply to vec2 to put it in the
form:
1
(-) { a, b, c }
x
or
{ a, b, c }
-----------
x
This would be the list equivalent of Factor[], as shown by the
following example:
In[4]:= expr = a/x + b/x + c/x
a b c
Out[4]= - + - + -
x x x
In[5]:= Factor[ expr ]
a + b + c
Out[5]= ---------
x
Does this facility (for lists) exist in Mathematica, or in a package
I can obtain easily? If not, can you suggest guidelines for implementing
something like this? Naturally, I'd want access to the full panoply
of algebraic functionality: Simplify[], Expand[], etc., in addition
to Factor[].
Thanks,
-P.
--
******** When somebody says, "It's a matter of principle,"...
********
*Peter S. Shenkin, Box 768 Havemeyer Hall, Chemistry, Columbia
Univ.,*
*NY, NY 10027; shenkin at columbia.edu; (212)854-5143; FAX:
678-9039*
************ ...it's a sure sign he wants the whole pie.
*************