第 74 行出现 Gpfit 错误。甚至无法使用给定的 matlab 示例

Gpfit error on line 74. Not even working with the given matlab example

似乎将 matlab 升级到 2016a 对我的问题没有任何影响,我什至无法使用 gpfit 函数执行 matlab 示例。在线使用Matlab代码出现如下错误:

y =
      0.0017    7.2773

Operands to the || and && operators must be convertible to
logical scalar values.

Error in gpfit (line 74)

if n == 0 || ~isfinite(rangex)

并且该函数不断吐出 y 作为最小值和最大值(范围表达式)。我的数据太大而无法附加,我认为不值得按比例缩小,因为它实际上只是一个风速矩阵。没有 Nans 没有 Infs.

当我在 gpfit 代码中添加断点时,我可以看到 n 是标量 1x1,所以我很困惑!

有什么想法吗?

谢谢!

问题是您的文件路径上有一个名为 range.m 的文件,该文件必须 return 是一个多元素数组。这是一个问题,因为内置 range 函数 return 是一个标量值(给定矢量输入)。

range(X) returns the difference between the maximum and the minimum of a sample. For vectors, range(x) is the range of the elements. For matrices, range(X) is a row vector containing the range of each column of X. For N-dimensional arrays, range operates along the first nonsingleton dimension of X.

gpfit函数中,有以下几行:

n = length(x);
x = sort(x(:));
xmax = x(end);
rangex = range(x);

if n == 0 || ~isfinite(rangex)

如果我们看一下,显然 x 的维度不是问题,因为它们被迫成为列向量:sort(x(:))。而且,n 保证是一个标量。如果 range 被正确调用,它应该 是一个标量。

为了在 MATLAB 中使用 ||,您必须比较两个 标量。因为路径上存在的 range.m 提供了一个 数组 而不是标量,这导致 || 失败,因为 n == 0 显然是一个标量但是 isfinite(rangex) 而不是

您想首先确定您的路径上存在哪个 range.m

which('range')

然后您需要重命名它或从您的搜索路径中删除包含文件夹。

重要的教训

一般来说,将变量或函数命名为与内置函数相同的名称是不好的做法,因为这会导致这种奇怪且难以追踪的问题。防止这种情况发生的一种简单方法是不要盲目地将文件夹添加到您的 MATLAB 搜索路径。奇怪的是,MATLAB 自己的内置函数将使用您的自定义函数而不是其他内置函数,如果它们在搜索路径上更高(我从来不理解这种行为,但它就是这样)。