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 Copyright 1988-91 Wolfram Research, Inc. 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 functions instead of transformation rules). Good Luck, Jeff