scipy.optimize.curve 您所在的位置:网站首页 函数拟合器 scipy.optimize.curve

scipy.optimize.curve

2023-03-07 18:23| 来源: 网络整理| 查看: 265

目录 参数介绍params:Returns ExampleExample2

scipy.optimize.curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, bounds=(- inf, inf), method=None, jac=None, *, full_output=False, **kwargs)

Use non-linear least squares to fit a function, f, to data.

参数介绍 params:

f : 方程式

模型函数,f(x, …). 它必须拿一个独立的变量作为第一个参数,并将参数作为单独的剩余参数去拟合。

xdata:自变量数据,测量数据的自变量。 对于具有 k 个预测变量的函数,通常应该是 M 长度序列或 (k,M) 形数组,但实际上可以是任何对象。。

ydata:因变量,相关数据,一个长度为 M 的数组 - 名义上是 f(xdata, …)。。

p0:参数的初始猜测(长度 N),如果为None,则初始值为1(如果可以使用自省来确定函数的参数数量,否则会引发 ValueError)。

bounds: array_like 的 2 元组,可选。

参数的下限和上限。默认为无边界。元组的每个元素必须是长度等于参数数量的数组,或者是标量(在这种情况下,所有参数的边界都相同)。

sigma:None 或者长度为 M 的序列,或者 M × \times ×M 的数组,是可选的

确定 ydata 中的不确定性。如果我们将残差定义为 r = ydata - f(xdata, *popt),那么 sigma 的解释取决于它的维数: 一维 sigma 应包含 ydata 中误差的标准差值。 在这种情况下,优化的函数是 chisq = sum((r / sigma) ** 2)。二维 sigma 应包含 ydata 中误差的协方差矩阵。 在这种情况下,优化后的函数是 chisq = r.T @ inv(sigma) @ r。

absolute_sigma

check_finite

bounds

method

jac

full_output

**kwargs

Returns poptpcovinfodictmesgier Example import matplotlib.pyplot as plt from scipy.optimize import curve_fit def func(x, a, b, c): return a * np.exp(-b * x) + c xdata = np.linspace(0, 4, 50) y = func(xdata, 2.5, 1.3, 0.5) rng = np.random.default_rng() y_noise = 0.2 * rng.normal(size=xdata.size) ydata = y + y_noise plt.plot(xdata, ydata, 'b-', label='data') popt, pcov = curve_fit(func, xdata, ydata) popt

array([2.56274217, 1.37268521, 0.47427475])

plt.plot(xdata, func(xdata, *popt), 'r-', label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt)) popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1., 0.5])) popt

array([2.43736712, 1. , 0.34463856])

plt.plot(xdata, func(xdata, *popt), 'g--', label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt)) plt.xlabel('x') plt.ylabel('y') plt.legend() plt.show()

Example2 from scipy.optimize import curve_fit import matplotlib.pyplot as plt import numpy as np import matplotlib matplotlib.use('TkAgg') matplotlib.rc("font", family='KaiTi') # 解决汉字不显示问题 def fund(x, a, b, c): return a*np.sin(2*np.pi/12*x+b)+c x = np.arange(1, 13) x2 = np.arange(1, 13, 0.1) y = [17, 19, 21, 28, 33, 38, 37, 37, 31, 23, 19, 18] fig, ax = plt.subplots() popt, pcov = curve_fit(fund, x, y) # popt数组中,三个值分别是待求参数a,b,c ax.plot(x, y, 'b-', label='original values') # ax.legend(r'original values') y2 = [fund(xx, popt[0], popt[1], popt[2]) for xx in x2] ax.plot(x2, y2, 'r--', label='polyfit values') ax.set_title('curve_fit方法拟合') ax.set_xlabel('x') ax.set_ylabel('y') ax.legend() print(popt) plt.show()



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有