使用scipy曲线拟合的Python拟合无法正常工作

使用scipy曲线拟合的Python拟合无法正常工作,python,matplotlib,scipy,curve-fitting,data-fitting,Python,Matplotlib,Scipy,Curve Fitting,Data Fitting,我似乎在将函数拟合到我的数据时遇到了问题。也许有人能帮我 数据: 功能:#也被称为蠕虫链模型,适用于对其感兴趣的人 def func(x,L,P): return (((1.381*10**(-2)) * 295.15)/P) * (1/(4*((1-x/L)**2)) +x/L -1/4) #Fitting function to data: #CurveFittingBlackMagic initialGuess = [50,1.0] popt, pcov = curve_

我似乎在将函数拟合到我的数据时遇到了问题。也许有人能帮我

数据:

功能:#也被称为蠕虫链模型,适用于对其感兴趣的人

def func(x,L,P): 
    return (((1.381*10**(-2)) * 295.15)/P) * (1/(4*((1-x/L)**2)) +x/L -1/4)

#Fitting function to data: 
#CurveFittingBlackMagic 
initialGuess = [50,1.0] 
popt, pcov = curve_fit(func,xRange,yRange, initialGuess ,maxfev=1000000000) 
print(popt) 
print(pcov) 
xFit = np.arange(0.0, 200, 0.01) 
plt.plot(xFit, func(xFit,*popt),'r', label = 'fit params: L=%5.3f, P=%5.3f'%tuple(popt))

plt.ylim(-20, 150) plt.xlim(-20, 200)

#Plotting Data plt.plot(xValues,yValues)

plt.show()
这就产生了图中所示的结果,这显然是胡说八道,但我不明白为什么。如果有人能指出我的错误,那就太棒了;)


对于感兴趣的人。将函数的泰勒展开式拟合到10阶确实有效,并且给出了足够好的函数近似值。

对于感兴趣的人来说。将函数的泰勒展开式拟合到第10阶确实有效,并给出了足够好的函数近似值。

通过检查,您的数据看起来像一个线性函数y(x)=ax+b。图上的蓝线。通过线性最小均方回归计算的系数:

考虑到高分散性,我们认为非线性模型是非常不确定的。计算非线性模型中的参数可能会导致不一致的结果


事实上,你的非线性函数可能在小范围内接近线性函数64通过检查,你的数据看起来像线性函数y(x)=ax+b。图上的蓝线。通过线性最小均方回归计算的系数:

考虑到高分散性,我们认为非线性模型是非常不确定的。计算非线性模型中的参数可能会导致不一致的结果


事实上,你的非线性函数很可能在小范围内接近线性函数。你可以考虑格式化你的问题,所以它实际上是清晰的。我会说你的初始猜测是错的。定义了发散点。看看你的数据的形状,我想它一定在右边。你把它放在左边。chi^2最小化永远不会把它推到另一边。(200,1)应该有效。@Johan.谢谢,但遗憾的是,更改np.arange不起作用work@mikuszefski:是的,由于我不知道参数,最初的猜测并不精确。数据应该在散度的左侧,因此(200,1)也不起作用。不过还是谢谢你。我会尝试泰勒这个该死的函数,看看我是否能得到一个相当好的近似值。我在这里合身了,看起来还不错。最终,我得到了类似(107,0.14)的拟合结果。这几乎与最初的猜测无关,只要我考虑格式化你的问题,那么它实际上是清晰的,我会说你最初的猜测是错的。定义了发散点。看看你的数据的形状,我想它一定在右边。你把它放在左边。chi^2最小化永远不会把它推到另一边。(200,1)应该有效。@Johan.谢谢,但遗憾的是,更改np.arange不起作用work@mikuszefski:是的,由于我不知道参数,最初的猜测并不精确。数据应该在散度的左侧,因此(200,1)也不起作用。不过还是谢谢你。我会尝试泰勒这个该死的函数,看看我是否能得到一个相当好的近似值。我在这里合身了,看起来还不错。最终,我得到了类似(107,0.14)的拟合结果。这几乎与最初的猜测无关,只要我稍微大一点,你有没有按照mikuszefski的建议尝试使用
initialGuess=[107,0.14]
?或者使用
initialGuess=[100,1]
哪个应该收敛到类似的值?是的,我将泰勒拟合的结果输入到percise拟合的起始值中,它工作了。Johan,也谢谢你的帮助。你有没有按照mikuszefski的建议尝试使用
initialGuess=[107,0.14]
?或者使用
initialGuess=[100,1]
哪个应该收敛到类似的值?是的,我将泰勒拟合的结果输入到percise拟合的起始值中,它工作了。约翰,也谢谢你的帮助。
def func(x,L,P): 
    return (((1.381*10**(-2)) * 295.15)/P) * (1/(4*((1-x/L)**2)) +x/L -1/4)

#Fitting function to data: 
#CurveFittingBlackMagic 
initialGuess = [50,1.0] 
popt, pcov = curve_fit(func,xRange,yRange, initialGuess ,maxfev=1000000000) 
print(popt) 
print(pcov) 
xFit = np.arange(0.0, 200, 0.01) 
plt.plot(xFit, func(xFit,*popt),'r', label = 'fit params: L=%5.3f, P=%5.3f'%tuple(popt))

plt.ylim(-20, 150) plt.xlim(-20, 200)

#Plotting Data plt.plot(xValues,yValues)

plt.show()