【发布时间】:2015-02-25 08:27:37
【问题描述】:
我正在尝试找到最适合该类型的四参数累积 Weibull 拟合:
f(x) = A*(1-exp(-((x-xo)/W)^s)
在 scipy.optimize 中使用 curve_fit 如下:
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from scipy.optimize import curve_fit
def weib(x, *p):
XSsat, Lo, W, s = p
return XSsat*(1-np.exp(-((x-Lo)/W)**s))
x_data = [10.1, 11.7, 14.3, 20.2, 32.1, 37.1, 45.5, 64.2]
y_data = [2.96e-6, 2.58e-5, 1.72e-4, 1.18e-3, 2.27e-2, 3.26e-2, 3.98e-2, 4.67e-2]
p0 = [5e-2, 0, 35, 3]
coeff, pcov = curve_fit(weib, x_data, y_data, p0=p0)
但是,我得到的输出是:
print coeff
[ nan nan nan nan]
这个问题似乎与没有为 x 定义函数有关
有什么想法吗?
【问题讨论】:
-
对不起,我的意思是说“问题似乎与没有为 x
-
在这里使用 numpy 1.9.0 和 scipy 0.14.0 产生好的值:pcoeff = [0.04575166 10.09999817 25.57229605 2.77544717]
-
确实,我更新到 scipy 0.15.1 并且可以正常工作。非常感谢您的帮助!!