Re: Elementwise Matrix Subtraction

• To: mathgroup at smc.vnet.net
• Subject: [mg121680] Re: Elementwise Matrix Subtraction
• From: Murray Eisenberg <murray at math.umass.edu>
• Date: Sun, 25 Sep 2011 05:42:59 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <201109250234.WAA26217@smc.vnet.net>

```Once you take MatrixForm of a nested list representing a matrix, you no
longer have that "matrix" and so cannot perform matrix operations upon
it. Essentially, MatrixForm is something you want to use only to display
a list of lists as a matrix.

The following gives the same result for km1 as for km2:

examplegraph =
Graph[{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 3,
3 \[UndirectedEdge] 4, 4 \[UndirectedEdge] 5,
4 \[UndirectedEdge] 6, 1 \[UndirectedEdge] 5,
2 \[UndirectedEdge] 5}, {VertexLabels -> "Name"}, {ImagePadding ->
10}];
km1 = KirchhoffMatrix[examplegraph]; km1 // MatrixForm
am = AdjacencyMatrix[examplegraph]; am // MatrixForm
im = DiagonalMatrix[{2, 3, 2, 3, 3, 1}]; im // MatrixForm
km2 = im - am; km2 // MatrixForm

On 9/24/11 10:34 PM, velvetfish1 at hotmail.com wrote:
> I am trying to do a simple element-wise matrix subtraction to obtain
> the Laplacian Matrix of a Graph, by doing an element wise subtraction
> matrix derived from input using DiagonalMatrix[] that I am using as a
> simple check to understand more complex matrices have been properly
> specified.  This should give the same result as KirchhoffMatrix[].
> However, I get a behavior I don't quite understand.
>
> Rather than seeing the evaluated result of the element-wise
> subtraction instead I see, when visualizing in //MatrixForm the
> difference of the two matrices each shown in MatrixForm  but
> symbolically specified as the difference two separate matrices, rather
> than as a single matrix with the subtraction evaluated.  I've tried
> doing the subtraction either in a map or only by using the
> Subtraction[] function.   It seems that in either case the kernel is
> not evaluating the subtraction, but I can not figure out why.  There
> is no HoldOn[] being specified as far as I know, but am unsure how to
> tell, not having specified one.
>
> The code is as follows:
>
> examplegraph =
>   Graph[{1 \[UndirectedEdge] 2,  2 \[UndirectedEdge] 3,
>     3 \[UndirectedEdge] 4, 4 \[UndirectedEdge] 5,
>     4 \[UndirectedEdge] 6, 1 \[UndirectedEdge] 5,
>     2 \[UndirectedEdge] 5}, {VertexLabels ->  "Name"}, {ImagePadding ->
>      10}]
>
> km1 = KirchhoffMatrix[examplegraph] // MatrixForm
>
> am = AdjacencyMatrix[examplegraph] // MatrixForm
>
> im = DiagonalMatrix[{2, 3, 2, 3, 3, 1}] // MatrixForm
>
> km2 = MatrixForm /@ {im - am}
>
> km3 = Subtract[dm, am]
>
> km2 // MatrixForm
>
> km3 // MatrixForm
>
>
> Thus the output looks like:
>
> \!\(\*
> TagBox[
> RowBox[{
> TagBox[
> RowBox[{"(", "", GridBox[{
> {"2", "0", "0", "0", "0", "0"},
> {"0", "3", "0", "0", "0", "0"},
> {"0", "0", "2", "0", "0", "0"},
> {"0", "0", "0", "3", "0", "0"},
> {"0", "0", "0", "0", "3", "0"},
> {"0", "0", "0", "0", "0", "1"}
> },
> GridBoxAlignment->{
>          "Columns" ->  {{Center}}, "ColumnsIndexed" ->  {},
>           "Rows" ->  {{Baseline}}, "RowsIndexed" ->  {}},
> GridBoxSpacings->{"Columns" ->  {
> Offset[0.27999999999999997`], {
> Offset[0.7]},
> Offset[0.27999999999999997`]}, "ColumnsIndexed" ->  {}, "Rows" ->  {
> Offset[0.2], {
> Offset[0.4]},
> Offset[0.2]}, "RowsIndexed" ->  {}}], "", ")"}],
> Function[BoxForm`e\$,
> MatrixForm[BoxForm`e\$]]], "-",
> TagBox[
> RowBox[{"(", "", GridBox[{
> {"0", "1", "0", "0", "1", "0"},
> {"1", "0", "1", "0", "1", "0"},
> {"0", "1", "0", "1", "0", "0"},
> {"0", "0", "1", "0", "1", "1"},
> {"1", "1", "0", "1", "0", "0"},
> {"0", "0", "0", "1", "0", "0"}
> },
> GridBoxAlignment->{
>          "Columns" ->  {{Center}}, "ColumnsIndexed" ->  {},
>           "Rows" ->  {{Baseline}}, "RowsIndexed" ->  {}},
> GridBoxSpacings->{"Columns" ->  {
> Offset[0.27999999999999997`], {
> Offset[0.7]},
> Offset[0.27999999999999997`]}, "ColumnsIndexed" ->  {}, "Rows" ->  {
> Offset[0.2], {
> Offset[0.4]},
> Offset[0.2]}, "RowsIndexed" ->  {}}], "", ")"}],
> Function[BoxForm`e\$,
> MatrixForm[
>        SparseArray[
>         Automatic, {6, 6}, 0, {
>          1, {{0, 2, 5, 7, 10, 13, 14}, {{2}, {5}, {1}, {3}, {5}, {2}, {
>            4}, {3}, {5}, {6}, {4}, {1}, {2}, {4}}}, {1, 1, 1, 1, 1, 1,
>           1, 1, 1, 1, 1, 1, 1, 1}}]]]]}],
> Function[BoxForm`e\$,
> MatrixForm[BoxForm`e\$]]]\)
>
> Rather than:
>
> \!\(\*
> TagBox[
> RowBox[{"(", "", GridBox[{
> {"2",
> RowBox[{"-", "1"}], "0", "0",
> RowBox[{"-", "1"}], "0"},
> {
> RowBox[{"-", "1"}], "3",
> RowBox[{"-", "1"}], "0",
> RowBox[{"-", "1"}], "0"},
> {"0",
> RowBox[{"-", "1"}], "2",
> RowBox[{"-", "1"}], "0", "0"},
> {"0", "0",
> RowBox[{"-", "1"}], "3",
> RowBox[{"-", "1"}],
> RowBox[{"-", "1"}]},
> {
> RowBox[{"-", "1"}],
> RowBox[{"-", "1"}], "0",
> RowBox[{"-", "1"}], "3", "0"},
> {"0", "0", "0",
> RowBox[{"-", "1"}], "0", "1"}
> },
> GridBoxAlignment->{
>        "Columns" ->  {{Center}}, "ColumnsIndexed" ->  {},
>         "Rows" ->  {{Baseline}}, "RowsIndexed" ->  {}},
> GridBoxSpacings->{"Columns" ->  {
> Offset[0.27999999999999997`], {
> Offset[0.7]},
> Offset[0.27999999999999997`]}, "ColumnsIndexed" ->  {}, "Rows" ->  {
> Offset[0.2], {
> Offset[0.4]},
> Offset[0.2]}, "RowsIndexed" ->  {}}], "", ")"}],
> Function[BoxForm`e\$,
> MatrixForm[
>      SparseArray[
>       Automatic, {6, 6}, 0, {
>        1, {{0, 3, 7, 10, 14, 18, 20}, {{1}, {2}, {5}, {2}, {1}, {3}, {
>          5}, {3}, {2}, {4}, {4}, {3}, {5}, {6}, {5}, {4}, {1}, {2}, {
>          6}, {4}}}, {2, -1, -1, 3, -1, -1, -1, 2, -1, -1,
>         3, -1, -1, -1, 3, -1, -1, -1, 1, -1}}]]]]\)
>
> As I would expect.
>
> Does anyone have an idea why the evaluation does not take place, even
> when it is explicitly evaluated?  Could this have something to do with
> "automatic" display or evaluation when a Sparce Array is being created
> implicitly?
>
> Thanks in advance for any help, someone might kindly provide.
>

--
Murray Eisenberg                     murray at math.umass.edu
Mathematics & Statistics Dept.
Lederle Graduate Research Tower      phone 413 549-1020 (H)
University of Massachusetts                413 545-2859 (W)
710 North Pleasant Street            fax   413 545-1801
Amherst, MA 01003-9305

```

• Prev by Date: Re: A fast way to compare two vectors
• Next by Date: Re: A fast way to compare two vectors
• Previous by thread: Elementwise Matrix Subtraction
• Next by thread: Nonhomogeneous Wave Equation with NDSolve