插值与拟合模型——插值算法

个人学习笔记,课程为数学建模清风付费课程

目录

一、模型介绍

1.1一维插值问题

1.2插值法的定义

1.3插值法的分类

1.4一般插值多项式原理

二、插值算法

2.1拉格朗日插值法

2.2龙格现象

2.3分段线性插值

2.4牛顿插值法

2.5两种插值法的对比

2.6埃尔米特(Hermite)插值

2.7分段三次埃尔米特插值

2.8三次样条插值

2.9插值结果对比

2.10n维数据的插值(了解)

2.11短期预测

三、建模实例


一、模型介绍

1.1一维插值问题

1.2插值法的定义

1.3插值法的分类

1.4一般插值多项式原理

【注1】只要n+1个节点互异,满足上述插值条件的多项式是唯一存在的。
【注2】如果不限制多项式的次数,插值多项式并不唯一。

二、插值算法

2.1拉格朗日插值法

在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫 路易斯 拉格朗日命名的一种多项式插值方法。在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。

 

2.2龙格现象

高次插值会产生 龙格现象 ,即在两端处波动极大 , 产生明显的震荡。在不熟悉曲线运动趋势的前提下,不要轻易使用高次插值。

次数越高精度未必显著提高;次数越高摄入误差可能显著提高

因此一般情况之下不使用拉格朗日插值法,而是引用下面的分段插值法。

2.3分段线性插值

2.4牛顿插值法

2.5两种插值法的对比

评价:
       与拉格朗日插值法相比,牛顿插值法的计算过程具有继承性。(牛顿插值法每次插值只和前n 项的值有关,这样每次只要在原来的函数上添加新的项,就能够产生新的函数)但是牛顿插值也存在龙格现象的问题。
缺陷:

       上面讲的两种插值仅仅要求插值多项式在插值节点处与被插函数有相等的函数值,而这种插值多项式却 不能全面反映被插值函数的性态 。然而在许多实际问题中,不仅要求插值函数与被插值函数在所有节 点处有相同的函数值,它也需要在一个或全部节点上插值多项式与被插函数有相同的低阶甚至高阶的导数值。对于这些情况,拉格朗日插值和牛顿插值都不能满足。

2.6埃尔米特(Hermite)插值

不但要求在节点上的函数值相等,而且还要求对应的导数值也相等 , 甚至要求高阶导数也相等,满足这种要求的插值多项式就是埃尔米特插值多项式。

直接使用 Hermite 插值得到的多项式次数较高,也存在着龙格现象,因此在实际应用中,往往使用分段三次 Hermite 插值多项式 (PCHIP)

2.7分段三次埃尔米特插值

% 分段三次埃尔米特插值
x = -pi:pi; y = sin(x); 
new_x = -pi:0.1:pi;
p = pchip(x,y,new_x);
figure(1); % 在同一个脚本文件里面,要想画多个图,需要给每个图编号,否则只会显示最后一个图哦~
plot(x, y, 'o', new_x, p, 'r-')

% plot函数用法:
% plot(x1,y1,x2,y2) 
% 线方式: - 实线 :点线 -. 虚点线 - - 波折线 
% 点方式: . 圆点  +加号  * 星号  x x形  o 小圆
% 颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青

2.8三次样条插值

三次样条多项式满足的条件:

% 三次样条插值和分段三次埃尔米特插值的对比
x = -pi:pi; 
y = sin(x); 
new_x = -pi:0.1:pi;
p1 = pchip(x,y,new_x);   %分段三次埃尔米特插值
p2 = spline(x,y,new_x);  %三次样条插值
figure(2);
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast')   %标注显示在东南方向
% 说明:
% LEGEND(string1,string2,string3, …)
% 分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。
% ‘Location’用来指定标注显示的位置

2.9插值结果对比

可以看出,三次样条生成的曲线更加光滑。在实际建模中,由于我们不知道数据的生成过程,因此这两种插值都可以使用。

2.10n维数据的插值(了解)

% n维数据的插值
x = -pi:pi; y = sin(x); 
new_x = -pi:0.1:pi;
p = interpn (x, y, new_x, 'spline');
% 等价于 p = spline(x, y, new_x);
figure(3);
plot(x, y, 'o', new_x, p, 'r-')

2.11短期预测

一个小技巧: 上面学的这些插值算法可用于短期预测哦 ~

注意:实际建模过程中,大家尽量不要用插值算法来预测,上面只是给大家举的一个小例子; 如果要预测,可以选择下一讲要学的拟合算法,也可以使用之后要学的专门用于预测的算法。
% 人口预测(注意:一般我们很少使用插值算法来预测数据,随着课程的深入,后面的章节会有更适合预测的算法供大家选择,例如灰色预测、拟合预测等)
population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
year = 2009:2018;
p1 = pchip(year, population, 2019:2021)  %分段三次埃尔米特插值预测
p2 = spline(year, population, 2019:2021) %三次样条插值预测
figure(4);
plot(year, population,'o',2019:2021,p1,'r*-',2019:2021,p2,'bx-')
legend('样本点','三次埃尔米特插值预测','三次样条插值预测','Location','SouthEast')

三、建模实例

MathorCup 第六届 A 题 淡水养殖池塘水华发生及池水净化处理
  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值