aggiornamento risposta, 12/22: utilizzo di observation che c'è un omomorfismo tra le sezioni distinte e permutazioni degli oggetti sul cubo, elencare tutte queste permutazioni rappresentando un gruppo di simmetrie del cubo Peter Shor come un sottogruppo di SymmetricGroup [8] ed usando GroupElements/permute, trovare le assegnazioni baricentro utilizzando SAT solver di Mathematica, set di punti di selezionare con valori singolari distinti, qualche dettaglio in più e codice completo dato hereListing tutte le sezioni interessanti di un tetraedro
domanda
Un'interessante sezione 2D è un piano che attraversa il centro di un normale 3D simplex e altri 2 punti ciascuno dei quali è un centroide di alcuni sottoinsiemi non vuoti di vertici. È definito da due sottoinsiemi di vertici. Ad esempio {{1}, {1,2}} dà un piano definito da 3 punti: il centro del tetraedro, il primo vertice e la media del primo e del secondo vertice.
Un insieme interessante di sezioni è un insieme in cui non esistono due sezioni che definiscono lo stesso piano sotto la rietichettatura vertice. Ad esempio, impostare {{{1}, {2}}, {{3}, {4}}} non è interessante. Esiste un approccio efficace per trovare un'interessante serie di sezioni interessanti? Ho bisogno di qualcosa che possa generalizzare a un problema analogo per le sezioni 3D di 7D simplex e finire tutta la notte.
Il mio tentativo di approccio è sotto. Un problema è che se si ignora la geometria, alcune sezioni equivalenti verranno mantenute, quindi ottengo 10 sezioni anziché 3. Un problema più grande è che ho usato la forza bruta e sicuramente non scala e (richiede 10^17 confronti per 7D simplex)
http://yaroslavvb.com/upload/simplex-sections.png
Ecco il codice per generare Mathematica foto sopra.
entropy[vec_] := Total[Table[p Log[p], {p, vec}]];
hadamard = KroneckerProduct @@ Table[{{1, 1}, {1, -1}}, {2}];
(* rows of hadamard matrix give simplex vertex coordinates *)
vertices = hadamard;
invHad = Inverse[hadamard];
m = {m1, m2, m3, m4};
vs = Range[4];
(* take a set of vertex averages, generate all combinations arising \
from labeling of vertices *)
vertexPermutations[set_] := (
newSets = set /. Thread[vs -> #] & /@ Permutations[vs];
Map[Sort, newSets, {2}]
);
(* anchors used to define a section plane *)
sectionAnchors = Subsets[{1, 2, 3, 4}, {1, 3}];
(* all sets of anchor combinations with centroid anchor always \
included *)
anchorSets = Subsets[sectionAnchors, {2}];
anchorSets = Prepend[#, {1, 2, 3, 4}] & /@ anchorSets;
anchorSets = Map[Sort, anchorSets, {2}];
setEquivalent[set1_, set2_] := MemberQ[vertexPermutations[set1], set2];
equivalenceMatrix =
Table[Boole[setEquivalent[set1, set2]], {set1, anchorSets}, {set2,
anchorSets}];
Needs["GraphUtilities`"];
(* Representatives of "vertex-relabeling" equivalence classes of \
ancher sets *)
reps = First /@ StrongComponents[equivalenceMatrix];
average[verts_] := Total[vertices[[#]] & /@ verts]/Length[verts];
makeSection2D[vars_, {p0_, p1_, p2_}] := Module[{},
v1 = p1 - p0 // Normalize;
v2 = p2 - p0;
v2 = v2 - (v1.v2) v1 // Normalize;
Thread[vars -> (p0 + v1 x + v2 y)]
];
plotSection2D[f_, pointset_] := (
simplex =
Graphics3D[{Yellow, Opacity[.2],
GraphicsComplex[[email protected]@hadamard,
Polygon[Subsets[{1, 2, 3, 4}, {3}]]]}];
anchors = average /@ pointset;
section = makeSection2D[m, anchors];
rf = Function @@ ({{x, y, z, u, v},
And @@ Thread[invHad.{1, x, y, z} > 0]});
mf = Function @@ {{p1, p2, p3, x, y}, f[invHad.m /. section]};
sectionPlot =
ParametricPlot3D @@ {Rest[m] /. section, {x, -3, 3}, {y, -3, 3},
RegionFunction -> rf, MeshFunctions -> {mf}};
anchorPlot = Graphics3D[Sphere[Rest[#], .05] & /@ anchors];
Show[simplex, sectionPlot, anchorPlot]
);
plots = Table[
plotSection2D[entropy, anchorSets[[rep]]], {rep, reps}];
GraphicsGrid[Partition[plots, 3]]
Puoi spiegare perché {{1,2}, {3,4}} non è "interessante"? Qual è la rietichettatura che dà la stessa sezione? – ysap
Si mappano i vertici da 1 a 3 e il vertice da 2 a 4. Non è interessante perché le sezioni hanno lo stesso aspetto. Nella mia immagine, puoi vedere che ci sono solo 2 forme distinte: triangolo e quadrato. Tutto il resto è una sorta di rotazione/riflesso di quelle forme –
Ho provato diverse volte a capire la notazione di {{1}, {1,2}} e {{{1}, {2}}, {{3} , {4}}}, ma proprio non poteva. Puoi fornire un link che lo spiega? – Dialecticus