【发布时间】:2021-07-19 22:47:55
【问题描述】:
我正在尝试使用 scipy.optimize.curve_fit 将曲线拟合到数组中。 这是我的代码:
def foubert(t,K,n):
return (1+((1-0.0620281576)**(1-n)-1)*np.exp(-(1-n)*K*(t-3)))**(1/(1-n))
foub_params, _ = scipy.optimize.curve_fit(foubert,phi[:,0],phi[:,1])
K_f,n_f = foub_params
我通过使用参数得到的最接近曲线的是 K = 0.06 和 n = 2.5,但是我的代码不断返回 n 作为 ~1 并给我一个运行时警告,因为有一个 1/(1- n) 方程中的项。由于 n 显然不是 1,我该如何解决这个问题?
这是错误信息:
RuntimeWarning: divide by zero encountered in double_scalars
return (1+((1-0.0620281576)**(1-n)-1)*np.exp(-(1-n)*K*(t-3)))**(1/(1-n))
【问题讨论】:
-
由于 n 为 1 或非常接近它,因此分母为 0,因此出现错误。我不确定你为什么认为 n 不是 1。打印 n 来查看。此外,您可能希望将等式分解为多个部分以进行调试。它更清晰,更容易查看问题所在。不过一旦没有问题,最终版本就可以这样了。
标签: python scipy curve-fitting scipy-optimize