import numpy as np[br]import math[br]from scipy.optimize import curve_fit[br]import matplotlib.pyplot as plt[br][br]x = [1, 2, 2.5, 2.74, 2.9, 2.96, 3.09, 3.22, 3.39, 3.48, 3.53, 3.62, 3.68][br]y = [0, 0, 0.01, 0.01, 0.02, 0.03, 0.04, 0.06, 0.08, 0.1, 0.11, 0.13, 0.14] [br][br]def exponential_model(x, a, b, k, d):[br] return a * np.exp(-(x - b)**2/k ) + d[br][br]def exponential_decay_asymptote_jac(x, a, b, k,d):[br] return np.array([br] [np.exp((-(-b + x)**2) / k), [br] 2*a*np.exp((-(-b + x)**2) / k)*(-b + x) / k, [br] a*np.exp((-(-b + x)**2) / k)*(-b + x)**2 / k**2,[br] 0*x+1 ][br] ).T[br][br][br]## fit[br]res, pcov = curve_fit([br] f=exponential_model,[br] jac=exponential_decay_asymptote_jac,[br] xdata=x,[br] ydata=y,[br] p0=[0,5,5,0][br])[br][br]tres=res.astype(float)[br]print("{{a={0:.5f}, b={1:.5f}, k={2:.5f}, d={3:.5f}}}".format(*tres)) [br]print(pcov)[br][br]# Visualize the results[br]plt.scatter(x, y, label='Data')[br]plt.plot(x, exponential_model(x, *res), 'r-', label='Fit a * np.exp(-(x - b)**2/k ) + d')[br]plt.legend()[br]plt.show()[br][br][br]# partial derivatives of model[br]import sympy as sp[br]x,a,b,k,d = sp.symbols("x a b k d")[br]derivative = [sp.diff(a * sp.exp(-(x - b)**2/k ) + d,a),[br] sp.diff(a * sp.exp(-(x - b)**2/k ) + d,b),[br] sp.diff(a * sp.exp(-(x - b)**2/k ) + d,k),[br] sp.diff(a * sp.exp(-(x - b)**2/k ) + d,d)][br]print(derivative )