Re: Re: Automatic Display in MatrixForm
- To: mathgroup at smc.vnet.net
- Subject: [mg19287] Re: [mg19259] Re: [mg19206] Automatic Display in MatrixForm
- From: Richard Gass <gass at physics.uc.edu>
- Date: Thu, 12 Aug 1999 22:34:44 -0400
- References: <7or4k5$13j@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Allan, Another possibility is to use $PrePrint=If[MatrixQ[#],MatrixForm[#],#]& Allan wrote > >Two comments: A) and B) >I show the outputs in InputForm and indented >(of course we can always use TraditionalForm: Cell>Default Output >Format>TraditionalForm) > >A) There are still problems: > >$Post = (# /. x_?MatrixQ :> MatrixForm[x]) &; > >mtrx = {{2, 0, 0}, {0, -1, 0}, {0, 0, 3}} > > MatrixForm[{{2, 0, 0}, {0, -1, 0}, {0, 0, 3}}] > >mtrx.a > > MatrixForm[{{2, 0, 0}, {0, -1, 0}, {0, 0, 3}}] . a > >% /. a -> mtrx > > MatrixForm[MatrixForm[{{2, 0, 0}, {0, -1, 0}, > {0, 0, 3}}]] . MatrixForm[{{2, 0, 0}, {0, -1, 0}, > {0, 0, 3}}] > >The MatrixForm wrappers prevent the Dot product. > >B) Perhaps a more general solution is as follows (where MatrixForm is first >replaces by Identity to allow evaluation, and is then replaced >appropriately). I await a list of problems with this also! > >$Post = (# /. MatrixForm -> Identity /. x_?MatrixQ :> MatrixForm[x]) &; > >mtrx = {{2, 0, 0}, {0, -1, 0}, {0, 0, 3}} > > MatrixForm[{{2, 0, 0}, {0, -1, 0}, {0, 0, 3}}] > >mtrx.a > > MatrixForm[{{2, 0, 0}, {0, -1, 0}, {0, 0, 3}}] . a > >% /. a -> mtrx > > MatrixForm[{{4, 0, 0}, {0, 1, 0}, {0, 0, 9}}] > > > >Ersek, Ted R <ErsekTR at navair.navy.mil> wrote in message >news:7or4k5$13j at smc.vnet.net... >> Bruno Daniel wrote: >> ---------------------- >> I found a way to display matrices automatically in MatrixForm >> without having to place the annoying "// MatrixForm" in the end >> of each line. Just put the following line into your init.m: >> >> $Post=(#/.x_?MatrixQ->MatrixForm[x])& >> >> This also works for output that doesn't *consist* of a matrix, but >> *contains* matrices. >> ---------------------------- >> >> That's nice, but it sometimes spells disaster. >> >> >> In[1]:= >> $Post=(#/.x_?MatrixQ->MatrixForm[x])&; >> >> In[2]:= >> x=3+y; >> >> In[3]:= >> mtrx={{2,0,0},{0,-1,0},{0,0,3}} >> >> Out[3]//MatrixForm= >> 3+y >> >> >> What *%&^ !! >> ----------------- >> >> You used (lhs->rhs) in $Post, and Rule uses the global value of (x) in >> (rhs). Hence the result in Out[3] is very wrong! However, (mtrx) >actually >> has the right value. Below the first row of (mtrx) is displayed. >> >> >> In[4]:= >> First[mtrx] >> >> Out[4]= >> {2,0,0} >> >> ----------------------------- >> What you need to do is use (lhs:>rhs) as below. >> >> In[5]:= >> $Post=(#/.x_?MatrixQ:>MatrixForm[x])&; >> >> In[6]:= >> mtrx >> >> Out[6]//MatrixForm= >> (* The desired output is displayed. *) >> >> ---------------------------- >> >> It's no wonder people keep making this mistake in spite of me pointing it >> out over and over. The Mathematica Book (all editions) are full of >examples >> that will give the same type of error when the variable used has a global >> value. The book does nothing to warn users about this problem, or how to >> avoid it. Has Stephen Wolfram not been aware of this for the past 10 >years, >> or does he think it's in his best interest to avoid bringing it to our >> attention? >> >> As far as I can tell WRI tech support doesn't have a web page addressing >> this problem. >> >> Besides that there are dozens of books written about how to use >Mathematica. >> I have yet to find one that mentions this problem. It's even more >puzzling >> why few if any of the other books discuss this point. >> >> ------------- >> Regards, >> Ted Ersek >> Richard Gass Department of Physics University of Cincinnati Cincinnati, OH 45221 phone- 513-556-0519 E-Mail gass at physics.uc.edu