Ce code génère une distribution de probabilité psi_0_x_squared. Effectue ensuite une simulation de chaîne markov selon cette probabilité. Cette probabilité psi_0_x_squared est en fait la probabilité d'être à la position x pour le niveau d'énergie n = 0. Après avoir déplacé x 1000 fois selon cette probabilité, je veux générer un histogramme de la position x. (La fréquence de position)Comment puis-je modifier ce code pour afficher un histogramme avec des couleurs en fonction de la hauteur plutôt que par défaut 'cool' que j'ai choisi
''' Markov-chain Monte Carlo algorithm for a particle in a Gaussian potential,
using the Metropolis algorithm. '''
import math, matplotlib.pyplot as plt, random
def probability(x):
#wavefunction n=0 evaluated at position x
psi_0_x=math.exp(-x ** 2/2.0)/math.pi ** 0.25
#probability n=0 to be at position x
psi_0_x_squared= psi_0_x**2
return psi_0_x_squared
data_x=[0]
x = 0.0 #starts at position 0
delta = 0.5 #stepsize
for k in range(1000): #for this number of trials
x_new = x + random.uniform(-delta, delta) #I displace it a distance delta
if random.uniform(0.0, 1.0) < probability(x_new)/probability(x):
x = x_new
data_x.append(x)
#histogram
cm = plt.cm.get_cmap('cool')
n, bins, patches= plt.hist(data_x, bins=100, normed=True, color='k')
bin_centers = 0.5 * (bins[:-1] + bins[1:])
col = bin_centers - min(bin_centers)
col /= max(col)
for c, p in zip(col, patches):
plt.setp(p, 'facecolor', cm(c))
plt.show()