В настоящее время я работаю над статистической механикой и пытаюсь применить к ней некоторое программирование, поскольку они так хорошо сочетаются друг с другом! Я работаю над поиском функции разбиения для конечного числа частиц. Однако ... функция разбиения определяется как сумма суммы! Я думаю, мы могли бы написать это как список списка, так что мы бы использовали вложенные циклы for, но я просто не могу понять, как это правильно написать.
Z = \ sum_ {s_1} ^ {s_N} e ^ (s_1s_2 + ... + s_ (N-1) s_N) - функция разбиения.
![enter image description here](https://i.stack.imgur.com/Lz0JM.png)
возможные значения s_i: -1, + 1.
Эффективно модель Изинга (1D) представляет собой цепочку с N точками на ней, и каждая точка может иметь s_i = -1 или +1. Энергия системы зависит от значений s_i, и каждая возможная комбинация называется состоянием. полная сумма этих состояний называется Z, функция разбиения.
Итак, для цепочки длиной N = 5 (следовательно, 2 ^ 5 = 32 возможных состояния), как бы я рассчитал этот Z? У меня действительно нет никакого кода, чтобы показать, но я знаю из формулы, результат должен быть что-то вроде e ^ (+ 1 + 1 + 1 + 1 + 1) + e ^ (- 1 + 1 + 1 + 1 + 1) + ... + е ^ (- 1-1-1-1-1). Вопрос в том ... как же я могу это делать? Я генерирую множество возможных состояний:
import itertools
counting=0
for state in itertools.product([1,-1],repeat=5):
print(state)
counting+=1
print('the total possible number of states is',counting).
но как я могу использовать это, чтобы получить значение для Z?