This is my first post and I have quite a long question. Thanks to any who read.
To start with, I have an operator m=Transpose[n] on a 7 dimensional vector space V where n is constructed as follows:
v = {1, 0, 0, 0, a, 0, b, a, c, 0, g, d, e, g};
n = NestList[Delete[Prepend[#, 0], -1] &, v, 13];
I desire to calculate a basis of the eigenspace for the induced map of m on the 7th exterior power V. To this end I created the induced matrix M3 with the following code:
h[{i_, j_, k_, o_, p_, u_, y_}] :=n[[i]]\[TensorWedge]n[[j]]\[TensorWedge]n[[k]]\[TensorWedge]n[[
o]]\[TensorWedge]n[[p]]\[TensorWedge]n[[u]]\[TensorWedge]n[[y]];
OrderedTuples = Flatten[Table[{i, j, k, o, p, u, y}, {i, 8}, {j, i + 1, 9}, {k,
j + 1, 10}, {o, k + 1, 11}, {p, o + 1, 12}, {u, p + 1, 13}, {y,
u + 1, 14}], 6];
M = Map[h, OrderedTuples];
M2 = Map[Drop[SymmetrizedArrayRules[#], -1] &, M];
Rules = {};
For[i = 1, i < Length[M] + 1, i++, Print[i];
ComposeRule[rulelist_] := rulelist /. HoldPattern[Rule[x_,y_]] :> (x /.Thread[OrderedTuples -> Thread[{i, Range[Length[M]]}]]) -> y;
AppendTo[Rules, Map[ComposeRule, M2[[i]]]]];
M3 = Transpose[Normal[SparseArray[Flatten[Rules], {Length[OrderedTuples], Length[OrderedTuples]}, 0]]];
It takes about an hour to make M3 on my machine (very rough estimate).
Truly, I am interested in the intersection of the eigenspaces (The only eigenvalue of M3 is 1 and if you plot the entries of M3 you see it is like a Sierpenski Gasket, hence the fractal part of the title) over all values of the parameters a,b,c,d,e,g. To start off chose some fixed values like
a = -1236;
b = 5423;
c = 2134;
d = -5453;
e = 2234;
f = 4325;
g = -237;
because sufficiently general parameters should catch all the eigenvectors. To calculate the eignespace I used:
Eigen = DeleteDuplicates[Eigenvectors[N[M3]]];
and obtained a list of 14 eigenvectors, all of which are basis elements. To see this observe that
Length[Eigen]
14
For[i = 1, i < Length[Eigen] + 1, i++,
Print[DeleteDuplicates[Eigen[[i]]]]]
{0.,1.}
{0.,1.}
{0.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
{0.,1.}
and
For[i = 1, i < Length[Eigen] + 1, i++, Print[Count[Eigen[[i]], 1.]]]
1
1
0
1
1
1
1
1
1
1
1
1
1
1
Also, I can see exactly which basis vectors these are with
Pos = Sort[Flatten[Map[Position[#, 1.] &, Eigen]]]
{3092, 3311, 3388, 3394, 3396, 3417, 3421, 3423, 3424, 3429, 3430, 3431, 3432}
Now here is the interesting part: From the context of the problem (Algebraic Geometry) I know that
E = SparseArray[{{1603, 1} -> 1, {1606, 1} -> 1, {1695, 1} -> -1, {1698, 1} -> -1}, {3432, 1}];
Should be an eigenvector of M3 and indeed,
ArrayRules[M3.Normal[E]]
{{1603, 1} -> 1, {1606, 1} -> 1, {1695, 1} -> -1, {1698, 1} -> -1, {_, _} -> 0}
as I thought it should be. Is this a bug? Why isn't mathematica producing a basis for the eigenspace? Also, I exported the matrix to matlab and it also calculated the eigenvectors wrong and gave essentially the same answer.
Thanks again!
Ian
Edit 1: I wanted to point out that when I do the same procedure for much smaller cases mathematica is able to give me results that make sense in the bigger theory and this is why it appears to be a scaling issue. Also I have added the following picture to show the fractal structure
Edit 2: I have used
Export["M3.mtx", SparseArray[M3]]
as J.M. requested. To create a compressed sparse array version of M3. Here is the link: https://www.dropbox.com/s/8fg8rmtrv494fve/M3.mtx?dl=0
Compress
your matrixM3
and upload it somewhere for others to work with, rather than waiting 1 hour to generate it? $\endgroup$