Metropolis X2X4.py
From Werner KRAUTH
(Difference between revisions)
Revision as of 22:25, 10 June 2024 Werner (Talk | contribs) ← Previous diff |
Revision as of 07:06, 11 June 2024 Werner (Talk | contribs) Next diff → |
||
Line 1: | Line 1: | ||
+ | ==Context== | ||
+ | This page is part of my [[BegRohu_Lectures_2024|2024 Beg Rohu Lectures]] on "The second Markov chain revolution" at the [https://www.ipht.fr/Meetings/BegRohu2024/index.html Summer School] "Concepts and Methods of Statistical Physics" (3 - 15 June 2024). | ||
+ | ==Python program== | ||
import math | import math | ||
Line 31: | Line 34: | ||
plt.legend(loc='upper right') | plt.legend(loc='upper right') | ||
plt.show() | plt.show() | ||
+ | |||
+ | ==Further information== | ||
+ | ==References== |
Revision as of 07:06, 11 June 2024
Contents |
Context
This page is part of my 2024 Beg Rohu Lectures on "The second Markov chain revolution" at the Summer School "Concepts and Methods of Statistical Physics" (3 - 15 June 2024).
Python program
import math import random import matplotlib.pyplot as plt def u(x): return x ** 2 / 2.0 + x ** 4 / 4.0 x = 0.0 delta = 0.1 data = [] n_samples = 10 ** 6 for i in range(n_samples): new_x = x + random.uniform(-delta, delta) delta_u = u(new_x) - u(x) if random.random() < math.exp(-delta_u): x = new_x data.append(x) plt.title('Metropolis algorithm, anharmonic oscillator' ) plt.xlabel('$x$') plt.ylabel('$\pi(x)$') plt.hist(data, bins=100, density=True,label='data') XValues = [] YValues = [] for i in range(-1000,1000): x = i / 400.0 XValues.append(x) YValues.append(math.exp(- u(x)) / 1.93525) plt.plot(XValues, YValues, label='theory') plt.legend(loc='upper right') plt.show()