第6章 数据分析——6.2 数据插值

简介: 第6章 数据分析——6.2 数据插值

6.2  数据插值


插值法是一种古老的数学方法。插值问题的数学定义如下:

由实验或测量的方法得到函数y = f(x)在互异点x0,x1,,xn处的数值y0,y1,,yn(见图6-2),然后构造一个函数φ(x)作为y = f(x)的近似表达式,即y = f(x)φ(x)

使得φ(x0) = y0,φ(x1) = y1, ,φ(xn) = yn。这类问题称为插值问题。y = f(x)称为被插值函数,φ(x)称为插值函数,x0,x1,,xn称为插值节点。

0bf8c1d6e67becc8cfcec3ec473c0789_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6-2  一维插值示意图

插值的任务是由已知的观测点为物理量建立一个简单、连续的解析模型,以便能根据该模型推测该物理量在非观测点处的特性。

插值包括多项式插值、埃尔米特插值、分段插值与样条插值、三角函数插值、辛克插值等几种。插值在数据分析、信号处理、图像处理等诸多领域有着十分重要的应用。


6.2.1  一维插值


当被插值函数y = f(x)为一元函数时,为一维插值。MATLAB使用interp1函数来实现一维插值。interp1函数的调用格式如下。

● Vq=interp1(X,V,Xq,METHOD)X为自变量的取值范围;V为函数值,或者V为一个向量,其长度必须与X保持一致;Xq为插值点向量或数组;METHOD是字符串变量,用来设定插值方法。


MATLAB提供以下几种插值方法。

● METHOD='nearest':邻近点插值。插值点函数值估计为与该插值点最近的数据点函数值。

● METHOD='linear':线性插值。根据相邻数据点的线性函数估计落在该区域内插值数据点的函数值。

● METHOD='spline':三次样条插值。这种方法在相邻数据点间建立三次多项式函数,根据多项式函数确定插值数据点的函数值。

● METHOD='pchip''cubic':立方插值。通过分段立方埃尔米特插值方法计算插值结果。

● METHOD='v5cubic':用MATLAB 5版本中的三次样条插值。


上述几种插值方法的比较如下。

邻近点插值方法的速度最快,但平滑性最差。

线性插值占用的计算机内存比邻近点插值多,运算时间也长;与邻近点插值不同,其结果是连续的,但顶点处的斜率会改变。

三次样条插值方法的运算时间最长,但内存的占用较立方插值少,其插值数据和导数都是连续的。在这几种插值方法中,三次样条插值结果的平滑性最好,但如果输入数据不一致或数据点过近,就可能出现很差的插值效果。


选择一种插值方法,需要考虑的因素包括运算时间、占用计算机内存的大小和插值的光滑程度。

下面介绍几种较为常用的一维插值方法。


