为什么scipy.optimize.curve_fit不会产生最适合我积分的线?

Liz*_*ann 7 python optimization curve-fitting scipy

我有一组数据点,(下面的代码中的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()
Run Code Online (Sandbox Code Playgroud)

dab*_*lox 5

您也可以使用numpy.polyfit获得最合适的行:

import numpy as np
import matplotlib.pyplot as mpl

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

#get the first order coefficients 
fit = np.polyfit(x, y, 1)

#apply 
ynew = trialX * fit[0] + fit[1]                                              

mpl.plot(x,y,'bo')
mpl.plot(trialX,ynew,'r-')
mpl.show()
Run Code Online (Sandbox Code Playgroud)

这是输出:在此处输入图片说明

  • 我给了您另一种赞誉,这足以将图片添加到您的后续帖子中(并编辑该帖子)。欢迎使用Stack Overflow!您不需要添加诸如“希望有帮助”之类的内容,如果需要,您将获得投票,否则,您将获得赞成票或要求澄清的评论。我们在这里尽量保持答案的清洁! (2认同)