数学建模——插值(下)

本文介绍了二维插值的基本原理,包括最邻近插值、分片线性插值、双线性插值和二维样条插值,详细阐述了各种方法的优缺点。此外,文章还探讨了如何在Matlab中使用工具箱进行二维插值,包括线性、立方和最近邻插值等方法,并提供了调用格式和例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是面向数学建模准备的,是介绍性文章,没有过多关于原理的说明!!!


目录

一、2维插值原理及公式

1、二维插值问题

2、最邻近插值

3、分片线性插值

4、双线性插值

5、二维样条插值

二、二维插值及其Matlab工具箱

1、已知网格节点(xi,yj,zij)(i=1,2,…,m,j=1,2,…,n),且满足

Matlab工具箱调用格式(1)

调用格式(三次样条插值法)2

2、插值节点散乱

Matlab工具箱调用格式


一、2维插值原理及公式

1、二维插值问题

已知网格节点(xi,yj,zij)(i=1,2,…,m,j=1,2,…,n),且满足

 求点(x,y)处的插值z。

2、最邻近插值

如下图所示,将四个插值节点所围成的矩形区域分成四个部分,待插值点(x,y)落在哪个区域,就用哪个顶点的函数值作为(x,y)的函数值z。

 

 优点:快速、方便计算

缺点:不连续,图像阶梯状

3、分片线性插值

如下图所示,记四个插值节点的函数值为

 

(1)当待插值点位于下三角,即

待插点(x,y)的函数值为 

 (2)当待插值点位于上三角,即

 待插点(x,y)的函数值为

 优点:插值函数连续;

缺点:插值面不光滑;

4、双线性插值

双线性插值,是一片一片二次曲面构成。如上图所示,设

 

 (1)线性插入R1,R2的值

 

 (2)计算待插点的函数值

 

 优点:便于计算

缺点:节点处不一定光滑

5、二维样条插值

如上图,二维样条插值步骤:

 (1)用f1,f2一维样条插值估计f(R1);

(2)用f3,f4一维样条插值估计f(R2);

(3)用R1,R2一维样条插值计算f(x,y)的值。

优点:插值点二阶偏导数连续。

二、二维插值及其Matlab工具箱

1、插值节点顺序

已知网格节点(xi,yj,zij)(i=1,2,…,m,j=1,2,…,n),且满足

 

求点(x,y)处的插值z

Matlab工具箱调用格式(1)

z=interp2(x0,y0,z0,x,y,'method')

 参数介绍:
  1. x0,y0为m维和n维向量
  2. z0是n×m矩阵,表示节点值
  3. x,y为一维数组,表示插值点,x是行向量,y是列向量,z是矩阵,它的行数是y的维数,列数是x的维数
  4. ‘method’的取值常用的插值方法包括 ‘linear’(线性插值)、‘cubic’(立方插值)、‘nearest’(最近邻插值)等。
方法介绍:
  1. 线性插值(‘linear’):
    线性插值是最简单和常用的插值方法。它假设在数据点之间的区域内,数据是按线性方式变化的。线性插值使用相邻数据点之间的直线,通过计算目标位置处的加权平均值来估计目标位置的值。线性插值方法简单快速,但可能无法很好地逼近复杂的数据模式。

  2. 立方插值(‘cubic’):
    立方插值使用了更复杂的插值模型,以逼近数据点之间的值。它使用一个立方函数来估计目标位置处的值,不仅考虑了相邻数据点的值,还考虑了相邻数据点的梯度。立方插值在保持平滑性的同时,能够更好地逼近曲线和曲面的变化。它通常比线性插值精确,但计算更复杂。

  3. 最近邻插值(‘nearest’):
    最近邻插值是一种简单的插值方法,它使用最近的数据点的值作为目标位置的估计值。在最近邻插值中,目标位置被分配为最接近的数据点之一的值。这种插值方法计算简单且快速,但可能产生较大的误差,特别是在数据变化较大的区域。

调用格式(三次样条插值法)2

pp=csape({x0,y0},z0,conds,valconds);

z=fnval(pp,{x,y});

 参数介绍:
  • {x0, y0}:一个包含 x 坐标和 y 坐标数据点的 cell 数组。x0 是一个向量,包含原始数据点的 x 坐标,y0 是一个向量,包含原始数据点的 y 坐标。这些数据点用于构建三次样条插值曲线。
  • z0:一个和 {x0, y0} 大小相匹配的矩阵或数组,包含原始数据点的对应值。
  • conds:一个可选参数,定义了曲线的边界条件。它可以是字符串 'clamped' 或 'complete'
  • valconds:一个可选参数,用于定义插值结果在曲线的边界点上的导数值或值。这取决于 conds 参数的指定。

