注:本文面向应用,参考了清风大大的资料以及司守奎老师的《数学建模算法与应用》,属作者的个人学习总结。
一.算法应用背景
当已知函数点非常少的时候,我们经常要模拟产生一些新的函数值来支撑后续数据分析。这就是插值算法的应用目的。*插值算法还可以用来实现短期预测,但我们往往使用拟合算法以及时间序列算法来实现预测。
二.插值问题的分类
插值问题一般分为一维插值问题和多维插值问题。
三.插值法
(一)数学定义
设函数f(x)在区间[a,b]上有定义,且已知在点a≤x0<x1<x2<······<xn≤b上的值分别为y0,y1,y2······,yn,若存在一简单函数P(xi)=yi(i=0,1,2···,n),则称P(x)是f(x)的插值函数,点x0,x1,x2···,xn称为插值节点,包含插值节点的区间[a,b]称为插值区间。而求P(x)的方法被称为插值法。*这里我们仅仅介绍简单概念,对推导过程不作说明。感兴趣请参考《数值计算方法》课程。
(二)分类
1分段插值:P(x)为分段多项式的插值方法;
2插值多项式:P(x)是次数不超过n的代数多项式的插值方法,也就是:
3三角插值:需要结合傅里叶变换,因此不常用。*非数学专业想学习傅里叶变换(主要是电子,电气,通信类)可以参考华中科技大学李红老师主讲的《复变函数与积分变换》,文末附有链接。
(三)建模中常用的插值方法
实际上会用到:拉格朗日插值法、牛顿插值法、分段三次埃尔米特插值法以及三次埃尔米特插值法等。前两种都存在龙格现象,而且并不可以全面呈现被插值函数的性态,因此不做介绍。(当然也是因为我功底不够,后期有机会细学的话再来介绍这部分内容)
1.分段三次埃尔米特插值法
2.三次样条插值
(四)基于分段三次埃尔米特插值法和三次样条插值法的matlab实现
1.一维角度
我们通过绘制y = 在[0,+2pi]上的插值来做练习。
% 分段三次埃尔米特插值pchip(x,y,new_x),x是已知的原样本点的横坐标,y是对应的纵坐标。new_x是指所插入的横坐标,p指对应的所插入点的纵坐标。
% 三次样条插值spline(x,y,new_x)
% legend(str1,str2,···),把str1,str2,······标注到图中
clear;clc
x = 0:1:2*pi;
y = sin(x);
new_x = 0:0.01:2*pi;
p1 = pchip(x,y,new_x);
p2 = spline(x,y,new_x);
figure;
plot(x,y,':*m')
figure;
plot(new_x,p1,':*b')
结果:



2.多维角度
先来一个简单点的:
% p1 = interpn(x1,x2,...xn,y,new_x1,new_x2...,new_xn,method)
% x1,x2,...xn是指原先样本点的横坐标,y是已知样本点的纵坐标;
% new_x1,new_x2...,new_xn则是指所插入的点的横坐标;
% method是要插值的方法,通常包括:'linear':线性插值
% 'cubic':三次插值
% 'spline':三次样条插值
% 'nearest':最邻近插值算法
clear;clc
x = -5:1:5;
y = x;
new_x = -5:0.5:5
p1 = interpn(x,y,new_x,'pchip'); %三次埃尔米特插值
figure;
plot(x,y,'*:')
figure;
plot(new_x,p1,'*:')
补充说明:1.为什么出现P(x)是次数不超过n的代数多项式?
答:对插值多项式而言,并非n越大误差越小。在高次插值过程中,会发生Runge(龙格现象):两端处波动极大,产生明显震荡。因此在不熟悉曲线运动趋势的前提下,不建议使用高次插值。
2.数学推导在哪里看?
几种插值算法对比_插值方式最优越的是-CSDN博客
线性插值、抛物插值、Lagrange插值 | Lagrange拉格朗日插值法(一)-CSDN博客
我一个学工科的,行行好别太为难我,请参考这两篇文章(反正我这个小趴菜做不出厉害的数学推导哈哈哈哈)
行至文末,感谢看完我这个小水货的文章。文章来源:https://www.toymoban.com/news/detail-821100.html
复变函数与积分变换 56集 李红 华中科技大学文章来源地址https://www.toymoban.com/news/detail-821100.html
到了这里,关于数学建模之插值算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!