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