2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Wolff algorithm и вычисление намагниченности
Сообщение17.02.2018, 17:58 
Здравствуйте, у меня стоит задача численного моделирования 2D Изинга при помощи алгоритма Вольффа. Вроде как написал правильный код, теперь нужно анализировать данные. И тут у меня возникает проблема. Вот пример двух значений среднего спина для температур выше ($\beta = 0.4$) и ниже ($\beta = 0.49$) критической для небольшой системы $20 \times 20 $:

(Оффтоп)

Изображение Изображение


Видно, что значение сильно флуктуирует. И вроде бы как это имеет смысл. Действительно, в кластерных алгоритмах спины переворчаиваются сразу большими блоками, причём (для алгоритма Вольффа) вероятность принятия новой конфигурации равна единице. Поэтому даже после установления равновесия большие кластеры будут то и дело переворачиваться. В таких случаях, насколько я знаю, используют разные приёмы вроде усреднения по блокам (block averaging). Но из-за $Z_2$ симметрии я не очень понимаю, как поступить здесь. По-хорошему мне бы получить два средних: $M_+$ и $M_-$. И тогда разумной оценкой было бы $M = \frac{M_+ - M_-}{2} $. Но как вычленить $M_+$ и $M_-$? Ну или как поступить по-другому?


UPDT: В общем, сделал пока что по-колхозному. Создал M_pos = 0, M_neg = 0, T_pos = 0, T_neg = 0. На каждом монте-карловском шаге после T_therm (задаю сам) смотрю на знак среднего значения спина M. Если положительный, то M_pos += M и T_pos++, а если отрицательный, то M_neg += M и T_neg++. Потом это дело усредняю M_pos = M_pos/T_pos, M_neg = M_neg/T_neg, а итоговое среднее считаю как M_avg =
(M_pos - M_neg)/2
. Разумеется, можно сделать ещё и оценку ошибки. Результаты выглядят в целом неплохо. Если кто-то может подсказать более разумный способ, буду рад услышать.

 
 
 [ 1 сообщение ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group