我必须使用 scipy 的 minimumsq 函数找到 3 个参数,因为该过程在部分最小二乘拟合中有所描述。
这是我的代码:
def myFunc(t, Vs, Vi, k):
y = Vs * t - ((Vs - Vi) * (1 - np.exp(-k * t)) / k)
return y
x = np.array(temps, dtype='float64')
y = np.array(fluo, dtype='float64')
Vs, Vi, k = [2.8707e-11, 0.01241, 19765.39043]
def residuals(p, y, x):
Vs, Vi, k = p
err = y - myFunc(x, Vs, Vi, k)
return err
def peval(x, p):
return myFunc(x, p[0], p[1], p[2])
p0 = [2.8707e-11, 0.01241, 19765.39043]
plsq = leastsq(residuals, p0, args=(y, x))
print(plsq[0])
print(np.array([Vs, Vi, k]))
但我收到警告:
RuntimeWarning: overflow encountered in exp
我假设 exp 中产生的数字太大而无法放入float64
. 但我真的需要让它合身。有没有办法克服这个问题?