Elementwise Matrix Subtraction
- To: mathgroup at smc.vnet.net
- Subject: [mg121667] Elementwise Matrix Subtraction
- From: velvetfish1 at hotmail.com
- Date: Sat, 24 Sep 2011 22:34:57 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
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
of the adjacency matrix, using AdjacenyMatrix[] from the incidence
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.
- Follow-Ups:
- Re: Elementwise Matrix Subtraction
- From: Murray Eisenberg <murray@math.umass.edu>
- Re: Elementwise Matrix Subtraction