Re: Factor MatrixForm
- To: mathgroup at smc.vnet.net
- Subject: [mg21389] Re: [mg21383] Factor MatrixForm
- From: "David Park" <djmp at earthlink.net>
- Date: Sat, 1 Jan 2000 20:54:47 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Bob, I have often wished to do the same thing because text books often have symbolic arrays in a factored form. However, Mathematica always multiplies any factors into a list. The only solution I know is to put the list into a HoldForm and then remember to release it if you need to. Here are two separate routines, one for matrices and the other for vectors which I believe will work: factormatrix[matrix_?MatrixQ] := Module[{wmatrix, list, fac}, wmatrix = Map[Factor, matrix, {2}]; wmatrix = list @@ wmatrix; fac = wmatrix /. list[{_ h_.} ..] -> h; wmatrix = fac(#/fac & /@ wmatrix) /. list[x__] -> HoldForm[List[x]]; If[fac === 1, ReleaseHold[wmatrix], wmatrix]] factormatrix[{{a h}, {b h}, {c h}}] h {{a}, {b}, {c}} factormatrix[{{a h1 h2}, {b h1 h2}, {c h1 h2}}] h1 h2 {{a}, {b}, {c}} factormatrix[{{a h}, {b h}, {c }}] {{a h}, {b h}, {c}} factormatrix[{{Cos[a]Sin[b]H}, {-Sin[a]k w H - 5Sin[b]k H}, {-2Cos[2a]H}}] % /. HoldForm[x_] :> MatrixForm[x] H {{Cos[a] Sin[b]}, {-k (w Sin[a] + 5 Sin[b])}, {-2 Cos[2 a]}} - MatrixForm not shown - factorvector[vector_?VectorQ] := Module[{wvector, list, fac}, wvector = Map[Factor, vector, {1}]; wvector = list @@ wvector; fac = wvector /. list[_ h_. ..] -> h; wvector = fac(#/fac & /@ wvector) /. list[x__] -> HoldForm[List[x]]; If[fac === 1, ReleaseHold[wvector], wvector]] factorvector[{a h, b h, c h}] h {a, b, c} factorvector[{a h1 h2, b h1 h2, c h1 h2 }] h1 h2 {a, b, c} factorvector[{a h, b h, c }] {a h, b h, c} David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ >I'm not sure what operation I want to perform on my list. Factor >almost does what I want. What I have is, after many operations, >a list in MatrixForm, something like this: > > MatrixForm[t] > > [ Cos[a]Sin[b]H - Sin[a]Sin[b]H ] > [ -Sin[a]k*w*H - 5*Sin[b]*k*H ] > [ -2Cos[2a]H ] > >What manipulation do I perform to get it to look like > > [ Cos[a]Sin[b] - Sin[a]Sin[b] ] > H*[ -Sin[a]k*w - 5*Sin[b]*k ] > [ -2Cos[2a] ] > > > >-- >---------------------------------------------------------------- > Bob Love > rlove at neosoft.com >---------------------------------------------------------------- >