#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
Верно