插值与拟合

我们经常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,例如数据拟合、参数估计、插值等数据处理算法。此类问题在MATLAB中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。
数据拟合在很多赛题中有应用,与图形处理有关的问题很多与插值和拟合有关系,例如98年美国赛A题,生物组织切片的三维插值处理,94年A题逢山开路,山体海拔高度的插值计算,2003年吵的沸沸扬扬的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理, 2005年的雨量预报的评价的插值计算。2001年的公交车调度拟合问题,2003年的饮酒驾车拟合问题。

小案例——地区雨量的获得

降水插值python克里金_插值


我们在不同的经纬度(有限的测试点)测出了不同的降雨量,用不同颜色的点表示,通过这些降雨量,我们要插值出一个覆盖整个空间的降雨量图。

1. 插值的基本原理

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

2. 拟合的基本原理

如果不要求近似函数通过所有数据点,而是要求它能较好地反映数据变化规律的近似函数的方法称为数据拟合。(必须有函数表达式) 近似函数不一定(曲线或曲面)通过所有的数据点。

3. 插值和拟合的关系

1、联系
都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数的方法。
2、区别
插值问题不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。数据拟合要求得到一个具体的近似函数的表达式。

4. 插值的MATLAB实现

4.1 引言
  • 当数据量不够,需要补充,且认定已有数据可信时,通常利用函数插值方法。
  • 实际问题当中碰到的函数 f (x) 是各种各样的,有的表达式很复杂,有的甚至给不出数学的式子,只提供了一些离散数据,警如,某些点上的函数值和导数值。
4.2 插值方法

选用不同类型的插值函数,逼近的效果就不同,一般有:

(1)最近邻算法插值(一维插值)
(2)拉格朗日插值算法(一维插值)
(3)双线性内插算法(二维插值)
(4)分段线性插值(二维插值)
(5)三次样条插值(二维插值)
(6)克里金插值(地理学)
(7)反距离权重插值算法(地理学)

4.3 MATLAB实现插值

Matlab 实现:实现分段线性插值不需要编制函数程序,它自身提供了内部的功能函数
interp1(一维插值)
interp2(二维)
interp3(三维)
intern(n维)

一维

降水插值python克里金_降水插值python克里金_02

  • 例:从1点12点的11小时内,每隔1小时测量一次温度,测得的温度的数值依次为:5,8,9,15,25,29,31,30,22,25,27,24.试估计每隔1/10小时的温度值
hours=1:12;
temps=[5 8 9 15 25 29 31 30 22 25 27 24];
h=1:0.1:12;
t=interp1(hours,temps,h,'spline'); 
plot(hours,temps,'+',h,t,hours,temps,'r:')     %作图
xlabel('Hour'),ylabel('Degrees Celsius’)
  • 例 已知飞机下轮廓线上数据如下,求x每改变0.1时的y值.
二维插值

降水插值python克里金_插值与拟合_03

  • 例:测得平板表面3×5网格点处的温度分别为:
    82 81 80 82 84
    79 63 61 65 81
    84 84 82 85 86
  • 试作出平板表面的温度分布曲面z=f(x,y)的图形。

1.先在三维坐标画出原始数据,画出粗糙的温度分布曲线图

x=1:5;
y=1:3;
temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
mesh(x,y,temps)
  1. 以平滑数据,在 x、y方向上每隔0.2个单位的地方进行插值.
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi',yi,'cubic');
mesh(xi,yi,zi)
  • 例 在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)×(-50,150)里的哪些地方船要避免进入
  1. 输入插值基点数据
  2. 在矩形区域(75,200)×(-50,150)进行插值。
  3. 作海底曲面图
  4. 作出水深小于5的海域范围,即z=5的等高线.
%程序一:插值并作海底曲面图
 x  =[129.0  140.0  103.5  88.0  185.5  195.0  105.5 157.5  107.5  77.0  81.0  162.0  162.0  117.5 ];
y =[ 7.5  141.5  23.0  147.0  22.5  137.5  85.5      -6.5  -81  3.0  56.5  -66.5  84.0  -33.5 ];
z =[ 4  8  6  8  6  8  8  9  9  8  8  9  4  9 ];
x1=75:1:200;
y1=-50:1:150;
[x1,y1]=meshgrid(x1,y1);
z1=griddata(x,y,z,x1,y1,'v4');
meshc(x1,y1,z1)

降水插值python克里金_降水插值python克里金_04

%程序二:插值并作出水深小于5的海域范围。
x1=75:1:200;
y1=-50:1:150;
[x1,y1]=meshgrid(x1,y1);
z1=griddata(x,y,z,x1,y1,'v4');  %插值
z1(z1>=5)=nan;   %将水深大于5的置为nan,这样绘图就不会显示出来
meshc(x1,y1,z1)

降水插值python克里金_数学建模_05

5. 拟合的MATLAB实现

5.1 引言

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

5.2 拟合模型的分类
5.2.2 曲线拟合
5.2.3 观察数据修匀

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

  • 引例1
  • 引例2
  • 已知一组(二维)数据,即平面上 n个点(xi,yi) i=1,…,n, 寻求一个函数(曲线)y=f(x), 使 f(x) 在某种准则下与所有数据点最为接近,即曲线拟合得最好
数学方法
  • 使得最小二乘法形成的误差方程最小即可