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

时间:2015-01-08 03:28:35

标签: matlab

让我们说,我需要做这个插值

  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

2 个答案:

答案 0 :(得分:4)

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')

enter image description here 注意低于0.1的值的恒定外推(在左侧)。

这是应该完成的方式,但对我来说似乎不太强大。考虑一下您希望zz=0:0.01:1.1的情况,以便在两个方向上进行推断。有一个常数外推值对我来说没有多大意义。 Guddus解决方案似乎更加强大,特别是如果你为另一个方向的外推案例添加类似:phi_z(zz > max(x)) = phi_1(end);的东西。

答案 1 :(得分:1)

再添加一行

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