在某些情况下,归一化可以改善插值结果,但在其他情况下它可能会影响解的精确度。是否使用归一化需要根据插值数据的性质做出判断。
优势:归一化数据在自变量具有不同单位和迥异的规模时可能会改善插值结果。在这种情况下,缩放输入以使其具有类似的量级可以改善插值的数值形态。
注意:如果各自变量具有相同的单位,则在归一化数据时应小心,即使各变量的规模不同也是如此。对于相同单位的数据,归一化会因添加方向偏差而影响基本三角剖分并最终降低插值的准确度,从而使解失真。例如,如果 x 和 y 都表示位置并且都以“米”为单位,则进行归一化是错误的。此时不建议对 x 和 y 进行不一致的缩放,因为正东 10 米和正北 10 米在空间距离上是相同的。
创建一些样本数据,其中y 中的值比 x 中的值大若干个数量级。假设 x 和 y 具有不同单位。
x = rand(1,1000)/100;
y = 2.*(rand(1,1000)-0.5).*90;
z = x.^2;
使用以上样本数据构建一个网格数据,基于网格上的样本数据进行插值并绘制结果。
x1 = linspace(min(x),max(x),25);
y1= linspace(min(y),max(y),25);
[X, Y] = meshgrid(x1,y1);
Z = griddata(x,y,z,X,Y);
plot3(x,y,z,'co')
hold on
mesh(X,Y,Z)
griddata生成的结果不是很平滑,似乎存在含噪数据。这是由于自变量具有不同尺度导致的,因为一个变量的大小细微变化会导致另一个变量的大小发生巨大变化。
由于x 和 y 具有不同单位,对它们进行归一化使其具有类似的量级,应该有助于产生更好的结果。对样本点进行归一化,并使用 griddata 重新生成插值。
% 归一化数据
x = mapminmax(x);
y = mapminmax(y);
%产生网格数据
x1 = linspace(min(x),max(x),25);
y1 = linspace(min(y),max(y),25);
[X,Y] = meshgrid(x1,y1);
% 数据插值
Z= griddata(x,y,z,X,Y);
plot3(x,y,z,'co')
hold on
mesh(X,Y,Z)
在这种情况下,对样本点进行归一化会使griddata 计算出更平滑的解。
这说明了在数据量级相差较大的情况下,直接进行插值不是一个十分明智的选择,而要尽量对数据进行处理,这是个重要技巧。
往期文章