输入超出范围时如何处理插值?

How do handle interpolation when input is out of scope?

比方说,我需要做这个插值

  z = 1:1:240;
  x = 0.1:0.1:1;
  phi_1 = [0.02, 0.08, 0.17, 0.27, 0.38, 0.45, 0.67, 0.74, 0.86, 1.0];
  zz= z/240;
  phi_z = interp1(x, phi_1, zz);

问题是 zz < 0.1 时没有数据。 在这种情况下,我希望它坚持 x = 0.1, phi_1 = 0.02.

再添加一行

phi_z(zz<min(x))=phi_1(1);

interp1 函数为插值(和外推)方法提供了第 4 个输入参数,默认为 'linear',也为外推情况提供了第 5 个输入参数。这个参数可以是一个字符串:'extrap',然后 matlab 也会对外推情况应用指定的方法。输入也可以是常量值 extrapval,任何超出范围的输入都将返回该值。 因此,在此示例中,您只想将外推值 extrapval 设置为 phi_1(1).

z = 1:1:240;
x = 0.1:0.1:1;
phi_1 = [0.02, 0.08, 0.17, 0.27, 0.38, 0.45, 0.67, 0.74, 0.86, 1.0];
zz= z/240;
phi_z = interp1(x, phi_1, zz, 'linear', phi_1(1)); %// set extrapolation value

图形表示如下所示:

plot(x, phi_1, 'ko')
hold on
plot(zz, phi_z, 'r-')
legend('data', 'interpolation and constant extrapolation')

请注意低于 0.1 的值的常量外推(在左侧)。

这是应该完成的方式,但对我来说似乎不太稳健。考虑一下您想要 zz=0:0.01:1.1 的情况,因此您可以在两个方向上进行推断。 single 常量外推值对我来说意义不大。 Guddus 解决方案似乎更可靠,特别是如果您添加类似以下内容的内容:phi_z(zz > max(x)) = phi_1(end); 用于另一个方向的外推案例。