我正在尝试为该方程式生成方程式参数:

y = -log((a + bx)/(c + x))

我有一个x,y和a,b和c的样本数据集。

当我执行以下操作时:

from scipy.optimize import curve_fit
from scipy import log as log
from scipy import exp as exp
import numpy as np

#Should generate: a = 2.22726000005 , b = 0.1073, c = 2.68937000008

a=1
b=1e-6
c=1

yarr = np.array([0.31776,0.30324,0.28148,0.2651,0.24328,0.22144,0.19799,0.17431,0.14685,0.11521])
xarr = np.array([0.250,0.225,0.200,0.175,0.150,0.125,0.100,0.075,0.050,0.025])

def func(x, a, b, c):

    return (log(c+x)-log(a+(b*x)))

popt, pcov = curve_fit(func,  xarr, yarr, (a,b,c))

print "a = %s , b = %s, c = %s" % (popt[0], popt[1], popt[2])


这应该给我:

a = 2.22726000005,b = 0.1073,c = 2.68937000008

但是我得到的是:

a = 0.37366276487,b = 0.415297976794,c = 0.406353416622

曲线不错,但距离正确值不远。

我在这里阅读了几个类似的问题,但是没有一个解决方案对我有用。

有小费吗?

谢谢
莱米

最佳答案

我无法用提供的值和curve_fit产生的值很好地再现提供的数据,因此也许您需要提供有关该问题的更多信息:

In [48]: pylab.plot(xarr, yarr, label='data')
In [49]: pylab.plot(xarr,func(xarr, *popt), label='curve_fit')
In [50]: ap, bp, cp = 2.22726000005, 0.1073, 2.68937000008
In [51]: pylab.plot(xarr,func(xarr, ap,bp,cp), label='supplied a,b,c')
In [52]: pylab.legend()
In [53]: pylab.show()

关于python - Scipy.optimize.curvefit日志功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27722915/

10-12 16:54