Выполнение цикла в mathematica с пакетом sneg

#loops #wolfram-mathematica

#циклы #wolfram-mathematica

Вопрос:

У меня возникла проблема с выполнением цикла в Mathematica при использовании пакета SNEG (это для исчисления с фермионными операторами).

Вот небольшая часть моего кода:

 natord = {{cjdckd, 1, 2}, {cjdckd, 1, 3}, {cjdckd, 1, 4}, {cjdck, 1, 
    1}, {cjdck, 1, 2}, {cjdck, 1, 3}, {cjdck, 1, 4},
   {cjdckd, 2, 3}, {cjdckd, 2, 4}, {cjdck, 2, 1}, {cjdck, 2, 
    2}, {cjdck, 2, 3}, {cjdck, 2, 4}, {cjdckd, 3, 4}, {cjdck, 3, 
    1}, {cjdck, 3, 2}, {cjdck, 3, 3}, {cjdck, 3, 4}, {cjdck, 4, 
    1}, {cjdck, 4, 2}, {cjdck, 4, 3}, {cjdck, 4, 4}, {cjck, 1, 
    2}, {cjck, 1, 3}, {cjck, 1, 4}, {cjck, 2, 3}, {cjck, 2, 4}, {cjck,
     3, 4}};

Do[
 
 j = natord[[ind, 2]] // ToString;
 k = natord[[ind, 3]] // ToString;
 
 cjd = c[0, j];
 cj = c[1, j];
 
 ckd = c[0, k];
 ck = c[1, k];
 
 cjck = nc[cj, ck];
 cjdck = nc[cjd, ck];
 cjdckd = nc[cjd, ckd];
 
 korr = natord[[ind, 1]];
  

После этого следующий код генерирует список коэффициентов и одно единственное значение.
Список должен быть добавлен к списку M, поэтому в конце у меня есть матрица, и единственное значение будет в списке, поэтому я получаю вектор.
Когда я не выполняю цикл выполнения и просто говорю

 j="1";
k="2";
  

и

 korr=cjck;
  

это каким-то образом это сделает.
Как вы можете видеть в списке natord, у меня есть 28 случаев, которые я не хочу указывать в каждом явно, но создаю цикл, делающий это для меня.

Надеюсь, вы сможете мне помочь. Если вам нужно больше кода, скажите мне.

Приветствия

Ответ №1:

В вашем примере кода не обнаружено никаких проблем, с которыми вы можете столкнуться с Append или AppendTo .

 m = {};

Do[AppendTo[m, natord[[i]]], {i, Length[natord]}]

m == natord
  

Верно