Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1997
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1997

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: MatrixForm

  • To: mathgroup at smc.vnet.net
  • Subject: [mg8856] Re: [mg8804] MatrixForm
  • From: Allan Hayes <hay at haystack.demon.co.uk>
  • Date: Tue, 30 Sep 1997 20:16:16 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

Kent Day <kentd at ces.clemson.edu>
[mg8804] MatrixForm
writes
>I am new to mathematica and am having a problem understanding the
> way ituses MatrixForm. The manual says it only affects the look of
> the equation and not the way it is processed however if I use it I
> get "strange" results.
>
> a={{a11,a12},{a21,a22}}
> b={{b11,b12},{b21,b22}}
>
> MatrixForm[a+b]
> MatrixForm[a]+MatrixForm[b]
> MatrixForm[a]+b
>
> all yield different results. Only the first one being what I
> would've expected i.e. a new matrix {{a11+b11,{a12+b12} etc.. the
> last one gives the strangest result in which is each element of b
> is added to the entrire a matrix.
> any suggestions? also, once a function is in matrixForm as in
> f=MatrixForm[a] how can I get f back into list form (is there a
> ListForm kind of command?)


I'll try and deal with these points below (I have deleted 2D  
outputs - please evaluate the inputs to see these)

First enter the example matrices.
In[1]:=
 a={{a11,a12},{a21,a22}};
 b={{b11,b12},{b21,b22}};

Now for the effects of MatrixForm:

(1) With
In[2]:= MatrixForm[a+b]
Out[2]//MatrixForm=   .....

The evaluation process is
 	first, a+b is evaluated;
 	then its value is made the output from this entry;
 	then MatrixForm instructs how to format the display.
So MatrixForm is not part of the output.
The output cell label  Out[1]//MatrixForm=  is meant to show this  
separation.
You can check this

In[3]:= %
Out[3]= {{a11+b11,a12+b12},{a21+b21,a22+b22}}

In[4]:= %1
Out[4]= {{b11,b12},{b21,b22}}

(2) With

In[5]:= 3 +MatrixForm[b]

Out[5]= ...

The input has FullForm Plus[3,MatrixForm[b]])
and the evaluation is
3 + MatrixForm[b]
--> 3+ MatrixForm[{{b11,b12},{b21,b22}}] (this is the output;  
MatrixForm *is * part of it and affects the  display; the
output cell label is simply Out[ ]=.)

Check

In[6]:= %
Out[6]= .....
This kind of thing also happens with MatrixForm[a]+b (MatrixForm[a]  
is added to each entry of b )

(3) With

In[7]:= f = MatrixForm[a]

Out[7]//MatrixForm= ....

the evaluation is
	f = MatrixForm[a]
	--> f = MatrixForm[{{a11,a12},{a21,a22}}]
	(store this assignment to f )
	---> MatrixForm[{{a11,a12},{a21,a22}}]
	( the situation is now as for the first example)
	output is{{a11,a12},{a21,a22}} and is displayed in form  
instructed bv MatrixForm.

You can see that MatrixForm is part of the value f

In[8]:= ?f
	"Global`f"
	f = MatrixForm[{{a11, a12}, {a21, a22}}]
but please distinguish this assignment from the output got on entering f:

In[9]:= f
Out[9]//MatrixForm= .....

In[10]:= %
Out[10]= {{a11,a12},{a21,a22}}

If you want to assign the plain list structure a to f but display in 
MatrixForm you can use

In[11]:= MatrixForm[f= a]
Out[11]//MatrixForm= ....

In[12]:=f
Out[12]= {{a11,a12},{a21,a22}}

(4) OTHER APPROACHES
4.1. In TraditionalForm matrices are shown as 2D with parentheses
4.2. $Preprint can be used to automatically display in matrix form.
($Preprint: is applied after evaluation and assignment of output   
but before display, so there is no evidence of its use in the outpu)

In[13]:= $PrePrint = If[MatrixQ[#], MatrixForm[#],#]&;
In[14]:= 3+a
Out[14]= ....

But this form does not go inside expressions:
In[15]:= A[a,b]
Out[15]=A[{{a11,a12},{a21,a22}},{{b11,b12},{b21,b22}}]

The following does go inside expressions.

In[16]:= $PrePrint = (#/.x_?MatrixQ :> MatrixForm[x])&;

In[17]:= A[a+b]
Out[17]= ....

In[18]:= $PrePrint=.  (*clear the assignment*)

4.3 . MakeBoxes can be used similarly: it is more complicated to  
use but is more controllable.

In[19]:= MakeBoxes[m_?MatrixQ, form_]:=
	RowBox[{"(", GridBox[Map[MakeBoxes[#,form]&,m,{2}]],")"}]

In[20]:= 3+a
Out[20]= ...

In[21]:= MakeBoxes[m_?MatrixQ, form_]=.  (*clear assignment*)

Allan Hayes
hay at haystack.demon.co.uk
http://www.haystack.demon.co.uk/training.html
voice:+44 (0)116 2714198
fax: +44 (0)116 2718642
Leicester,  UK


  • Prev by Date: Re: Unsolved integral
  • Next by Date: Sequence is funny !
  • Previous by thread: Re: MatrixForm
  • Next by thread: RE: [Q] Why Integrate[1/x,x] <>