【问题标题】:Fit y=ax in Python在 Python 中拟合 y=ax
【发布时间】:2017-03-30 21:36:58
【问题描述】:

我想把它设置为 y=ax。但是,代码不起作用。谁能帮帮我?

def func():
    return a * x

F1 = [0.55, 0.45, 0.50, 0.65, 0.75, 0.80]
r1 = [18.2, 18.4, 18.8, 19.5, 20.0, 20.2]

plt.plot(F1, r1)
popt = curve_fit(func, r1, F)  # I supose it only returns one value
plt.plot(r1, popt * r1, 'g--')

错误是:

ValueError: Unable to determine number of fit parameters.

【问题讨论】:

  • 这段代码中有很多错误,甚至很难开始回答这个问题。什么是F1,什么是r1??其中哪个是a,哪个应该是x?您想要曲线拟合的数据点到底是什么?
  • 曲线拟合不返回一个值。你检查过popt是什么样的吗?你应该使用 F1 而不是 F

标签: python matplotlib scipy


【解决方案1】:

类似的东西。运行代码看看curve_fit的结果是怎样的,仔细按照逻辑来。

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit as curve_fit

def f(x,a):
    return a*x

F1 = [ 0.55, 0.45, 0.50, 0.65, 0.75, 0.80 ]
r1 = [ 18.2, 18.4, 18.8, 19.5, 20.0, 20.2 ]

result = curve_fit(f, r1, F1)
print (result)

print ( 'F1 = %s * r1' % result[0][0] )

plt.plot(r1, F1, 'b.')

p = [ result[0][0] * _ for _ in r1  ]
plt.plot(r1, p, 'g--')
plt.show()

【讨论】:

    【解决方案2】:

    您的代码的主要问题是您没有对拟合函数的输入。 func 不知道ax 是什么,所以无法返回a*x

    另外,curve_fit 不仅返回 popt,还返回 pcov,因此您必须在返回值中捕获它

    这是您的代码的固定版本:

    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    
    # func needs x and a as inputs
    def func(x, a):
       return a*x
    
    F1=[0.55,0.45,0.50,0.65,0.75,0.80]
    r1=[18.2,18.4,18.8,19.5,20.0,20.2]
    
    plt.plot(r1,F1, 'bo')
    popt, pcov = curve_fit(func, r1, F1)
    plt.plot(r1,popt*r1,'g--')
    plt.show()
    

    注意:合身不是很好的原因是你的线必须经过原点。您可以使用a*x+b 获得更好的拟合效果,但这不是您所要求的。

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 1970-01-01
      • 2017-01-23
      • 2022-12-17
      • 2016-08-29
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多