2、插值节点散乱

 已知n个节点(xi,yi,zi),i=1,2,…,n,求点(x,y)的插值。

Matlab工具箱调用格式

Zi=griddata(x,y,z,Xi,Yi)

Xi,Yi为两个不同方向的向量,返回[Xi,Yi]处的插值

参数介绍: 

  • (x, y, z):离散的数据点,其中 x 和 y 是数据点的 x 坐标和 y 坐标,z 是对应的值。
  • (Xi, Yi):目标位置的 x 坐标和 y 坐标,可以是向量、矩阵或者网格形式。
  • Zi:根据插值计算出来的值,对应于 (Xi, Yi)

griddata 函数使用不同的插值方法(如三次样条插值、线性插值、最近邻插值等)来计算目标位置的插值结果。它会根据所选的插值方法在 (x, y) 平面上对数据点进行插值处理,得到目标位置 (Xi, Yi) 的相应插值结果 Zi

需要注意的是,griddata 函数的插值方法是自动选择的,基于数据点的情况和密度来确定最合适的插值方法。如果需要更精确地控制插值方法,可以使用附加参数进行设置。

在使用 griddata 函数时,确保输入参数 (x, y, z) 的长度一致,是对应的数据点三个维度的向量或矩阵。同时,目标位置 (Xi, Yi) 的尺寸应与 (x, y) 一致或能通过扩展 (x, y) 得到。

### MATLAB 中与拟合的数学方法 #### 一维函数 `interp1` `interp1` 是 MATLAB 中最常用的一维函数,能够执行多种类型的操作,如线性、最近邻和样条。对于已知数据点 \( (x,y) \),可以通过指定不同的方法来进行计算。 ```matlab % 已知数据点 x = 1:5; y = [2, 4, 7, 12, 19]; % 要的位置 xi = 1:0.1:5; % 线性 yi_linear = interp1(x, y, xi, 'linear'); % 样条 yi_spline = interp1(x, y, xi, 'spline'); % 绘制图形对比不同效果 figure; plot(x, y, 'o', xi, yi_linear, '-', xi, yi_spline, '--'); legend('原始数据', '线性', '样条'); xlabel('X'); ylabel('Y'); title('interp1 不同方式比较'); ``` 此代码展示了如何利用 `interp1` 进行线性和样条两种常见形式的一维,并绘制图表直观展示两者差异[^3]。 #### 多项式拟合函数 `polyfit` 和 `polyval` 当面对一组离散的数据点时,如果希望通过一条连续曲线近似表示这些点之间的关系,则可以考虑使用多项式拟合的方法。MATLAB 提供了两个核心命令——`polyfit` 及 `polyval` 来实现这一目标: - `p=polyfit(x,y,n)` 返回次数不超过 n 的最小二乘法最佳逼近多项式的系数向量 p; - 使用得到的系数向量 p 结合 `polyval(p,xnew)` 即可求得新位置上的预测。 ```matlab % 原始数据 x_data = linspace(-pi, pi, 8); y_data = sin(x_data); % 拟合成三阶多项式 degree = 3; coefficients = polyfit(x_data, y_data, degree); % 计算更多采样点处对应的拟合 xx = linspace(min(x_data), max(x_data)); yy_fit = polyval(coefficients, xx); % 显示结果 figure; scatter(x_data, y_data); hold on; plot(xx, yy_fit, '-r'); legend({'样本点','拟合曲线'}); title(['Polyfit Degree=' num2str(degree)]); ``` 上述脚本先定义了一组正弦波形作为输入数据,接着调用了 `polyfit()` 函数完成三次多项式的拟合并绘制成图显示出来[^2]。 #### 样条函数 `spline` 除了常规意义上的全局多项式外,在某些应用场景下可能更倾向于局部范围内保持良好性质(比如光滑度)的同时又能较好地反映整体趋势变化规律的情况;此时便可以选择应用样条技术。具体来说就是通过构一系列低次数的小范围内的分段多项式来拼接成整个区间的完整表达式,从而既保证了足够的灵活性也兼顾到了必要的平滑特性。 ```matlab % 定义一些随机分布的数据点 t = sort(randperm(10)/10)*2*pi-pi; z = cos(t)+randn(size(t))*0.1; % 创样条器 cs = spline(t,z); % 获取精细划分后的查询点及其对应的结果 tt = linspace(min(t),max(t),1e3)'; zz = ppval(cs, tt); % 展现最终效果图 figure; plot(tt, zz,'b-', t, z ,'ro') axis([-pi pi -2 2]) title('Spline Interpolation Example') ``` 这段程序首先制造了一些带有噪声干扰的真实世界测量拟场景下的坐标序列,之后借助于内置好的 `spline()` 构造出了相应的 B-splines 型并进行了可视化呈现[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七喝椰奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值