【发布时间】:2013-11-11 21:10:22
【问题描述】:
我有一组数据点(下面代码中的 x 和 y),我正在尝试通过我的点创建一条最适合的线性线。我正在使用scipy.optimize.curve_fit。我的代码产生一条线,但不是一条最合适的线。我尝试提供函数模型参数以用于我的渐变和截距,但每次它都会产生完全相同的线,不适合我的数据点。
蓝点是我的数据点,红线应该适合:
如果有人能指出我哪里出错了,我将非常感激:
import numpy as np
import matplotlib.pyplot as mpl
import scipy as sp
import scipy.optimize as opt
x=[1.0,2.5,3.5,4.0,1.1,1.8,2.2,3.7]
y=[6.008,15.722,27.130,33.772,5.257,9.549,11.098,28.828]
trialX = np.linspace(1.0,4.0,1000) #Trial values of x
def f(x,m,c): #Defining the function y(x)=(m*x)+c
return (x*m)+c
popt,pcov=opt.curve_fit(f,x,y) #Returning popt and pcov
ynew=f(trialX,*popt)
mpl.plot(x,y,'bo')
mpl.plot(trialX,ynew,'r-')
mpl.show()
【问题讨论】:
-
我自己设法解决了问题。 x 被定义为一个列表,而不是一个数组。我只是通过将 np.array 放在定义的 x 和 y 数组的前面来修复它。
-
我也得出了同样的结论李子,我应该先看到这条评论!下次发生这种情况时,请随时将其发布为您自己问题的答案并接受它。
-
请注意,这已被修补:github.com/scipy/scipy/issues/3037
标签: python optimization scipy curve-fitting