数学建模之插值算法

注:本文面向应用,参考了清风大大的资料以及司守奎老师的《数学建模算法与应用》,属作者的个人学习总结。

一.算法应用背景

当已知函数点非常少的时候,我们经常要模拟产生一些新的函数值来支撑后续数据分析。这就是插值算法的应用目的。*插值算法还可以用来实现短期预测,但我们往往使用拟合算法以及时间序列算法来实现预测。

二.插值问题的分类

插值问题一般分为一维插值问题和多维插值问题。

三.插值法

(一)数学定义

设函数f(x)在区间[a,b]上有定义,且已知在点a≤x0

(二)分类

1分段插值:P(x)为分段多项式的插值方法;

2插值多项式:P(x)是次数不超过n的代数多项式的插值方法,也就是:

3三角插值:需要结合傅里叶变换,因此不常用。*非数学专业想学习傅里叶变换(主要是电子,电气,通信类)可以参考华中科技大学李红老师主讲的《复变函数与积分变换》,文末附有链接。

(三)建模中常用的插值方法

实际上会用到:拉格朗日插值法、牛顿插值法、分段三次埃尔米特插值法以及三次埃尔米特插值法等。前两种都存在龙格现象,而且并不可以全面呈现被插值函数的性态,因此不做介绍。(当然也是因为我功底不够,后期有机会细学的话再来介绍这部分内容)

1.分段三次埃尔米特插值法

2.三次样条插值

(四)基于分段三次埃尔米特插值法和三次样条插值法的matlab实现

1.一维角度

我们通过绘制y = \sin x在[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')

结果:

数学建模之插值算法_第1张图片 插值前的sin函数图像 数学建模之插值算法_第2张图片 插值后的sin函数图像

数学建模之插值算法_第3张图片 放大后的图像

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,'*:')

数学建模之插值算法_第4张图片

数学建模之插值算法_第5张图片

补充说明:1.为什么出现P(x)是次数不超过n的代数多项式?

答:对插值多项式而言,并非n越大误差越小。在高次插值过程中,会发生Runge(龙格现象):两端处波动极大,产生明显震荡。因此在不熟悉曲线运动趋势的前提下,不建议使用高次插值。

2.数学推导在哪里看?

几种插值算法对比_插值方式最优越的是-CSDN博客

线性插值、抛物插值、Lagrange插值 | Lagrange拉格朗日插值法(一)-CSDN博客

我一个学工科的,行行好别太为难我,请参考这两篇文章(反正我这个小趴菜做不出厉害的数学推导哈哈哈哈)

行至文末,感谢看完我这个小水货的文章。

复变函数与积分变换 56集 李红 华中科技大学

你可能感兴趣的:(数学建模,数学建模,算法)