下标索引必须是实数正整数或逻辑,泛型解。

下标索引必须是实数正整数或逻辑,泛型解。

以下错误经常发生:

下标指数必须是实数正整数或逻辑值。

我发现了很多关于这方面的问题,但没有一个真正通用的答案。因此,我希望有一个一般性的解决办法来处理这个问题。


阿波罗的战车
浏览 1688回答 3
3回答

凤凰求蛊

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

牧羊人nacy

在Matlab(和大多数其他编程语言)中,乘法符号必须始终被写入。当你上数学课的时候,你可能学会了写东西。a(a+a)而不是a*(a+a),这在MATLAB中是不一样的。第一个是索引或函数调用,第二个是乘法。>> a=0a =      0>> a*(a+a)ans =      0>> a(a+a)Subscript indices must either be realpositive integers or logicals.
打开App,查看更多内容
随时随地看视频慕课网APP