Skip to main content

插值与拟合

插值


方法简介


插值是一种预测方法,能够预测在一个未知函数的两点xx之间的函数值的估计值。也就是根据现有的点,估计其他点的函数值,因为函数未知,所以需要估计。

插值公式


  • 线性插值函数

顾名思义,利用两点之间的直线求得两点间的函数关系,再代入所求点的x值即可求解。线性插值就是想求一个幂次数不超过1的多项式。公式如下:

L1(x)=y0xx1x0x1+y1xx0x1x0L_1(x)=y_0\frac{x-x_1}{x_0-x_1}+y_1\frac{x-x_0}{x_1-x_0}
  • 抛物线插值函数

抛物线插值也可以理解为二次曲线插值函数公式,利用二次函数曲线进行预测三点之间的函数关系。求一个幂次数不超过2的多项式函数。公式如下:

L2(x)=y0(xx1)(xx2)(x0x1)(x0x2)+y1(xx0)(xx2)(x1x0)(x1x2)+y2(xx0)(xx1)(x2x0)(x2x1)L_2(x)=y_0\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}+y_1\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}+y_2\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}

Matlab求解插值问题


使用Interp1(x,y,cx,'method')函数即可。method可选方法有:linear,spline,cubic,nearest.

拟合


宗旨:有数据就能拟合

方法简介


拟合使用的主要方法是最小二乘法,最小二乘法是一种衡量预测值与真实值之间差距的一种方法,主要通过距离来进行衡量,这个叫最小二乘法准则。

最小二乘法是一种用于拟合的方法,具体做法为

类似于神经网络,通过预测一组权重数据,通过梯度下降和损失函数使得真实值与预测值之间的距离不断缩小

  • 先根据具体的散点确定一个大致的函数关系(可以是线性、二次、三次等)函数关系如下:
    f(x)=a1r1(x)+a2r2(x)+...+anrn(x)f(x)=a_1r_1(x)+a2r_2(x)+...+a_nr_n(x)
  • 根据这个函数关系设待定系数
  • 问题转化乘求解一组待定系数使得预测值与真实之间的距离最小,公式如下
    J(a1,a2,...,an)=i=1n(f(xi)yi)2J(a_1,a_2,...,a_n)=\sum^n_{i=1}(f(x_i)-y_i)^2
    其实就是回归问题,回归求解权重,最后拟合得到满足与原数据走势相同的曲线。 特别的,当rkr_k均取多项式的时候为多项式拟合方法。

Matlab求解


  • 线性最小二乘拟合

使用polyfit(x,y,m)函数即可实现,其中x=(x1,x2,...,xn),y=(y1,y2,...,yn),m=1,2...nx=(x_1,x_2,...,x_n),y=(y_1,y_2,...,y_n), m=1,2...n(拟合达到的最高幂次数)

  • 非线性最小二乘拟合

使用lsqcurvefit('func', x0, xdata, ydata, options, 'grad')即可,该方法不需要在定义func函数m文件的时候进行真实值与预测值的相减,直接写函数即可。

使用lsqnonlin('func', x0)即可,该方法需要提前使用预测值和真实值进行相减作为函数,即函数m文件里需要写Yf(X),X,Y均为向量Y-f(X),X,Y均为向量

问题求解


求解问题时,两者均可以使用,只要有数据就可以使用该方法,但是注意polyfit是要在f(x)f(x)为线性的情况下才能使用。但是有时候可以通过一些技巧把非线性转换为线性(取对数).

插值与拟合的区别


插值求解出来的函数需要经过所有的已知点,拟合不许用经过所有的已知点,只要图像的趋势一致即可。