我目前正在尝试将数据拟合到此函数以提取“e/lambda”:
为此,我尝试(第一次)使用 python 拟合数据,并重新排列了拟合函数:
import matplotlib.pyplot as plt
import scipy.optimize as optimize
import numpy as np
# data
Io = np.array([0.3,0.5,1.4,2.9,3.8])
Is = np.array([2.7,2.7,2.7,2.7,2.7])
R = Io/Is
T = np.array([0.,50,70,80,85])
F = R/R[0]
plt.plot(T, F, 'ro', label="original data")
# curvefit
## a = np.exp(e/lambda)
def func(T, a):
return a * (((np.exp ((np.cos(T)-1)/(np.cos(T)))) - \
(np.exp ((1-np.cos(T))/((np.cos(T))**2)))) \
/ ((np.exp ((np.cos(T)-1)/(np.cos(T)))) - \
(np.exp ((1-np.cos(T))/((np.cos(T)))))))
popt, pcov = optimize.curve_fit(func, T, F, maxfev=100000)
t = np.linspace(0,85)
plt.plot(t, func(t, *popt), label="Fitted Curve")
plt.legend(loc='upper left')
plt.show()
但是,我收到此消息:“未找到最佳参数:函数调用次数已达到 maxfev = 100000”
这可能更像是一个数学问题,因为我已经成功地使用另一个函数尝试了这段代码:
def func(T, a, b, c):
return a + np.exp(b*T-c)
有谁知道是否可以使用它的“真实”形式来拟合这个函数?
谢谢!!