2

下面是我的部分数据。第一列 R 是我从实验中得到的值,XYZ 是坐标。我正在尝试使用 matlab nD 插值函数。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 时出错网格向量不是严格单调递增的。

4

1 回答 1

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() 应该可以解决问题。

于 2013-07-15T09:38:32.030 回答