Jump to content

Rep:Mod:DMS3053-11

From ChemWiki
   from matplotlib import pylab as pl
   import numpy as np
   from scipy.interpolate import InterpolatedUnivariateSpline
   def extract_data(file):
       data_array = np.loadtxt(file)
       lattice_lengths = data_array[:,0]
       inverse_lengths = 1 / lattice_lengths
       curie_temps = data_array[:,1]
       return inverse_lengths, curie_temps
   
   def plotdata(file):
       file_data = extract_data(file)
       L_min = np.min(file_data[0])
       L_max = np.max(file_data[0])
       L_range = np.linspace(L_min, L_max, 1000) # Generates 1000 evenly spaced points between T_min and T_max
       L_range1 = np.linspace(0, L_max, 1000) # Range for extrapolation to y-axis
       fit = np.polyfit(file_data[0], file_data[1], 1)
       fitted_T_values = np.polyval(fit, L_range)
       extrapolation = InterpolatedUnivariateSpline(L_range, fitted_T_values, k=1) # Allows for extrapolation of the fit to find intercept accurately
       T_values = extrapolation(L_range1) # Calculates the extrapolated temperatures
       pl.ylabel("Temperature")
       pl.xlabel("1/(Lattice Length)")
       pl.ylim([2.2, 2.6])
       pl.plot(file_data[0], file_data[1], L_range1, T_values)
       pl.legend(['Data', 'Extrapolated linear fit'], loc='upper center', bbox_to_anchor=(0.5, 1.10),
             ncol=2)
       pl.show()
       print(T_values[L_range1 == 0]) # Prints the y-intercept of the graph