MathGroup Archive 2004

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

Search the Archive

Re: Transpose matrix does not work when MatrixForm is used, why?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg45398] Re: Transpose matrix does not work when MatrixForm is used, why?
  • From: Dr Bob <drbob at bigfoot.com>
  • Date: Tue, 6 Jan 2004 04:16:56 -0500 (EST)
  • References: <0BB4C7A6482ABB4EB233E1EF37A399CDE19C10@NAEAPAXREX10VA.nadsusea.nads.navy.mil>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

Great work!

But.... MatrixForm@m (when m is already MatrixForm) is an infinite loop.

After some laborious sleuthing, I found that adding MatrixQ to the 
HeadTest list fixes that:

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, MatrixQ}] === {}
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]]
Protect[MatrixForm];

BUT... now MatrixQ@m isn't True, and that's not good, is it?

Bobby

On Mon, 5 Jan 2004 15:29:45 -0500, Ersek, Ted  CIV NASPATUXENTRIVERMD 
4.5.1.2 <ted.ersek at navy.mil> wrote:

> Recall the recent thread on how do ensure we can do math on matrices 
> wrapped in MatrixForm.
> Apparently other solutions didn't quite do the trick.  I think the code 
> below is better.
> (*------------------------------------------*)
>
> 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/:(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]
>
>
> ----------------
> Regards,
>    Ted Ersek
>
> Download Mathematica Tips From
> http://www.verbeia.com/mathematica/tips/Tricks.html
>
>
>




  • Prev by Date: Combinatorica book out
  • Next by Date: Re: Mathematica exports curves in pieces to Illustrator
  • Previous by thread: Re: Transpose matrix does not work when MatrixForm is used, why?
  • Next by thread: Re: Transpose matrix does not work when MatrixForm is used, why?