MathGroup Archive 2007

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

Search the Archive

Re: all the possible minors of a matrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg73775] Re: [mg73755] all the possible minors of a matrix
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Wed, 28 Feb 2007 04:31:17 -0500 (EST)
  • References: <200702271053.FAA24211@smc.vnet.net>

Mark Novak wrote:
> Hello,
> 
> I'm trying to recode a script into Mathematica and am stuck.
> 
> My problem in short:
> I need to calculate all minors of a matrix, but can't figure out a way 
> to get Mathematica to do more than just a specifically assigned minor at 
> a time (e.g., the minor produce by removing column 1, row 1).
> 
> My problem in long version:
> (I've posted an explanation with example matrices and links to the code 
> I have written at http://home.uchicago.edu/~mnovak/mathematicahelp.html)
> 
> The original line is 
> T:=matrix(n,n,(i,j)->permanent(minor(abs(A),j,i))):evalm(T);
> 
> So, given a matrix A of dimensions n by n, determine the n x n different 
> minors of the |A| matrix (each minor being of size n-1 by n-1), then 
> calculate the permanent of each of these minors, and put the resultant 
> single value into the relevant position of an n by n matrix.  That is, 
> the permanent of the minor produced by removing the ith row and jth 
> column goes into position (i,j).
> 
> First we need to define how we want the Minor of a matrix to be 
> calculated (Mathematica's "Minors" function does it in a way that we 
> don't want.) Second, Mathematica doesn't have a function for calculating 
> a matrix's permanent, so we need to define that function. (Both of these 
> I got from searching the the Mathgroup forum.)
> 
> Minor[m_List?MatrixQ, {i_Integer, 
> j_Integer}]:=Abs[Drop[Transpose[A],{j}]],{i}]]
> Permanent[m_List]:=With[{v=Array[x,Length[m]]},Coefficient[Times@@(m.v),Times@@v]]
> 
> Then the following does work....
> 
> Minor[Abs[A],{1,3}]//MatrixForm
> Permanent[Minor[Abs[A],{i,j}]]/.{i->1,j->1}
> 
> But the problem is that while I can do each of the Minor and Permanent 
> calculations for specified rows i & columns j of the matrix, I can't 
> figure out how to do all n x n possible combinations of i and j.
> 
> Any suggestions would be much appreciated.
> Thanks!
> -mark
> 

Recall Minors takes an optional third argument which is a function to 
use in place of (default) Det. So you could use something like:

unsignedCofactors[mat_?MatrixQ, k_] :=
   Module[{len = Length[mat], mn}, (mn = Minors[mat, len - k, permanent];
         Reverse[Map[Reverse, mn]]) /; len >= k]

where permanent is as you indicated (or can be defined in other ways 
e.g. using recursion and memo-ization).

permanent[mat_?MatrixQ ] := Module[
       {t, x},
       x = Array[t, Length[mat]];
       Coefficient[Apply[Times, mat.x], Apply[Times, x]]
       ] /; Length[mat] === Length[mat[[1]]]

Going from minors to cofactors is discussed in a section of the notebook at

http://library.wolfram.com/infocenter/Conferences/325/

Daniel Lichtblau
Wolfram Research


  • Prev by Date: Re: Re: Hold and Equal
  • Next by Date: Unexpected Integrate::idiv : (Warning message)
  • Previous by thread: all the possible minors of a matrix
  • Next by thread: Re: all the possible minors of a matrix