数组索引必须为正整数或逻辑值。 出错 abb (第 7 行) y(n+1) = y(n) + r*y(n)*(1-y(n-k)/b(i));b = 2.5:0.01:3.5;r = 0.1;k = 1;for i = 1:length(b) y = 0.5; for n = 1:1000 y(n+1) = y(n) + r*y(n)*(1-y(n-k)/b(i)); if abs(y(n+1) - y(n)) < 1e-6 break; end end fprintf('b=%.2f, y=%.6f\n', b(i), y(end));end
时间: 2023-06-16 18:07:35 浏览: 49
这段代码可能会出现以下错误:
"Index in position 1 is invalid. Array indices must be positive integers or logical values."
这是因为在使用数组索引时,索引必须为正整数或逻辑值,但在代码中,可能使用了非正整数的索引值,导致出现了这个错误。
具体来说,可能是在以下语句中出现了问题:
y(n-k)/b(i)
如果 n-k 或 b(i) 的值不是正整数或逻辑值,就会导致这个错误的出现。解决办法是检查代码中的索引值是否合法,并在必要时进行转换。
相关问题
修改代码数组索引必须为正整数或逻辑值。 出错 abb (第 7 行) y(n+1) = y(n) + r*y(n)*(1-y(n-k)/b(i));
这个错误提示意味着你在代码中使用了负数或者非整数的索引值。在该代码中,你使用了变量 n 作为数组的索引值,但是 n 可能是负数或者非整数,导致代码出错。你需要检查代码,确保所有的索引值都是正整数或者逻辑值。另外,你还需要检查变量 k 和 i 是否合法。如果这些变量的取值范围不正确,也可能会导致类似的错误。
数组索引必须为正整数或逻辑值。 出错 demo (第 27 行) derivative_error = error - y_tra(end-1)
出现这个错误的原因是在第一次循环时,`y_tra`数组中只有一个元素,因此在计算微分误差时,`y_tra(end-1)`索引无法正常工作。
为了解决这个问题,我们可以在循环之前将`y_tra`数组初始化为一个长度为2的数组,其中第一个元素为1,第二个元素为机器人的初始y坐标。这样,在计算微分误差时,`y_tra(end-1)`索引就可以正常工作了。
下面是修改后的代码:
```matlab
robot = Robot(); % 设置机器人初始位置和朝向为(0,1,0°)
robot.set(0,1,0);
% 设置机器人角度漂移为10°
robot.set_steering_drift(10.0 / 180.0 * pi);
% PID控制参数
Kp = 0.2;
Ki = 0.01;
Kd = 0.02;
% 初始化误差和积分误差
error = 0;
integral_error = 0;
% 目标位置
goal = [0, 0];
y_tra = [1, robot.y]; % 初始化y_tra数组
for ith = 1:100
% 计算误差
error = goal(2) - robot.y;
% 计算积分误差
integral_error = integral_error + error;
% 计算微分误差
derivative_error = error - y_tra(end-1);
% 计算控制量
steering = Kp * error + Ki * integral_error + Kd * derivative_error;
% 修改这个
robot.move(steering, 1);
y_tra(end+1) = robot.y;
end
times=0:100;
plot(times, y_tra);
hold on;
plot(times, zeros(1, 101));
```
在上述代码中,我们将`y_tra`数组初始化为`[1, robot.y]`,这样在计算微分误差时,`y_tra(end-1)`索引就可以正常工作了。