gpt4 book ai didi

python - 使用 curve_fitting 的具有常数因子的幂律

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:44 26 4
gpt4 key购买 nike

我想使用具有常数因子的幂律拟合我的 x 和 y 数据。我的幂律模型是 y(r) = F0 + F*(r)**alpha,其中 F0 是常数。我的代码是,

x = [0.015000000000000001, 0.024999999999999998, 0.034999999999999996, 0.044999999999999998, 0.055, 0.065000000000000002, 0.075000000000000011, 0.085000000000000006, 0.094999999999999987, 0.125, 0.17500000000000002, 0.22500000000000003, 0.27500000000000002]

y= [5.6283727993522774, 4.6240796612752799, 3.7366642904247769, 3.0668203445969828, 2.5751865553847577, 2.0815063796430979, 1.7152655187581032, 1.4686235817532258, 1.2501921057958358, 0.80178306738561222, 0.43372429238424598, 0.26012305284446235, 0.19396186239328625]


def func(x,m,c,c0):
return c0 + x**m * c

coeff,var=curve_fit(func,x,y)

print coeff


Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/scipy/optimize/minpack.py", line 511, in curve_fit
raise RuntimeError(msg)
RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.

然后我更改了 maxfev=2000 然后它给了我错误的系数值。如果我改变,我的斜率 m 到 (-m) 在 func 那么它给了我正确的答案,但我的斜率将是负数。有什么办法可以克服这个问题吗?

最佳答案

问题是 curve_fit 以参数的默认猜测开始,这些参数太差(即,它全部从 1 开始)。

相反,使用您对数据的了解做出非常粗略的猜测:至少,您知道 m 必须为负数(因为它是幂律)。因此,请尝试从 -1 开始 m。 (您可以在 0 开始截距项,在 1 开始斜率项,因为这些都是合理的默认值)。

def func(x,m,c,c0):
return c0 + x**m * c

coeff,var=curve_fit(func,x,y, p0=[-1, 1, 0])

这会给你正确的输出:

[-0.34815029  2.16546037 -3.4650323 ]

(请注意,您可以使用 0-9 之间的任何数字开始 m,它仍然会收敛到这个结果)。

关于python - 使用 curve_fitting 的具有常数因子的幂律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com