Re: matrix manipulation using transformations

• To: mathgroup at yoda.physics.unc.edu
• Subject: Re: matrix manipulation using transformations
• From: Jeffrey Edwin Thoma <jet3v at helga11.acc.virginia.edu>
• Date: Fri, 4 Jun 1993 21:01:00 GMT

```Michael Carter wanted a simple way to divide each row in a matrix by its
last element using transformation rules.  There are two ways to do this
that I can think of.

1).  If you know that the matrix will always be the same size, eg
3x3.

m /. m[[{1,2,3}]] -> m[[{1,2,3}]] /
{m[[1,3]],m[[2,3]],m[[3,3]]}

This works, but it seems kind of kludgey.

2).  A more general method is:

m /. m -> m/Last[Transpose[m]]

I have included an example of method 2 (which works with any size vector
or matrix) below.  I use 3x3 in the example since it prints up smaller.

-----------------
Mathematica 2.0 for IBM RISC System 6000

In[1]:= SymMat[imax_, jmax_] := Array[a, {imax, jmax}]

In[2]:= RndMat[imax_, jmax_] := Table[Random[] + 0.0001, {i, 1, imax},
{k, 1, jmax}]

In[3]:= mSym = SymMat[3,3]

Out[3]= {{a[1, 1], a[1, 2], a[1, 3]}, {a[2, 1], a[2, 2], a[2, 3]}, {a[3,
1], a[3, 2], a[3, 3]}}

In[4]:= mNum = RndMat[3,3]

Out[4]= {{0.480837, 0.18627, 0.656986}, {0.628739, 0.732096, 0.625209},
{0.209607, 0.471707, 0.862245}}

In[5]:= mNum /. mNum -> mNum /Last[Transpose[mNum]]

Out[5]= {{0.731884, 0.283523, 1.}, {1.00565, 1.17096, 1.}, {0.243094,
0.547068, 1.}}

In[6]:= mSym /. mSym -> mSym /Last[Transpose[mSym]]

a[1, 1]  a[1, 2]       a[2, 1]  a[2, 2]       a[3, 1]  a[3,
2]
Out[6]= {{-------, -------, 1}, {-------, -------, 1}, {-------,
-------, 1}}
a[1, 3]  a[1, 3]       a[2, 3]  a[2, 3]       a[3, 3]  a[3,
3]

-------------------

I hope this is what you want (If you really wanted a way to divide the
kth row by its last element, then I think you would be better off using