数组索引必须为正整数或逻辑值。 出错 oooo (line 715) state1(gateway1) = randi([0, 3], n_gateway, 1);怎么修改
时间: 2023-09-14 13:03:03 浏览: 96
这个错误是因为您使用的索引不是正整数或逻辑值,而是一个向量。在MATLAB中,数组的索引必须是正整数或逻辑值,不能是向量。因此,您需要使用其他方法来实现您的目标。
一种方法是使用循环来遍历网关并为每个网关生成一个随机状态。修改的代码如下:
```
if file ~= -1 % 确认文件已经被正确打开
data = textscan(file, '(%f,%f,%f) to (%f,%f,%f)\n');
gateway1 = [];
gateway2 = [];
for i = 1:size(data{1}, 1)
x1 = data{1}(i);
y1 = data{2}(i);
z1 = data{3}(i);
x2 = data{4}(i);
y2 = data{5}(i);
z2 = data{6}(i);
gateway1 = [gateway1; x1, y1, z1];
gateway2 = [gateway2; x2, y2, z2];
end
fclose(file); % 记得关闭文件
else
disp('Error: file not found or could not be opened.');
end
% 随机生成n_gateway个网关状态
n_gateway = min(n_gateway, size(gateway1, 1));
idx = randperm(size(gateway1, 1), n_gateway);
for i = 1:n_gateway
state1(gateway1(idx(i),:)) = randi([0, 3]);
state2(gateway2(idx(i),:)) = randi([0, 3]);
end
```
在这个修改后的代码中,我们使用randperm函数选择n_gateway个网关,并使用循环遍历每个网关,为它们生成一个随机状态。
阅读全文