拟合:给定\(n\)个数据点,求一\(f(x)\)使其与数据点最“接近”,即: \[ J=\sum_{i=1}^n(fx_i-y_i)^2 \] 最小,称为最小二乘拟合。
往往需要提前指定\(f(x)\)的类型,常用的有某次多项式、双曲函数、指数函数等
scipy.optimize.curve_fit
可以实现任意类型函数的拟合
用法:
curve_fit(f, xdata, ydata, p0=None)
f
为一函数:f(x,...)
,x
为自变量,后面的参数全为拟合函数的待定参数xdata
和ydata
是数据点的坐标向量p0
为待定参数的初值向量- D维情形,x是D维向量,
xdata
是D维向量构成的序列,p0同
返回二元组(popt,pcov)
:
popt
:一维数组,表示拟合函数的参数pcov
:二维阵列,popt
的估计协方差。对角线提供参数估计的方差。
示例:
用二次多项式拟合一元函数
1 | import numpy as np |
输出:
1 | a=-9.810839009366013, b=20.129292913034863, c=-0.03167107877459929 |
对曲面\(z=e^{-\frac{(x-\mu_1)^2+(y-\mu_2)^2}{2\sigma^2}}\)添加噪声,再进行拟合,其中\(\mu_1=1,\mu_2=2,\sigma=3\)
1 | import numpy as np |
输出:
1 | u1=1.0055785483402968, u2=2.002582704331591, sgm=3.0134682873777496 |