什么情况用它:

  • 需要根据已知的函数点进行数据、模型的处理和分析
  • but 现有的数据极少,不足以支撑分析的进行
  • 需要 “ 模拟产生 ” 一些新的 and 可靠的值来满足需求

插值法分类:

  • 分段插值
  • 多项式插值
  • 三角插值

拉格朗日插值法

  • 两个点:
  • 三个点:
  • 四个点:

缺点:

会产生龙格现象(Runge phenomenon)

java 中实现二次插值和三次插值 二次插值法算法_人工智能

这时候就推荐分段线性插值

分段二次插值

java 中实现二次插值和三次插值 二次插值法算法_数学建模_02

牛顿插值法

java 中实现二次插值和三次插值 二次插值法算法_matlab_03

两种插值法对比:

维度

拉格朗日插值

牛顿插值

缺点

龙格现象,不能全面反映被插值函数的性态

也存在龙格现象不能全面反映被插值函数的性态

优点

具有继承性

埃尔米特插值(Hermite) 登场

介绍:

java 中实现二次插值和三次插值 二次插值法算法_matlab_04

原理

java 中实现二次插值和三次插值 二次插值法算法_人工智能_05

分段三次埃尔米特插值

直接使用 Hermite 插值得到的多项式次数较高,也存在龙格现象,因此在实际应用中,使用 三次Hermite插值多项式 (PCHIP)

三次样条插值

我也有点懵逼

函数介绍

plot 函数用法

plot (x1, y1, x2, y2)
plot(x, y, ‘o’, new_x, p, ‘r-’)

线方式

介绍

-

实线


点线

-.

虚点线


波折线

点方式

介绍

.

圆点

+

加号

*

星号

x

x行

o

小圆

颜色

介绍

y


r


g

绿

b


w


k


m


c


Hermite内置函数

  • 示例代码:
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-')

java 中实现二次插值和三次插值 二次插值法算法_数学建模_06

  • pchip函数介绍

插入后对应的纵坐标 = pchip(自变量,因变量,插入处对应的横坐标)

三次样条插值内置函数

  • 示例代码:
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')   % 标注显示在东南方向

java 中实现二次插值和三次插值 二次插值法算法_数学建模_07

n维数据插值(了解)

p = 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:最邻近插值算法
  • 示例代码:
x = -pi:pi;
y = sin(x);
new_x = -pi:0.1;pi;

p = spline(x, y, new_x)
等价于 p = interpn(x, y, new_x, 'spline');

闪亮登场——可用于 短期预测

java 中实现二次插值和三次插值 二次插值法算法_java 中实现二次插值和三次插值_08