【数模】插值和拟合问题


前言

插值与拟合是一种基本的数据分析手段


一、插值

  1. Lagrange插值法
    在节点给出节点基函数,然后做基函数的线性组合,组合系数为节点函数值的一种插值多项式
    在这里插入图片描述

  2. Newton插值法

龙格现象(Runge现象)

高次插值的Runge现象

插值多项式的次数越高,并不代表插值的精度越高
上述结论仅仅在插值多项式的次数超过7时,插值多项式会出现严重的振荡现象

避免Runge现象的常用方法

  • 分段低次插值
    将插值区间分成若干个小区间,在小区间内用低次(二次、三次)插值,如样条函数插值
    在这里插入图片描述

二、一维插值

命令格式

yi = interp1(x,y,xi,‘method’)
x,y为插值点,xi,yi为被插值点和插值结果,四者通常为向量
method:(插值方法)缺省为linear

  • nearest 最邻近插值
  • linear 线性插值
  • spline 三次样条插值——每个区域构建三次多项式
  • cubic 立方插值

matlab代码如下(示例):

x=0:224;
y=[12 9 9 10 18 24 28 27 25 20 18 15 13];
x1=13;
y1=interp1(x,y,x1,'spline');
xi=0:1/3600:24;
yi=interp1(x,y,xi,'spline');
plot(x,y,'*',xi,yi);

matlab中提供了专门用于样条函数插值及相关计算的工具箱Spline Toolbox。


三、二维插值

命令格式

zi=interp2(x,y,z,xi,yi,‘method’)

  • x,y,z为插值点,z为被插值函数在(x,y)处的值

  • xi,yi为被插值点,zi为输出的插值结果,可理解为插值函数在(xi,yi)处的值

  • x,y为向量,xi,yi为向量或矩阵,z和zi为矩阵

  • method:(默认双线性插值)
    nearest——最邻近插值
    linear——双线性插值
    spline——双三次样条插值
    cubic——双立方插值

  • plot3——空间曲线

  • mesh——空间曲面(网格图)

  • surf——空间曲面(表面图)

  • contour——等高线
    在这里插入图片描述


四、散乱点插值

在这里插入图片描述
在这里插入图片描述

matlab代码

x=[129 140 103.5 88 185.5 195 105.5 157.5 107.5 77 81 162 162 117.5];
y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z=[-4 -8 -6 -8 -6 -8 -8 -9 -9 -8 -8 -9 -4 -9];
[xi,yi]=meshgrid(75:0.5:200,-70:0.5:150);
zi=griddata(x,y,z,xi,yi,'cubic');
figure(1);
meshz(xi,yi,zi);
xlabel('X'),ylabel('Y'),zlabel('Z');
figure(2),contour(xi,yi,zi,[-5,-5],'b');
grid;
hold on;
plot(x,y,'+');
xlabel('X'),ylabel('Y');

hold on 表示多个图同时显示


五、拟合

用插值函数外推插值区间外的数据会产生较大误差,不宜用插值方法,应采取拟合方法
因为高次插值会出现Runge现象,使外推的数据出现巨大误差

拟合适用情形:

  • 小样本预测
  • 求导问题(求运动员运动速度:得到函数xy坐标,求导可得v)
  • etc

1.曲线拟合问题

根据离散数据求数据间近似函数关系的问题
拟合问题与插值问题的区别

  1. 插值函数过已知点,拟合函数不一定过已知点
  2. 插值主要用于求函数值,拟合的主要目的使求函数关系,从而进行预测等进一步的分析
  3. 某些特定问题既可用插值,也可用拟合

2.拟合的计算

需解决:

  1. 线型的选择——根据专业知识和散点图确定线型
  2. 线型中参数的计算——
    线性拟合的参数可采用最小二乘法计算
    非线性拟合的参数要采用Guass-Newton迭代法

3.matlab代码

多项式拟合
[a,S]=polyfit(x,y,n)
在这里插入图片描述
非线性拟合
[b,r]=polyfit(x,y,fun,b0,option)
在这里插入图片描述

x=1:16;
y=[4.00 6.40 8.00 8.80 9.22 9.50 9.70 9.86 10.00 10.20 10.32 10.42 10.50 10.55 10.58 10.60];
y1=@(b,t)b(1)*exp(-t/b(2))+b(3)*exp(-t/b(4))+b(5);
b0=[-1 1 -1 1 1];
a=nlinfit(x,y,y1,b0)
xp=1:0.1:16;
yp=y1(a,xp);
plot(x,y,'.k',xp,yp,'r'); 

ps:matlab编程进行拟合有较大不便
在这里插入图片描述
在这里插入图片描述


matlab拟合工具箱√

可进行更好更便捷的拟合
使用步骤:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值