0%

数模-插值与拟合

插值与拟合

概述

遇到大量的数据需要处理,而处理数据的关键就在于这些算法,例如数据拟合、参数估计、插值等数据处理算法。

基本概念

在实际中,常常要处理由实验或测量所得到的一些离散数据。插值与拟合方法就是要通过这些数据去确定某一类已知函数的参数或寻求某个近似函数,使所得到的近似函数与已知函数据有较高的拟合精度。如果要求这个近似函数(曲线或曲面)经过所已知的所有数据点,则称此类问题为插值问题;如果不要求近似函数通过所有数据点,而是要求它能较好地反映数据变化规律的近似函数的方法称为数据拟合。近似函数不一定通过所有数据点。

插值与拟合的区别和联系

联系

都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数的方法

区别

插值问题不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。数据拟合要求得到一个具体的近似函数的表达式。

插值的使用及求解

引言

当数据量不够,需要补充,且认定已有数据可信时,通常利用函数插值方法。

实际问题当中碰到的函数f(x)是各种各样的,有的表达式很复杂,有的甚至给不出数学的式子,只提供了一些离散数据,例如,某些点上的函数值和导数值。

插值方法

  1. 拉格朗日插值(lagrange插值)

  2. 分段线性插值

  3. Hermite

  4. 三次样条插值

1、2适合二维面插值;3、4适合三维空间插值;一维用可用最近邻插值/双线性内插/取平均

matlab中的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
% interp1(一维插值)
% yi:xi处的插值结果
% x,y:插值节点
% xi:被插值点
% 'method' 插值方法:
% 'nearest' 最邻近插值;
% 'linear' 线性插值;
% 'spline' 三次样条插值
% 'cubic' 立方插值
% 缺省时 分段线性插值
yi=interp1(x,y,xi,'method')

% interp2(二维)
z=interp2(x0,y0,z0,x,y,'method')
% z:被插值点的函数值
% x0,y0,z0:插值节点
% x,y:被插值点
% 'method':插值方法
% 'nearest' 最邻近插值
% 'linear' 双线性插值
% 'cubic' 双三次插值
% 缺省时 双线性插值

cz = griddata(x,y,z,cx,cy,'method')
% cz被插值点的函数值
% x,y,z 插值节点
% cx,cy 被插值点
% 'method'插值方法
% 'nearest' 最邻近插值
% 'linear' 双线性插值
% 'cubic' 双三次插值
% 'v4' MATLAB提供的插值方法
% 缺省时 双线性插值
% 要求cx取行向量,cy取列向量

interp3(三维)
intern(n维)

拟合

引言

对于情况较复杂的实际问题(因素不易化简,作用机理不详)可直接使用数据组建模,寻找简单的因果变量之间的数量关系,从而对未知的情形作预报。这样组建的模型为拟合模型。拟合模型的组建主要是处理好观测数据的误差,使用数学表达式从数量上近似因果变量之间的关系。拟合模型的组建是通过对有关变量的观测数据的观察、分析和选择恰当的数学表达方式得到的。

拟合模型的分类

  1. 直线拟合
  2. 曲线拟合
  3. 观察数据修匀

对于已给的一批实测数据,由于实测方法,不可避免地会产生随机干扰和误差.我们自然希望根据数据分布的总趋势去剔除观察数据中的偶然误差,这就是所谓的数据修匀(或称数据平滑)问题.

曲线拟合问题最常用的解法-线性最小二乘法

  1. 先选定一组函数\(r_1(x),r_2(x),...,r_m(x),m<n\),令

    \(f(x)=a_1r_1(x)+a_2r_2(x)+...+a_mr_m(x)\) (1)

    其中\(a_1,a_2,...,a_m\)为待定系数

  2. 确定\(a_1,a_2,...,a_m\)的准则(最小二乘准则):

    使n个点\((x_i,y_i)\)与曲线y=f(x)的距离\(\delta_i\)的平方和最小

    \[ J(a_1,a_2,...,a_m) = \sum_{i=1}^n\delta_i^2=\sum_{i=1}^n[f(x_i)-y_i]^2=\sum_{i=1}^n[\sum_{k=1}^ma_kr_k(x_i)-y_i]^2 \]

  3. 问题归结为,求\(a_1,a_2,...,a_m\)使\(J(a_1,a_2,...,a_m)\)最小

使用MATLAB作线性最小二乘拟合

  1. 作多项式\(f(x)=a_1x^m+...+a_mx+a_m+1\)拟合,可利用已有程序:

    1
    2
    3
    a=polyfit(x,y,m)
    % x,y 输入同长度的数组x,y
    % m 拟合多项式次数