如何在非单调数据上使用interpn

时间:2013-07-15 07:50:18

标签: matlab interpolation

以下是我数据的一部分。第1列R是实验得到的值,X Y Z是坐标。我正在尝试使用matlab n-D插值函数。 Matlab说我的坐标不是单调增加值。但我无法改变或重新安排我的坐标。

我使用了错误的功能吗?

请告诉我该怎么做。

R              X     Y    Z
5.05256e-18  0.016 0.015 0.032
4.99958e-18  0.016 0.015 0.064
5.04485e-18  0.016 0.015 0.128
5.49613e-18  0.016 0.0195 0.032
5.45348e-18  0.016 0.0195 0.064
5.43161e-18  0.016 0.0195 0.128
5.9393e-18  0.016 0.03 0.032
5.98785e-18  0.016 0.03 0.064
6.01929e-18  0.016 0.03 0.128
6.54936e-18  0.016 0.06 0.032
6.45947e-18  0.016 0.06 0.064
6.52379e-18  0.016 0.06 0.128
5.06516e-18  0.032 0.015 0.032
5.04897e-18  0.032 0.015 0.064
5.14022e-18  0.032 0.015 0.128
5.45993e-18  0.032 0.0195 0.032
5.4616e-18  0.032 0.0195 0.064
5.38434e-18  0.032 0.0195 0.128
5.94097e-18  0.032 0.03 0.032
5.91148e-18  0.032 0.03 0.064
6.05671e-18  0.032 0.03 0.128
6.56989e-18  0.032 0.06 0.032
6.58173e-18  0.032 0.06 0.064
6.45971e-18  0.032 0.06 0.128

这是我的测试代码。

我想在X = 0.06 Y = 0.07 Z = 0.08

时得到插值
  
    

interpn(X,Y,Z,R,0.06,0.07,0.08, '线性')

  

matlab消息: 使用griddedInterpolant时出错 网格向量不是严格单调递增的。

1 个答案:

答案 0 :(得分:3)

我担心你的问题有点超出了矢量的单调。要在这种情况下使用interpn,您还需要R作为3维矩阵。此外,0.06和0.07的值似乎分别在X和Y的范围之外。

如果您可以解决范围问题,请尝试使用

功能
yi = griddatan(x,y,xi)

在你的情况下,事情会是这样的:

Grid=[X,Y,Z];
Point=[0.03,0.05,0.08] % with values inside the grid and maybe transposed like  Point=[0.03;0.05;0.08]; I don't know, didn't try it myself.

Result=griddatan(Grid,R,Point);

希望有效,正如我上面所写,我没有尝试运行它,所以你可能不得不在这里和那里调换它以使它工作,但我几乎可以肯定griddatan()应该做的伎俩