Перечисление всех интересных разделов тетраэдра - PullRequest
18 голосов
/ 20 сентября 2010

Обновление ответа, 12/22 : Используя наблюдение Питера Шора о том, что существует гомоморфизм между отдельными секциями и перестановками объектов в кубе, перечислите все такие перестановки, представив группу изсимметрии куба в качестве подгруппы SymmetricGroup [8] и с помощью GroupElements / Permute находите назначения центроидов с помощью решателя SAT Mathematica, выбирайте наборы точек с различными значениями единственного числа, немного больше деталей и полный код, указанный здесь

Вопрос

Интересный 2D-разрез - это плоскость, проходящая через центр правильного трехмерного симплекса и 2 других точки, каждая из которых является центроидом некоторогонепустое подмножество вершин.Он определяется двумя подмножествами вершин.Например, {{1}, {1,2}} дает плоскость, определяемую 3 точками - центром тетраэдра, первой вершиной и средним значением первой и второй вершин.

Интересный набор секцийнабор, в котором нет двух секций, определяющих одну и ту же плоскость при перемаркировке вершин.Например, набор {{{1}, {2}}, {{3}, {4}}} не интересен.Существует ли эффективный подход к поиску интересного набора интересных разделов?Мне нужно что-то, что можно было бы обобщить для аналогичной задачи для трехмерных участков 7D симплекса и закончить в одночасье.

Мой попытка подхода приведена ниже.Одна проблема состоит в том, что если вы игнорируете геометрию, некоторые эквивалентные секции будут сохранены, поэтому я получу 10 секций вместо 3. Большая проблема заключается в том, что я использовал грубую силу, и она определенно не масштабируется и (нужно 10 ^ 17сравнение для 7D симплекса)

http://yaroslavvb.com/upload/simplex-sections.png

Вот код Mathematica для создания изображения выше.

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[Transpose@Rest@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]]

1 Ответ

4 голосов
/ 11 ноября 2010

Правильное решение для программирования, в общих чертах:

  • Обратите внимание, что центры приходят в проективных парах - поэтому идентифицируйте и сохраняйте только половину центров, которые находятся в одной или другой полусферической оболочкемножество центров.Пары являются набором дополнений друг друга.Правило примера: все подмножества, содержащие вершину 1, и те, которые находятся на «экваторе», те, которые содержат вершину 2, и на «экваторе» этого набора, те, которые содержат вершину 3, и т. Д. Рекурсивно сохраняют границу половины смежной с наименьшим индексированнымвершина.
  • Заметьте, что для каждого подимплекса либо подимплекс смежен с вершиной 1, либо на расстоянии 1 от симплекса.(Причина: каждая новая вершина в тетраэдре прикреплена к каждой предыдущей вершине тетраэдра - следовательно, каждый подимплекс либо инцидентен с вершиной 1, либо вершина 1 связана с каждой вершиной симплекса.) Следовательно, существует только две популяции каждоговид субсимплекса (относительно указанной вершины).(Мы можем заменить это наблюдение решением сохранить только меньший член каждой проективной пары, но тогда правило для маркировки вершин более сложное.)
  • Тетраэдры полностью симметричны при перестановке меток вершин,Следовательно, любой «интересный раздел» эквивалентен другому разделу, содержащему только начальный сегмент вершин - т.е. может быть идентифицирован среди вершин Range [1, n] для некоторого n.

  • Собирая все вышесказанное, мы обнаруживаем, что из интересного раздела есть набор графов.Для каждого графа мы должны перечислить согласованное членство в вершинах (описано позже).За исключением одной вершины, вершины графа входят в пары

    • Пара содержит все центры данной мощности (все подимплики данного измерения).
    • Один членпара содержит центры, падающие на вершину 1.
    • Другой член пары содержит центры, не падающие на вершину 1.
    • Специальной вершиной является либо центр, содержащий все вершины, либо его проективная пара («пустой центр»).
    • Если в графе содержится какой-либо элемент пары, он должен (как минимум) содержать элемент, содержащий центры, инцидентные 1 (или для этого можно перемаркировать вершины).
  • Края графика взвешены.Вес - это количество вершин, разделяемых двумя центрами.Существуют ограничения на вес, основанные на мощности центров на каждом конце и на основе того, являются ли две вершины первыми членами, обоими вторыми членами или являются ли они каждой из них.(Например, «Один из каждого» не может совместно использовать вершину 1.)
  • Граф - это полный подграф на множестве вершин, содержащий специальную вершину.Например, для тетраэдра граф представляет собой K_ {3} на множестве вершин, указанных выше, с одной вершиной, специальной и с весами ребер.
  • Раздел - это граф с последовательным применением метокк центрам в конце каждого ребра (т. е. последовательно помечены для соблюдения количества общих вершин, указанных весом ребра, и что каждое подмножество в одном наборе вершин графа содержит вершину 1).Таким образом, данный график может представлять несколько разделов (через разные маркировки).(То, что вариантов не так много, как кажется, будет иметь смысл в секунду.)
  • Раздел не представляет интереса, если матрица, составленная из координат его центров, имеет нулевой определитель.

В случае трех измерений с четырьмя вершинами мы получаем следующие наборы (мы используем короткую проективную пару, потому что в этом примере достаточно видимости, чтобы не требовалось более простого правила отклонения маркировки вершин):
0: проективная пара {1,2,3,4}
1: {1}
1 ': {2}, {3}, {4}
2: {1,2}, {1,3}, {1,4}
2 ': проективные пары до 2 (пропущено)
3: проективные пары до 1' (опущено)
3 ': проективные пары до1 (опущено)

Ограничения метки:
{0-> x, x}
{0-> x ', x}
{1-> 1,1} - запрещено: центры не включаются дважды
{1-> 1 ', 0}
{1-> 2,1}
{2-> 2,1}
Другие весовые коэффициенты с этими вершинами графа невозможны.

График представляет собой инцидент K_ {3} в 0, следующие графики соответствуют правилам выбора графа:
A: {0-> 1,1}, {0-> 1 ', 1}, {1-> 1 ', 0}
B: {0-> 2,2}, {0-> 2,2}, {2-> 2,1}

A имеет только одну маркировку: {1}, {2}, {} и ваш треугольный интересный набор.Эта маркировка не имеет нулевого определителя.
B имеет только одну маркировку: {1,2}, {1,3}, {} и является вашим интересным квадратом.Эта маркировка не имеет нулевого определителя.

Преобразование в код оставлено читателю как упражнение (потому что я должен уйти на работу).

...