, , , :
yValTest = VoigtConv(absPlot[:,0], result.best_values.get('A'), result.best_values.get('x0'), result.best_values.get('sigma'), result.best_values.get('gamma'),)
( )
yValTest = VoigtConv(absPlot[50:170, 0], result.best_values.get('A'), result.best_values.get('x0'), result.best_values.get('sigma'), result.best_values.get('gamma'),)
plt.plot(absPlot[50:170, 0], yValTest[50:170], linewidth=1.2, label='Voigt Fit Calc')
( )
plt.plot(absPlot[50:170, 0], yValTest, linewidth=1.2, label='Voigt Fit Calc')
, . , ( , ):

:
np.array_equal(result.best_fit, yValTest)
True, , .
( pandas, ):
import matplotlib.pyplot as plt
import numpy as np
from lmfit import Model
import pandas as pd
absPlot = pd.read_csv('lmfit_voigt.csv', index_col=None).values
def Gaussian(x, *p):
A, x0, sigma, zerolevel = p
return A*(np.sqrt(2*np.pi*sigma))*np.exp(-(x-x0)**2/(2*sigma**2))+zerolevel
def Lorentzian(x, *p):
A, x0, gamma, zerolevel = p
return A/np.pi*gamma/((x-x0)**2+gamma**2)+zerolevel
def VoigtConv(x, A, x0, sigma, gamma):
G = np.fft.fft(Gaussian(x,1,x0,sigma,0))
L = np.fft.fft(Lorentzian(x,1,x0,gamma,0))
V = A*np.real(np.fft.fftshift(np.fft.ifft(G*L)))
return V
vModel = Model(VoigtConv)
vModel.set_param_hint('A', value = 111, min=100, max=2*10**4)
vModel.set_param_hint('x0', value = 1.22*10**9, min=1.20*10**9, max=1.23*10**9)
vModel.set_param_hint('sigma', value = 4*10**8, min=3.2*10**8, max=4.4*10**8)
vModel.set_param_hint('gamma', value = 0, min=10**4, max=1.02*10**8)
result = vModel.fit(absPlot[50:170,1], x=absPlot[50:170,0], method='nelder')
yValTest = VoigtConv(absPlot[50:170, 0], result.best_values.get('A'), result.best_values.get('x0'), result.best_values.get('sigma'), result.best_values.get('gamma'),)
plt.figure(1)
plt.plot(absPlot[50:170, 0], absPlot[50:170, 1], '.k', label='Measured Data')
plt.plot(absPlot[50:170, 0], result.best_fit, linewidth=1.2, label='Voigt Fit')
plt.plot(absPlot[50:170, 0], yValTest, linewidth=1.2, label='Voigt Fit Calc')
legend = plt.legend(loc='upper right', fontsize=14)
plt.show()