索引超出矩阵维度的原因

索引超出矩阵维度的具体原因,怎样处理?怎样修改?matlab 弗洛伊德算法

img

那个dis应该是28×28的变量,看你上面的代码每个数字间的空格都没打,加上就可以了,就是在每个数字0,数字1之间都加上空格,在运行应该就不会报错了。码字不易,有用希望采纳一下哦,

【以下回答由 GPT 生成】

问题的原因是在第8行的代码中,当dis(i, j)等于0时,将dis(i, :)设置为无限大。这将导致索引超出矩阵维度的错误。原因是在循环中使用了1到28的索引,但是矩阵的维度可能小于28。

要解决这个问题,你可以在使用索引之前,检查索引是否超出了矩阵的实际维度。可以使用size函数来获取矩阵的实际维度,并将其存储在变量n中。

下面是修复代码的示例:

n = size(p, 1);
dis = p;

for i = 1:n
    for j = 1:n
        if dis(i, j) == 0
            dis(i, :) = inf;
        end
    end
end

% Floyd算法计算任意两点的最短路径
for k = 1:n
    for i = 1:n
        for j = 1:n
            if dis(i, k) + dis(k, j) < dis(i, j)
                dis(i, j) = dis(i, k) + dis(k, j);
            end
        end
    end
end

修复后的代码会先获取矩阵p的实际维度,并将其存储在变量n中。然后,在循环中使用变量n来替代固定的维度值(如28)。这样可以避免索引超出矩阵维度的错误。

希望这对你有所帮助!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^