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

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

在几乎所有情况下,此错误都是由以下两个原因之一引起的。幸运的是,这方面有一个简单的检查。

首先,确保您位于发生错误的行,这通常可以通过使用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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值