Matlab下标整数,matlab – 下标索引必须是实数正整数或逻辑,通用解

下标索引必须是实数正整数或逻辑

在几乎所有情况下,这个错误是由两个原因之一造成的。幸运的是有一个容易检查这一点。

首先确保你在发生错误的行,这通常可以通过使用dbstop如果错误,然后运行您的函数或脚本来实现。现在我们可以检查第一个问题:

1.某处使用无效的索引来访问变量

找到每个变量,并查看它们如何编制索引。被索引的变量通常采用以下形式之一:

variableName(index,index)

variableName{index,index}

variableName{indices}(indices)

现在简单看看括号中的东西,并选择每个索引。然后点击f9来评估结果,并检查它是一个真正的正整数还是逻辑。目视检查通常是足够的(记住可接受的值是真,假或1,2,3,… BUT NOT 0),但是对于一个大矩阵,你可以使用像isequal(index,round(index)),或更精确地等于(x,max(1,round(abs(x))))以检查实数正整数。要检查类,你可以使用类(索引),如果值都是’true’或’false’,它应该返回’logical’。

确保检查评估每个索引,即使是那些看起来不寻常的下面的例子。如果所有索引检出,您可能面临第二个问题:

函数名已被用户定义的变量覆盖

MATLAB函数通常有非常直观的名称。这很方便,但有时会导致意外重载(内置)函数,即创建一个与函数名称相同的变量,例如,您可以去max = 9,对于脚本/函数的其余部分,Matlab将考虑max为a变量而不是函数max,所以如果你尝试类似max([1 8 0 3 7]),因为不是返回该向量的最大值,Matlab现在假设你试图索引变量max和0是无效的索引。

为了检查你有哪些变量,你可以看看工作区。但是如果你正在寻找一个系统的方法,这里是一个:

对于后面跟着括号()的每个字母或单词,并且在步骤1中没有被确认具有适当的索引。检查它是否实际上是一个变量。这可以很容易地通过使用。

例子

简单出现无效的索引

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)),发现我们没有整数或逻辑作为索引。

这里我们将评估b / c,并发现它不是一个很好的圆整数。

重载函数

which mean

% some directory\filename.m

你应该看到这样的东西,实际上确认某事是一个函数。

a = 1:4;

b=0:0.1:1;

mean(a) = 2.5;

mean(b);

在这里,我们看到意思被意外地分配给了。现在我们得到:

which mean

% mean is a variable.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值