多维插值

MATLAB中提供了几个多维数据的插值函数,如表4-1所示。

表4-1 多维数据的插值函数

函 数 描 述
interp3 三维数据插值
interpn 多维数据插值
ndgrid 多维数据网格化

用函数interp3可以进行三维插值,计算三维样本集V中数据点之间的值。interp3函数最通用的格式是:

code.matlab
VI = interp3(X,Y,Z,V,XI,YI,ZI,method)

其中,X,Y和Z矩阵用于指定数据点,它们的值由V给定;矩阵V包含与X,Y和Z对应的值;XI,YI和ZI为interp3函数对V中数据进行插值的点。对于超出范围的值,interp3函数返回NaN。

对于三维数据,有3种不同的插值方法。

最近邻法(method = 'nearest'):该方法选择最近点的值。

线性插值(method = 'linear'):该方法基于最近的8个点进行分段线性插值。

三次插值(method = 'cubic'):该方法基于最近的64个点进行分段三次插值。

用interpn函数可以进行更高维数据的插值,该函数的常用格式为:

code.matlab
VI = interpn(X1,X2,X3,…,V,Y1,Y2,Y3,…,method)

XI,YI和ZI为interp3函数对V中数据进行插值的点。对于超出范围的值,interpn函数返回NaN。

对于高维数据插值,在MATLAB同样有最近邻插值、线性插值和三次插值这3种方法。

使用ndgrid函数可以通过高维函数评价和插值来生成数据数组。该函数将一系列输入向量指定的图域转换为一系列输出数组。第i维是输入向量xi的复本。

ndgrid函数的语法格式为:

code.matlab
[X1,X2,X3,...] = ndgrid(x1,x2,x3,...)

【例11】

假设在给定范围内计算下面这个3个变量函数的值

\[z={x}_{2}{e}^{(-{x}_{1}^{2}-{x}_{2}^{2}-{x}_{3}^{2})}\]
并且有,。

Inline ImageInline Image图4-4 高维数据的插值计算图4-4 高维数据的插值计算并且有\(-2\pi\leq{x}_{1}\leq0,2\pi\leq{x}_{2}\leq4\pi\)\(0\leq{x}_{2}\leq4\pi\)

在命令窗口中输入下面的命令行:

code.matlab
>> x1 = -2:0.2:2;
>> x2 = -2:0.25:2;
>> x3 = -2:0.16:2;
>> [X1,X2,X3] = ndgrid(x1,x2,x3);
>> z = X2.*exp(-X1.^2 -X2.^2 -X3.^2);
>> slice(X2,X1,X3,z,[-1.2 0.8 2],2,[-2 0.2])

生成结果如图4-4所示。