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