Управление таблицами (или списками) в Mathematcia - PullRequest
0 голосов
/ 08 мая 2018

В научных целях (исследование кода) я использую Mathematica для перечисления всех периодических последовательностей некоторых линейных повторений. В качестве примера команда

Table[{Mod[i * 2^n + j * 4^n + k * 6^n, 7] },{i, 0, 5}, {j, 0, 5}, {k, 0, 5}, {n, 0, 5}]

позволяет перечислять все 216 различных периодических последовательностей линейных рекуррентных последовательностей в конечном поле порядка 7 (или мода 7) с характеристическим полиномом, корни которого равны 2,4 и 6. Первые пять создаваемых последовательностей:

{0, 0, 0, 0, 0, 0}, {1, 6, 1, 6, 1, 6}, {2, 5, 2, 5, 2, 5}, {3, 4, 3, 4, 3, 4}, {4, 3, 4, 3, 4, 3}, …

У меня два вопроса:

i) Первая последовательность получается, когда i=0,j=0,k=0;, вторая, когда i=0,j=0,k=1,, третья, когда i=0,j=0,k=2, и т. Д. Есть ли способ соединить эти числа с последовательностью, которую они генерируют, чтобы я узнал эти параметры? и, следовательно, чтобы иметь возможность позже (при необходимости) генерировать определенную последовательность? То есть мне бы хотелось, чтобы на выходе было что-то вроде этого

{{0, 0, 0, 0, 0, 0}, {0, 0, 0}},  {{1, 6, 1, 6, 1, 6}, {0, 0, 1}},  {{2, 5, 2, 5, 2, 5}, {0, 0, 2}} , etc.

ii) В приведенном выше примере (линейное повторение 3-го порядка и мод 7) количество полученных последовательностей (216) можно контролировать вручную; но это число растет очень быстро, когда линейное повторение имеет порядок выше 3, а поле имеет характеристику выше 7. И в этих случаях большинство создаваемых последовательностей меня не интересуют. Я думаю, что я мог бы выбросить, по крайней мере, 99% последовательностей, которые меня не интересуют, если бы я мог добавить инструкцию, которая читала бы выходные данные (полученные последовательности) и говорила бы: «Я хочу, чтобы последовательности были такими, чтобы продукты их element is 216 (скажем) »: из пяти вышеперечисленных последовательностей останется только {1, 6, 1, 6, 1, 6}, потому что 1x6x1x6x1x6 = 216 $; или «Я только хочу, чтобы последовательности таких элементов составляли 216 или 1000 (скажем)» из пяти вышеприведенных последовательностей {1, 6, 1, 6, 1, 6} и {2, 5, 2, 5, 2, 5}, потому что 1x6x1x6x1x6 = 216 и 2x5x2x5x2x 5 = 1000.

Возможно ли это сделать? Я попробовал некоторые манипуляции со списком и таблицами, но безуспешно.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 мая 2018

вот первая часть ..

Flatten[Table[{Table[Mod[i*2^n + j*4^n + k*6^n, 7], {n, 0, 5}], {i, j,
     k}}, {i, 0, 5}, {j, 0, 5}, {k, 0, 5}], 2]

{{{0, 0, 0, 0, 0, 0}, {0, 0, 0}}, {{1, 6, 1, 6, 1, 6}, {0, 0, 1}}, {{2, 5, 2, 5, 2, 5}, {0, 0, 2}}, {{3, 4, 3, 4, 3, 4}, {0, 0, 3}}, ...

лучший способ:

{Table[Mod[#.{2, 4, 6}^n, 7], {n, 0, 5}],#} & /@ Tuples[Range[0, 5], {3}]

пример поиска случаев с указанным продуктом:

Reap[Do[
        s = Table[Mod[i*2^n + j*4^n + k*6^n, 7], {n, 0, 5}]; 
        If[Times @@ s == 81, Sow[{s, {i, j, k}}]],
     {i, 0, 5}, {j, 0, 5}, {k, 0, 5}]][[2, 1]]

{{{3, 3, 1, 3, 3, 1}, {1, 2, 0}}, {{3, 1, 3, 3, 1,3}, {2, 1, 0}}, {{1, 3, 3, 1, 3, 3}, {4, 4, 0}}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...