Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据的指数拟合有利于较小的值?_Python_Python 3.x - Fatal编程技术网

Python 数据的指数拟合有利于较小的值?

Python 数据的指数拟合有利于较小的值?,python,python-3.x,Python,Python 3.x,我试图对数据应用指数拟合,以确定值下降1/e的点。绘制时,拟合似乎倾向于较小的值,并且不能描述真实的关系 注意:Ising是另一个.py文件中的一个类,包含函数takeTimeStep和CalcMagnitision 期望tau_e的值更大这里的问题是什么?你在图形或数值方面有困难吗?如果您的值与预期值不同,这不是其他人需要解决的编程问题,请澄清您的问题如果您只是需要更改图表的大小,请查看@RachelGallen,抱歉,不清楚。这些值是正确的。我的问题是通过数据拟合的指数线(橙色)不是很有代

我试图对数据应用指数拟合,以确定值下降1/e的点。绘制时,拟合似乎倾向于较小的值,并且不能描述真实的关系

注意:Ising是另一个.py文件中的一个类,包含函数takeTimeStep和CalcMagnitision


期望tau_e的值更大

这里的问题是什么?你在图形或数值方面有困难吗?如果您的值与预期值不同,这不是其他人需要解决的编程问题,请澄清您的问题如果您只是需要更改图表的大小,请查看@RachelGallen,抱歉,不清楚。这些值是正确的。我的问题是通过数据拟合的指数线(橙色)不是很有代表性的数据。我正在试图找到我的数据(蓝色)下降到初始值的1/e的点,而从橙色拟合线获得的值并不代表真实值。@RachelGallen橙色线过早下降到零,他现在只看到了您的消息。在我看来,您的问题是由“longtime”变量设置为100引起的。乍一看,这就是定义轴的结束值,并防止它超出该值。您仍然可以使用此值作为长期值,但也可以使用matplot(简单)函数。希望这有帮助。让我知道你进展如何。这里有什么问题?你在图形或数值方面有困难吗?如果您的值与预期值不同,这不是其他人需要解决的编程问题,请澄清您的问题如果您只是需要更改图表的大小,请查看@RachelGallen,抱歉,不清楚。这些值是正确的。我的问题是通过数据拟合的指数线(橙色)不是很有代表性的数据。我正在试图找到我的数据(蓝色)下降到初始值的1/e的点,而从橙色拟合线获得的值并不代表真实值。@RachelGallen橙色线过早下降到零,他现在只看到了您的消息。在我看来,您的问题是由“longtime”变量设置为100引起的。乍一看,这就是定义轴的结束值,并防止它超出该值。您仍然可以使用此值作为长期值,但也可以使用matplot(简单)函数。希望这有帮助。让我知道你进展如何。
import numpy as np 
import matplotlib
matplotlib.use("TkAgg")  # need to set the TkAgg backend explicitly otherwise it introduced a low-level error
from matplotlib import pyplot as plt
import scipy as sc


def autoCorrelation(sample, longTime, temp, plotTau = False ):
# compute empirical autocovariance with lag tau averaged over time longTime

    sample.takeTimeStep(timesteps=1500)  # 1500 timesteps to let sample reach equilibrium
    M = np.zeros(longTime)
    for tau in range(longTime):
        M[tau] = sample.calcMagnetisation()
        sample.takeTimeStep()

    M_ave = np.average(M) #time - average
    M = (M - M_ave)

    autocorrelation = np.correlate(M, M, mode='full')
    autocorrelation /= autocorrelation.max() # normalise such that max autocorrelation is 1
    autocorrelationArray = autocorrelation[int(len(autocorrelation)/2):]
    x = np.arange(0, len(autocorrelationArray), 1)

    # apply exponential fit
    def exponenial(x, a, b):
        return a * np.exp(-b * x)
    popt, pcov = curve_fit(exponenial, x, np.absolute(autocorrelationArray)) # array, 2d array
    yy = exponenial(x, *popt)
    plt.plot(x, np.absolute(autocorrelationArray), 'o', x, yy)
    plt.title('Exponential Fit of Magnetisation Autocorrelation against Time for Temperature = ' + str(T) + ' J/k')
    plt.xlabel('Time / Number of Iterations ')
    plt.ylabel('Magnetisation Autocorrelation')
    plt.show()

    # prints tau_e value b from exponential a * np.exp(-b * x)
    print('tau_e is ' + str(1/popt[1])) # units converted to time steps by taking reciprocal






if __name__ == '__main__':

#plot autocorrelation against time
    longTime = 100
    temp = [1, 2, 2.3, 2.6, 3, 4]
    for T in temp:
        magnet = Ising(30, T)  # (N, temp)
        autoCorrelation(magnet, longTime, temp)