数学建模之插值算法

插值算法

数学建模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有的时候现有的数据是极少的,不足以分析支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生”一些新的但又比较靠谱的值来满足需求,这就是插值算法的作用。

一维插值问题

一维插值问题就是平面上的点 ( x i , y i ) ( i = 0 , 1 , 2 , . . . , n ) (x_i,y_i)(i=0,1,2,...,n) (xi,yi)(i=0,1,2,...,n),多维插值问题为 ( x 1 , x 2 , . . . x n ) (x_1,x_2,...x_n) (x1,x2,...xn)
一维插值问题如下:已经有 n + 1 n+1 n+1个节点 ( x i , y i ) ( i = 0 , 1 , 2 , . . . , n ) (x_i,y_i)(i=0,1,2,...,n) (xi,yi)(i=0,1,2,...,n),其中 x i x_i xi互不相同,不妨假设 a = x 0 < x 1 < x 2 < . . . < x n = b a=x_0<x_1<x_2<...<x_n=b a=x0<x1<x2<...<xn=b,求任意一插值点 x ∗ x^* x(≠ x i x_i xi)处的插值 y ∗ y^* y
在这里插入图片描述
思路:构造函数 y = f ( x ) y=f(x) y=f(x),使得
f ( x ) f(x) f(x)过所有节点,求 f ( x ∗ ) f(x^*) f(x)即可得到 y ∗ y^* y
插值函数的一般定义
① 若 P ( x ) 是 次 数 不 超 过 n 的 代 数 多 项 式 , 即 ① 若P(x)是次数不超过n的代数多项式,即 P(x)n
p ( x ) = a 0 + a 1 x + . . . + a n x n p(x)=a_0+a_1x+...+a_nx^n p(x)=a0+a1x+...+anxn
② 若 P ( x ) 为 分 段 函 数 , 就 称 为 分 段 插 值 ② 若P(x)为分段函数,就称为分段插值 P(x)
③ 若 P ( x ) 为 三 角 多 项 式 , 就 称 为 三 角 插 值 。 ③若P(x)为三角多项式,就称为三角插值。 P(x)
本次我们只讨论多项式插值和分段插值

插值法原理

定理:设有n+1个互不相同的节点 ( x i , y i ) (x_i,y_i) (xi,yi),则存在唯一的多项式:
L n ( x ) = a 0 + a 1 x + a 2 x 2 + . . . + a n x n L_n(x)=a_0+a_1x+a_2x^2+...+a_nx^n Ln(x)=a0+a1x+a2x2+...+anxn
使得 L n ( x j ) = y j L_n(x_j)=y_j Ln(xj)=yj
证明
构造方程组
{ a 0 + a 1 x 0 + a 2 x 0 2 + . . . + a n x 0 n = y 0 a 0 + a 1 x 1 + a 2 x 1 2 + . . . + a n x 1 n = y 0 . . . . . . . . . . . . . . . . . = . . . . a 0 + a 1 x n + a 2 x n 2 + . . . + a n x n n = y n \left\{ \begin{aligned} a_0+a_1x_0+a_2x_0^2+...+a_nx_0^n & = y_0 \\ a_0+a_1x_1+a_2x_1^2+...+a_nx_1^n & = y_0 \\ .................&=.... \\ a_0+a_1x_n+a_2x_n^2+...+a_nx_n^n & = y_n \end{aligned} \right. a0+a1x0+a2x02+...+anx0na0+a1x1+a2x12+...+anx1n.................a0+a1xn+a2xn2+...+anxnn=y0=y0=....=yn
令: A = [ 1 x 0 ⋯ x 0 n 1 x 1 ⋯ x 1 n ⋮ ⋮ ⋱ ⋮ 1 x n ⋯ x n n ] , X = [ a 0 a 1 ⋮ a n ] , Y = [ y 0 y 1 ⋮ y n ] A=\left[ \begin{matrix} 1 & x_0 & \cdots & x_0^n \\ 1 & x_1 & \cdots & x_1^n \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_n & \cdots & x_n^n \\ \end{matrix} \right] , X=\left[ \begin{matrix} a_0\\ a_1\\ \vdots\\ a_n \end{matrix} \right], Y=\left[ \begin{matrix} y_0\\ y_1\\ \vdots\\ y_n \end{matrix} \right] A=111x0x1xnx0nx1nxnn,X=a0a1an,Y=y0y1yn
方 程 的 矩 阵 形 式 : A X = Y , 由 于 ∣ A ∣ = ∏ i = 1 n ∏ j = 0 n − 1 ( x i − x j ) ≠ 0 , 所 以 方 程 有 唯 一 解 。 方程的矩阵形式:AX=Y,由于|A|=\prod_{i=1}^n\prod_{j=0}^{n-1}(x_i-x_j)\neq0,所以方程有唯一解。 AX=YA=i=1nj=0n1(xixj)=0,
从 而 L n ( x ) = a 0 + a 1 x + a 2 x 2 + . . . + a n x n 唯 一 存 在 从而L_n(x)=a_0+a_1x+a_2x^2+...+a_nx^n唯一存在 Ln(x)=a0+a1x+a2x2+...+anxn

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

分段三次埃尔米特插值

Matlab有内置的函数pchip:

p=pchip(x,y,new_x)
% x是已知的样本点的横坐标
% y是已知的样本点的纵坐标,x与y坐标同为行或列向量
%new_x是要插入处对应的横坐标

下面我们开始举一个例子:

x=-pi:pi;y=sin(x);
new_x=-pi:0.1:pi;
p=pchip(x,y,new_x)
plot(x,y,'o',new_x,p,'r-')

在这里插入图片描述

plot函数用法:

plot(x1,y1,x2,x3)

线方式含义
-实线
点线
-.虚线线
波折线
点方式符号
.圆点
+加号
*星号
xx形
oo小圆形
颜色符号
y
r
g绿
b
w
k
m
c

三次样条插值

Matlab有内置的函数spline:

p=spline(x,y,new_x)
% x是已知的样本点的横坐标
% y是已知的样本点的纵坐标,x与y坐标同为行或列向量
%new_x是要插入处对应的横坐标

例如

x=-pi:pi;
y=sin(x);
new_x=-pi:0.1:pi;
p1=pchip(x,y,new_x);%分段三次埃尔米特插值
p2=spline(x,y,new_x);%三次样条插值
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast')%标注显示在东南方向

在这里插入图片描述
可以看出,三次样条生成的曲线更加光滑。在实际建模中,由于我们不知道数据的生成过程,因此这两种插值都可以使用。当然,以上的插值算法可以进行数据的预测。只需要把new_x的部分改为想要预测的坐标就可以了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值