数模3:插值算法(Interpolation Algorithm)

目录

1.简介

2.模型

(1)一维插值

        概念

        A.Lagrange Interpolation

        B.Piecewise Linear Interpolation

        C.Newton Interpolation

        D. Hermite Interpolation

        E.Cubic Spline Interpolation

(2)n维插值

3.代码

4.REFERENCE


1.简介

        在通常的数据处理时,会遇到现有的数据是极少的,不足以支撑分析的进行,或者数据出现错误或者明显不符合,这时就需要使用一些数学的方法,“模拟产生”一些新的但又比较靠谱的值来满 足需求,这就是插值的作用。


2.模型

(1)一维插值

        概念

        下图阐述了一般的插值法的概念与类别[1]:

        A.Lagrange Interpolation

\omega_{n+1}(x)=(x-x_0)(x-x_1)...(x-x_n)

L_n(x)=\sum_{k=0}^n y_k \frac{\omega_{n+1}(x)}{(x-x_k)\omega'_{n+1}(x_k)}

        在次数较低的时候,插值较为精准,但是随着次数上升,会出现Runge现象。高次插值会产生龙格现象,即在两端处波动极大,产生明显的震荡。在不熟悉曲线 运动趋势的前提下,不要轻易使用高次插值。

Runge phenomenon:

       

        B.Piecewise Linear Interpolation

        插值多项式次数过高可能精度提升不明显,摄入误差可能显著增加。因此,考虑分段插值。

f[x_{0},x_{1},\ldots,x_{k}]=\frac{f[x_{1},\ldots,x_{-1},x_{k}]-f[x_{0},x_{1},\ldots,x_{k-1}]}{x_{k}-x_{0}}

       

        C.Newton Interpolation

\begin{aligned} f\left(x\right)=& =f\left(x_0\right)+f\left[x_0,x_1\right]\left(x-x_0\right) \\ &+f[x_0,x_1,x_2]\left(x-x_0\right)\left(x-x_1\right)+\cdotp\cdotp\cdotp \\ &+f[x_0,x_1,\cdots,x_{n-2},x_{n-1}]\left(x-x_0\right)\left(x-x_1\right)\cdots\left(x-x_{n-3}\right)\left(x-x_{n-2}\right) \\ &+f\begin{bmatrix}x_0,x_1,\cdotp\cdotp\cdotp,x_{n-1},x_n\end{bmatrix}(x-x_0)\left(x-x_1\right)\cdotp\cdotp\cdotp\left(x-x_{n-2}\right)(x-x_{n-1}) \end{aligned}

        差商定义:

一阶差商:f[x_{0},x_{k}]=\frac{f(x_{k})-f(x_{0})}{x_{k}-x_{0}}

二阶差商:f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}

 k 阶差商:f[x_{0},x_{1},\ldots,x_{k}]=\frac{f[x_{1},\ldots,x_{-1},x_{k}]-f[x_{0},x_{1},\ldots,x_{k-1}]}{x_{k}-x_{0}}

对比 Newton Interpolation 和 Lagrange Interpolation:

        与拉格朗日插值法相比,牛顿插值法具有继承性(牛顿插值法每次插值只和前n项的值有关,每次只要在原函数上添加新的项,就可产生新的函数)。但是两者均存在龙格现象的 问题。

        上述两种插值仅要求插值多项式在插值节点处与被插函数有相等的函数值,而这种插值多项式却不能全面反映被插值函数的性态

        D. Hermite Interpolation

        一般插值要求:

\varphi(x_i)=y_i\quad(i=0,1,2,...n)

        更高的要求:

\begin{aligned}(1)\quad\varphi(x_i)&=y_i\quad(i=0,1,2,...n)\\(2)\quad\varphi(x_i)&=y_i\quad(i=0,1,2,...n)\end{aligned}

这个要求的本质是是曲线在节点曲度一致,光滑切合。

        具体原理参考[1]:

由于直接使用存在较高次的项,会出现龙格现象,实际使用的是分段三次Hermite Interpolation(PCHIP)。在Matlab里面由直接封装好的函数 pchip。

        E.Cubic Spline Interpolation

        具体定义见下图:

 在Matlab中有封装好的函数 spline。

         效果如下:

 具体使用哪个可以根据实际效果来选择。

(2)n维插值

        基本原理与上述的一维一致,只是将变量数目拓展到n维,Matlab中函数如下:

 注:在某种意义上,插值可以做简单的短期预测,但是局限性较大,不很推荐,建议使用灰色预测之类预测算法。


3.代码

%% pchip and spline
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(1);
plot(x,y,'o',new_x,p1,'r-.',new_x,p2,'b--')
legend('sample','pchip','spline','Location','SouthEast')  


%% n dim data interpolation
x = -pi:pi; y = sin(x); 
new_x = -pi:0.1:pi;
p = interpn (x, y, new_x, 'spline');
% Equivalent to p = spline(x, y, new_x);
figure(2);
plot(x, y, 'o', new_x, p, 'r-')

%& simple prediction(usually use  this method)
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(3);
plot(year, population,'o',2019:2021,p1,'r*-',2019:2021,p2,'bx-')
legend('sample','pchip','spline','Location','SouthEast')

4.REFERENCE

[1]刘春凤: 中国大学MOOC数值计算方法

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值