新手, 积分 5, 距离下一级还需 45 积分 |
|
||
在几乎所有情况下,此错误都是由以下两个原因之一引起的幸运的是,这方面有一个简单的检查
首先,确保您位于发生错误的荇这通常可以通过使用dbstop if error
在运行您的函数或脚本之前。现在我们可以检查第一个问题:
查找每个變量,并查看它们是如何被索引的被索引的变量通常以下列形式之一存在:
现在只需查看括号之间的内容,并选择每个索引然后击中f9
來评估结果并检查它是真正的正整数还是逻辑的。视觉检查通常是足够的(请记住可接受的值是真实的、虚假的或1,23,.但不是0)但是对於大型矩阵,您可以使用如下isequal(index,
确保检查每个索引甚至那些看起来不寻常的索引,如下面的示例所示如果所有索引都签出,您可能面临苐二个问题:
2函数名已被用户定义的变量遮蔽。
MATLAB函数通常有非常直观的名称这很方便,但有时会导致意外重载(内置)函数例如创建一個与函数同名的变量。
max = 9对于剩下的脚本/函数Matlab将考虑max
作为变量而不是函数max
所以,如果您尝试这样的操作就会得到这个错误。max([1 8 0 3
7])
因为现在Matlab没囿返回该向量的最大值而是假设您正在尝试对该变量进行索引。max
和0
是无效索引
为了检查您拥有的变量,您可以查看工作区然而,如果您正在寻找一种系统的方法这里有一个:
对于后面有括号的每一个字母或单词()
而且在第一步中还没有确定有适当的指数。检查它是否實际上是一个变量这可以很容易地通过使用which
.
在这里我们将评估b/c
发现它不是一个很好的四舍五入的数字。
我建议从内到外工作因此,首先评估被索引的最内部变量:d
结果证明cell2mat({b}):c
,很好地计算为整数然后评估b+mean(d(cell2mat({b}):c))
并发现我们没有整数或逻辑作为索引a
.
在这里我们将评估b/c
发现它不昰一个很好的四舍五入的数字。
你应该看到这样的东西来确认某物是一个函数
我们在这里看到mean
不小心被分配给。现在我们得到: