Matrix multiplication speed up
- To: mathgroup at smc.vnet.net
- Subject: [mg83013] Matrix multiplication speed up
- From: Frank Brand <fbrand at fhw-berlin.de>
- Date: Wed, 7 Nov 2007 06:35:02 -0500 (EST)
Dear mathgroup members,
is anyone out there being able to help me with the following problem.
I need to analyze iteratively the powers of large matrices (not
necessarily sparse). Finally I came up with the following approach in
order to avoid symbolic calculation:
1.
Describe the components of the matrices via the index pair {i,j} like
n = 3;
AInd = Table[{{{i, j}}}, {i, 1, n}, {j, 1, n}]
BInd = Table[{{{i, j}}}, {i, 1, n}, {j, 1, n}]
2.
Declaration of the "matrix product" with
MatProd = Table[0, {i, 1, n}, {j, 1, n}];
Do[
Do[
MatProd[[i, k]] =
Flatten[Table[
Map[Map[Partition[Flatten[#], 2] &,
Tuples[{{#}, BInd[[j, k]]}]] &, AInd[[i, j]]], {j, 1, n}],
2]
,
{k, 1, n}
]
,
{i, 1, n}
];
MatProd
3.
The result ist exactly what we expect, namely
{{{{{1, 1}, {1, 1}}, {{1, 2}, {2, 1}}, {{1, 3}, {3, 1}}}, {{{1,
1}, {1, 2}}, {{1, 2}, {2, 2}}, {{1, 3}, {3, 2}}}, {{{1, 1}, {1,
3}}, {{1, 2}, {2, 3}}, {{1, 3}, {3, 3}}}}, {{{{2, 1}, {1,
1}}, {{2, 2}, {2, 1}}, {{2, 3}, {3, 1}}}, {{{2, 1}, {1, 2}}, {{2,
2}, {2, 2}}, {{2, 3}, {3, 2}}}, {{{2, 1}, {1, 3}}, {{2, 2}, {2,
3}}, {{2, 3}, {3, 3}}}}, {{{{3, 1}, {1, 1}}, {{3, 2}, {2,
1}}, {{3, 3}, {3, 1}}}, {{{3, 1}, {1, 2}}, {{3, 2}, {2, 2}}, {{3,
3}, {3, 2}}}, {{{3, 1}, {1, 3}}, {{3, 2}, {2, 3}}, {{3, 3}, {3,
3}}}}}
BUT for large matrices and/or large exponents this approach is slow.
How can this method be accelerated?
Thanks very much in advance
Frank