gpt4 book ai didi

python - 如何在 python 中使用 scipy.optimize 中的 leastsq 函数将直线和二次线拟合到数据集 x 和 y

转载 作者:太空狗 更新时间:2023-10-29 18:22:16 25 4
gpt4 key购买 nike

我如何使用 scipy.optimize 中的 leastsq 函数将直线和二次方程拟合到下面的数据集?我知道如何使用 polyfit 来做到这一点。但是我需要使用 leastsq 函数。

这里是 x 和 y 数据集:

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

有人可以帮帮我吗?

最佳答案

leastsq() 方法找到使误差函数最小化的参数集(yExperimental 和 yFit 之间的区别)。我使用一个元组来传递线性和二次拟合的参数和 lambda 函数。

leastsq 从第一次猜测开始(参数的初始元组)并尝试最小化误差函数。最后,如果 leastsq 成功,它会返回最适合数据的参数列表。 (我打印出来看到了)。我希望它有效最好的问候

from scipy.optimize import leastsq
import numpy as np
import matplotlib.pyplot as plt


def main():
# data provided
x=np.array([1.0,2.5,3.5,4.0,1.1,1.8,2.2,3.7])
y=np.array([6.008,15.722,27.130,33.772,5.257,9.549,11.098,28.828])
# here, create lambda functions for Line, Quadratic fit
# tpl is a tuple that contains the parameters of the fit
funcLine=lambda tpl,x : tpl[0]*x+tpl[1]
funcQuad=lambda tpl,x : tpl[0]*x**2+tpl[1]*x+tpl[2]
# func is going to be a placeholder for funcLine,funcQuad or whatever
# function we would like to fit
func=funcLine
# ErrorFunc is the diference between the func and the y "experimental" data
ErrorFunc=lambda tpl,x,y: func(tpl,x)-y
#tplInitial contains the "first guess" of the parameters
tplInitial1=(1.0,2.0)
# leastsq finds the set of parameters in the tuple tpl that minimizes
# ErrorFunc=yfit-yExperimental
tplFinal1,success=leastsq(ErrorFunc,tplInitial1[:],args=(x,y))
print " linear fit ",tplFinal1
xx1=np.linspace(x.min(),x.max(),50)
yy1=func(tplFinal1,xx1)
#------------------------------------------------
# now the quadratic fit
#-------------------------------------------------
func=funcQuad
tplInitial2=(1.0,2.0,3.0)

tplFinal2,success=leastsq(ErrorFunc,tplInitial2[:],args=(x,y))
print "quadratic fit" ,tplFinal2
xx2=xx1

yy2=func(tplFinal2,xx2)
plt.plot(xx1,yy1,'r-',x,y,'bo',xx2,yy2,'g-')
plt.show()

if __name__=="__main__":
main()

关于python - 如何在 python 中使用 scipy.optimize 中的 leastsq 函数将直线和二次线拟合到数据集 x 和 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19791581/

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