1.分段线性插值(linear


分段线性插值的算法是在每个小区间[xi,xi+1 ]上采用简单的线性插值。在区间[xi,xi+1 ]上的子插值多项式为:

425377974f8218b8a5a86dc3cb1c532a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在整个区间[xi,xn]上的插值函数为:

4fe1b31434de495893d9f650999d46bb_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

其中li(x)的定义如下:

31d2a1aaf96bd27a3a4e7facc8fac192_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


6-16:利用interp1函数对y=sin(x)进行分段线性插值。

在命令行窗口中输入:

clear all;
x = 0 : 2 * pi;
y = sin(x);
xx = 0 : 0.5 : 2 * pi;
yy = interp1(x, y, xx);
plot(x, y, 's', xx, yy)

得到的结果如图6-3所示。

7d4f1ccf49b5e4eccaff72157f98feda_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6-3  分段线性插值结果


2.一维快速傅里叶插值


一维快速傅里叶插值通过函数interpft()来实现。该函数用傅里叶变换把输入数据变换到频域,然后用更多点的傅里叶逆变换变回时域,其结果是对数据进行增采样。函数interpft()的调用格式如下。

● y=interpft(x,n):对x进行傅里叶变换,然后采用n点傅里叶逆变换变回时域。如果x是一个向量,数据x的长度为m,采样间隔为dx,则数据y的采样间隔是dxm/n

● y=interpft(x,n,dim):在dim指定的维度上进行操作。


6-17:利用一维快速傅里叶插值实现数据增采样。

在命令行窗口中输入:

clear all;
x = 0 : 1.2 : 10;
y = sin(x);
n = 2 * length(x);      % 增采样1倍
yi = interpft(y, n);    % 一维快速傅里叶插值
xi = 0 : 0.6 : 10.4;
hold on;
plot(x, y, 'ro');       % 画图
plot(xi, yi, 'b.-');
title('一维快速傅里叶插值');
legend('原始数据', '插值结果');

得到的结果如图6-4所示。

935a7ae9a193f021982f5f00a4c05d6d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6-4  一维快速傅里叶插值结果


3.快速fourier算法


当数据点呈现周期分布时,用上面的几种插值算法效果都不是很好,这时可以使用interpft函数进行插值,此函数使用快速fourier算法做一维插值,其调用格式如下:

y = interpft(x, n)


注意:它返回周期函数在重采样的n个等距点的插值。注意,n必须大于x的长度。


6-18:采用interpft函数对sin函数插值。

在命令行窗口中输入:

clear all;
x = 0 : 2 * pi;
y = sin(x);
z = interpft(y, 15);
xx = linspace(0, 2 * pi, 15);
plot(x, y, '-o', xx, z, ':o')

得到的结果如图6-5所示。

9358a492c8633267c2012b68e8135889_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6-5  快速fourier算法插值结果


6.2.2  二维插值


当被插值函数y = f(x)为二元函数时,为二维插值。MATLAB使用interp2函数来实现二维插值。interp2函数的调用格式如下。

● Vq=interp2(X,Y,V,Xq,Yq,METHOD)XYV是具有相同大小的矩阵,V(i,j)是数据点[X(i,j),Y(i,j)]上的函数值;XqYq为待插值数据网格;METHOD是一个字符串变量,表示不同的插值方法。


MATLAB提供以下4种插值方法。

● METHOD='nearest':领近点插值。将插值点周围4个数据点中离该插值点最近的数据点函数值作为该插值点的函数值的估计值。

● METHOD='linear':双线性插值,是MATLABinterp2函数默认使用的插值方法。该方法将插值点周围4个数据点的函数值的线性组合作为插值点的函数值的估计值。

● METHOD='spline':三次样条插值。该方法的计算效率高,得到的曲面光滑,是用户经常使用的插值方法。

● METHOD='cubic':双立方插值。该方法利用插值点周围的16个数据点,相对于nearestlinear方法,其需要消耗较多的内存和计算时间,故计算效率不高,但是得到的曲面更加光滑。


6-19:二维插值示例。

在命令行窗口中输入:

clear all;
[X, Y] = meshgrid(-3 : .25 : 3);        % 产生已知的数据栅格点
Z = peaks(X, Y);            % 计算已知点的函数值
[XI, YI] = meshgrid(-3 : .125 : 3);     % 产生更精密的插值点
ZI = interp2(X, Y, Z, XI, YI);
mesh(X, Y, Z), hold, mesh(XI, YI, ZI + 15)
hold off
axis([-3 3 -3 3 -5 20])

输出结果如图6-6所示。

3c4f8fe96f8c2ef4253e2fcf1362acdd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6-6  函数二维插值结果


相关文章
|
6月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
387 71
|
5月前
|
SQL 数据挖掘 BI
数据分析的尽头,是跳出数据看数据!
当前许多企业在数据分析上投入大量资源,却常陷入“数据越看越细,业务越看越虚”的困境。报表繁杂、指标众多,但决策难、行动少,分析流于形式。真正有价值的数据分析,不在于图表多漂亮,而在于能否带来洞察、推动决策、指导行动。本文探讨如何跳出数据、回归业务场景,实现数据驱动的有效落地。
|
11月前
|
SQL 人工智能 数据可视化
数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式
数据项目复杂,涉及代码、数据、运行环境等多部分。随着AI发展,数据科学团队面临挑战。协作式数据文档(如阿里云DataV Note)成为提升效率的关键工具。它支持跨角色协同、异构数据处理、多语言分析及高效沟通,帮助创建知识库,实现可重现的数据科学过程,并通过一键分享报告促进数据驱动决策。未来,大模型AI将进一步增强其功能,如智能绘图、总结探索、NLP2SQL/Python和AutoReport,为数据分析带来更多可能。
679 142
|
12月前
|
SQL 数据可视化 大数据
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
634 92
|
数据挖掘 PyTorch TensorFlow
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
527 73
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
837 56
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
351 22
|
10月前
|
机器学习/深度学习 传感器 数据采集
基于机器学习的数据分析:PLC采集的生产数据预测设备故障模型
本文介绍如何利用Python和Scikit-learn构建基于PLC数据的设备故障预测模型。通过实时采集温度、振动、电流等参数,进行数据预处理和特征提取,选择合适的机器学习模型(如随机森林、XGBoost),并优化模型性能。文章还分享了边缘计算部署方案及常见问题排查,强调模型预测应结合定期维护,确保系统稳定运行。
998 0