Re: Transpose matrix does not work when MatrixForm is used, why?
- To: mathgroup at smc.vnet.net
- Subject: [mg45452] Re: Transpose matrix does not work when MatrixForm is used, why?
- From: "Ersek, Ted CIV NASPATUXENTRIVERMD 4.5.1.2" <ted.ersek at navy.mil>
- Date: Wed, 7 Jan 2004 17:31:18 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
A few days ago I replied to a question on how to ensure we can do math
on matrices wrapped in MatrixForm.
My earlier solution when into infinite recursion when one would try
MatrixForm[m] when (m) was already wrapped in MatrixForm.
My solution for that is to add an UpValue for the case
MatrixForm[MatrixForm[m_]]
As far as I know the version below is free of problems.
> (*------------------------------------------*)
>
> Unprotect[MatrixForm];
>
> HeadTest[func_]:= Intersection[{func},
> =
{If,List,Set,SetDelayed,UpSet,UpSetDelayed,TagSet,TagSetDelayed,Format,
> =
MakeBoxes,MakeExpression,ToBoxes,Shallow,Short,Hold,HoldForm,HoldComplete,
>
HoldPattern,Verbatim,Blank,BlankSequence,BlankNullSequence,Alternatives,
>
Pattern,Optional,Repeated,RepeatedNull,Condition,PatternTest,Rule,
> RuleDelayed,FullForm,InputForm
> }]==={}
>
>
MatrixForm[MatrixForm[m_]] ^:= MatrixForm[m];
> MatrixForm/:(f_?HeadTest)[a1___, a2_MatrixForm, a3___]:=
> Module[{result},
> result = Replace[ {a1,a2,a3}, MatrixForm->Identity, 2,
Heads->True ];
> result = f@@result;
> If[ MatrixQ[result] , MatrixForm[result], result ]
> ]
>
>
> (*---------------------------------------------------------*)
> Now we can do the following and get the output in MatrixForm.
>
>
> m1=MatrixForm[{{2,3,4},{1,5,2},{6,3,1}}]
>
> Inverse[m1]
>
> MatrixPower[m1,4]
>
> m2={{2,0,4},{0,5,2},{0,3,1}};
> m1.m1.m1.m2
>
> Det[m1]
>
> Part[m1,1,3]
>
MatrixForm[m1]
> ----------------
> Regards,
> Ted Ersek
>
> Download Mathematica Tips From
> http://www.verbeia.com/mathematica/tips/Tricks.html
>