【问题标题】:Standard Deviation Python Plotting标准偏差 Python 绘图
【发布时间】:2017-04-18 21:12:19
【问题描述】:

我需要一些快速帮助来绘制我得到的代码答案。我对此很陌生,尽管如此,我正在尝试计算计算答案的标准偏差,之后我需要将刚刚执行的标准偏差计算的新答案绘制成图表。问题是该图在执行计算之前出现,只是给出一个空图,然后允许运行代码。任何帮助将不胜感激。

from numpy import zeros
from random import choice, random
import math

def create_lattice(nx,ny):
    possibleSpins = (-1,1)
    lattice = zeros((nx,ny))
    for i in range(nx):
        for j in range(ny):
            lattice[i][j] = choice(possibleSpins)
    return lattice

def magnetization(nx, ny, lattice):
    magnet = 0.0
    for i in range(nx):
        for j in range(ny):
            magnet += (lattice[i][j]/(nx*ny))
    return magnet

def ising_model(nsweeps, nx, ny, Js):
    magnet = 0.0
    s_energy = 0.0
    e_energy = 0.0
    d_energy = 0.0
    spin = 0.0
    rand = 0.0
    good = 0.0
    bad = 0.0
    nostep = 0.0
    lattice = create_lattice(nx, ny)
    magnet = magnetization(nx, ny, lattice)
    energies = zeros((nx,ny))
    print(lattice)
    # Each sweep is a complete look at the lattice
    for sweeps in range(nsweeps):
        for i in range(nx):
            for j in range(ny):
                spin = lattice[i][j]
                s_energy = -1 * Js * spin * (lattice[(i-1)][j] + lattice[i][(j-1)] + lattice[i][(j+1)%ny] + lattice[(i+1)%nx][j])
                lattice[i][j] = -1 * spin
                e_energy = -1 * Js * lattice[i][j] * (lattice[(i-1)][j] + lattice[i][(j-1)] + lattice[i][(j+1)%ny] + lattice[(i+1)%nx][j])
                d_energy = e_energy - s_energy
                rand = random()
                if d_energy <= 0 :
                    good = good + 1
                    magnet += ((-2*spin)/(nx*ny))
                    answers.append(magnet)
                elif d_energy > 0 and rand <= math.exp(-1 * d_energy):
                    bad = bad + 1
                    magnet += ((-2*spin)/(nx*ny))
                    answers.append(magnet)
                else:
                    lattice[i][j] = spin
                    nostep = nostep + 1
                print(magnet)    
    print(lattice)
    print(good)
    print(bad)
    print(nostep)
    # energies array is
    return energies

answers = []
stdofmag = []
def standard_deviation():
    stdmag = statistics.stdev(answers)
    print(stdmag)
    stdofmag.append(stdmag)

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(stdofmag, 'r-', label = "Std of Magnetization")
title_temp = "Magnetization"
plt.title(title_temp, fontsize=12, fontweight='bold', color='green')
ax.legend(loc='best', ncol=1, fancybox=True, shadow=True)
plt.xlabel('Number of Iterations')
plt.ylabel('Answer') 
ax.grid(True)
plt.show(block=True)

忽略 x 和 y 标签,它们是虚拟变量。

【问题讨论】:

    标签: python numpy matplotlib plot


    【解决方案1】:

    您从未调用过standard_deviation 函数,因此当您将stdofmag=[] 传递给plot 时,它是一个空列表

    【讨论】:

      【解决方案2】:

      您的 stdofmag 变量是一个空列表,因此您没有绘制任何内容。您编写的脚本实际上并没有做任何工作,除了创建一个设置一些标签并显示它的图形。您需要实际调用您定义的函数才能填充列表。话虽如此,我可以看到许多其他错误,这些错误将阻止这些功能按您的预期工作。后退一步并确保每个功能都按照您的预期运行可能是一个好主意,然后再尝试将所有内容连接起来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-27
        • 2013-02-10
        • 2011-12-14
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多