目录
1.插值法的概念
简单的讲,就是根据这个已知的几个点坐标,求解出来一个函数的解析式,这个函数叫做插值函数,求解这个插值函数的方法就是插值法;
2.拉格朗日插值&牛顿插值
这两个都是经典的插值算法,我们在学习这个数值分析课程的时候,讲解到这个插值算法的时候,一般都会介绍这个拉格朗日和牛顿插值,这个里面有这个差分,差商的相关概念,以及这个一阶差商,二阶差商等等这些,这个都是概念和计算,我们求解都会用到;
但是由于这两个插值方法存在龙格现象:在两端的波动比较大,会产生明显的震荡,因此数学建模的时候基本上不会用到,因此我在这里就不进行说明;
实际上,我们在数学建模里面使用的是这个三次埃尔米特插值和三次样条插值,这两个也是我们接下来会重点介绍的;
3.埃尔米特插值
直接使用这个埃尔米特插值得到的这个多项式的次数会很高,存在这个龙格现象,因此一般使用的都是三次埃尔米特插值;
三次埃尔米特插值直接调用matlab里面的函数即可:
这个里面需要注意的就是这个pchip函数就是去进行三次埃尔米特插值函数求解的工具包,这个函数有三个参数,第一个参数就是我们的这个x变化范围,第二个就是y的变化范围,第三个就是需要我们进行求解的这个插入处的横坐标;
调用这个plot函数进行绘图的时候,这个里面的参数也是分为两个部分进行分析的:
第一部分前面的三个就是x,y和对应的这个绘图说明,这个实际上绘制的是几个点,因为没有指定步长的时候,这个里面的步长就是1,在这个区间里面,会选择很少一部分的数据;
第二个就是新的x,我们的pchip函数的返回值,和这个新的预测得到的y,因为这个pchip就是根据这个新的x得到的y,所以这个p代表的就是根据这个new_x得到的y值;
4.三次样条插值
我们直接上题,还是上面的这个类似于正弦函数图像的绘制,我们使用两个方法,查看一下两个插值算法的区别,以及这个精确性;
我们通过观察就可以直观的发现,这个三次样条插值似乎更加接近这个真实的正弦sin函数图像;
% 三次样条插值和分段三次埃尔米特插值的对比
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’用来指定标注显示的位置
5.使用上面的方法解决短期预测问题
根据最近10年的人口数据,预测未来的1-2年的人口数量;
%人口的具体数据作为纵坐标
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的说明,否则就会覆盖;
figure(4);
plot(year, population,'o',2019:2021,p1,'r*-',2019:2021,p2,'bx-')
%这个里面的两个英文单词显示的是这个图例的显示位置
legend('样本点','三次埃尔米特插值预测','三次样条插值预测','Location','SouthEast')
6.插值和拟合的区别
上面的这个插值就是找出来一个函数的表达式曲线,让这个曲线经过这个已知的样本点,这个函数的表达式曲线是经过每一个点的;
拟合的思想就是如果这个样本点的个数很多的话,这个表达式的次数很高,这个就会产生龙格现象,因此拟合函数不会经过所有的样本点,而是找到一条曲线,让这个曲线几乎接近所有的样本点,即使有误差也会让这个误差控制的很小;
7.一个拟合的案例介绍
下面这个很多的样本点的数据,我们根据这个现有的样本点去求解出来一个拟合曲线,这个就是我们学习的最小二乘法的思想;
我们导入这个数据,把这个所有的已知的样本点在这个图形上面展示出来,然后通过观察进行这个拟合曲线的求解;
我们观察发现这个可以使用一次y=kx+b函数进行拟合,这个时候我们就需要求求解这个表达式;
上面这个就是对于最小二乘法的几何解释,我们不使用这个绝对值的定义,因为这个绝对值不方便我们继续求导,不使用3次方,因为这个误差的计算,如果是3次方的话这个正负就会被抵消掉,因为有的样本点是在我们的拟合曲线的上面,有的是在下面,使用3次方就会让这个正负抵消掉;
我们也不会使用4次方,因为如果这个样本点里面有极端的异常点,这个点和我们的对应的你个拟合曲线上面的点差很远,这个时候计算四次方就会增大这个偶然的误差,对于我们的最后结果造成干扰;
综上所述,我们使用这个样本点和拟合点的插值平方和进行拟合;
8.matlab求解最小二乘
代码说明
- load进行的是这个已知的数据的导入;
- k,b就是根据这个公式进行写的,里面的这个sum是进行的求和的函数,注意的是这个里面要使用点乘运算(向量之间的运算);
- hold on是在原来的基础上面绘制:原来的基础就是这个每一个样本点,因为我们的文件里面先绘制这些样本点,再去绘制这个拟合的曲线,因此使用hold on,意思就是在这个样本点基础上绘制曲线;
- grid on显示网格线,方便我们查看这个样本点和我们实际的拟合曲线的对应的点的误差大小;
- 我们想要把这个拟合曲线画出来,使用这个fplot函数,这个f就是我们的函数解析式,前面的@这个这个里面的x表示这个解析式里面的x是我们研究的变量;
- fplot里面的第一个参数就是我们的f解析式,第二个参数表示这个绘制的拟合曲线的范围,是在2.5-7这个范围进行绘制的;
- 最后一行是对于这个图例的内容和方向的说明;
9.如何评价拟合的好坏
这个里面有拟合优度,误差平方和,回归平方和等概念,其中这个拟合优度仅仅对于线性函数适用,不可随意使用,下面写出来了这个拟合优度和SSE和SST的关系:
上面说了这个拟合优度是对于这个线性函数使用的,这个线性函数不是我们简单认为的y=kx+b这样的,我们认为的这个叫做对于变量的线性,还有这个对于参数的现象,我们的这个拟合优度对于线性(线性于参数)函数适用,下面有这个具体的说明和实例:
案例说明:这个下面的案例里面虽然这个x有2次方的现象,但是这个参数是线性的,参数就是这个β1这样的,下面的那两个非线性是因为a,b参数不是线性(不能乘积和组合)
代码说明 拟合优度代码:就是带入计算,y_hat就是我们公式里面的yi,这个里面的y就是公式里面的y带上尖括号的,表示的是这个对应的曲线上面的拟合值;