为什么我收到指数超过数组元素的数量(1)?

1视图(30天)
关闭所有
清晰的所有
clc
往往= 10;
k = 0.1;
α= 0.09;
β= 0.4;
γ= 0.08;
t (1) = 0;
L (1) = 10;
R (1) = 10;
C (1) = 0;
i = 1;
t(结束)<倾向
道具= 0 (1、4);
道具(1)= k * L (i) * R(我);
道具(2)=α* L(我);
道具(3)=β* R(我);
道具(4)=γ* C(我);
prop_sum =总和(道具);
r1 =兰德(1);
τ= (1 / prop_sum) *日志(1 / r1);
t (i + 1) =(1) +τ;
r2 =兰德(1);
如果r2 * prop_sum < =道具(1)
L (i + 1) = L (i) - 1;
(i + 1) = R (i) - 1;
C (i + 1) = C (i) - 1;
其他的如果r2 * prop_sum >道具(1)& & r2 * prop_sum < =道具道具(1)+ (2)
L (i + 1) = L (i) - 1;
其他的如果r2 * prop_sum >道具(1)+道具(2)& & r2 * prop_sum < =道具道具(1)+(2)+道具(3)
(i + 1) = R (i) - 1;
其他的如果r2 * prop_sum >道具道具(1)+(2)+道具(3)& & r2 * prop_sum < =道具道具道具(1)+(2)+(3)+(4)道具
C (i + 1) = C (i) - 1;
结束
结束
结束
结束
我=我+ 1;
结束
情节(t, L, Y, C)
我运行程序后,命令窗口显示
”指数超过数组元素的数量(1)。
错误untitled4(20)行
道具(1)= k * L (i) * R (i);“
是什么问题,我该如何解决这个错误呢?

答案(2)

约翰D 'Errico
约翰D 'Errico 2021年8月25日
编辑:约翰D 'Errico 2021年8月25日
你最好学会使用调试器。但我可以看看会发生什么。
在第一个迭代,我= 1。和你所有的变量最初是标量,因此L, T, R和C。
但在while循环,你新元素添加到这些变量,曾经标量。但是你只在特定条件下添加一个新元素。由此,我们看到:
如果r2 * prop_sum < =道具(1)
如果测试失败,会发生什么?
如果它失败了,那么L和C和P, R不扩大。
但你增加我。你总是增加我在每一个迭代。第一次迭代后会发生什么?我现在是2。但如果测试失败,那么这些变量仍然是标量。第二次迭代,您试图访问L (2), C (2)、R (2)。
更糟糕的是,你将继续在未来这个问题后来迭代,每次测试失败。由于测试依赖于r2的随机值,它经常可能会失败。
所以我不知道什么是你的目标在写这段代码。但它内置了一个错误。你需要考虑你所做的。

Awais赛义德
Awais赛义德 2021年8月25日
编辑:Awais赛义德 2021年8月25日
你的 L = 10(标量)。 第二次迭代之后,我= 2 L (2) 不存在。这就是为什么你看到错误。其次,只有一个if语句将执行每个迭代和只有一个元素会被附加到L, R,或C,这意味着如果一个元素被添加到R(3),然后L和C是一样的,你不能访问L(3)和C(3),因为他们不存在。
2的评论
Awais赛义德
Awais赛义德 2021年8月25日
我完全是你所说的。我做到了短假设OP写代码,他会拿起提示点的问题。

登录置评。

类别

找到更多的在矩阵和数组帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!