Почему MATLAB показывает "Индекс превышает размеры матрицы". ошибка

Я новичок в MATLAB и пытаюсь изучать байесовские сети. Запуск этого кода показывает ошибку

Показатель превышает размеры матрицы.

в соответствии

( for r = 1:length(nodes(root(rr)).values))

Пожалуйста, помогите мне с этим.

Заранее спасибо

function [nodes, edges] = bnMsgPassInitiate(nodes, edges, root)
N = numel(nodes);

for X = 1:N % for every node

nodes(X).lambda = ones(1, length(nodes(X).values)); % l(x) = 1

Z = nodes(X).parents;
for pa = 1:length(Z) % for each parent of X
    edges(Z(pa),X).lambdaX = ones(1, length(nodes(Z(pa)).values)); % lX(z) = 1
end  

Y = nodes(X).children;
for ch = 1:length(Y) % for each child of X
    edges(X,Y(ch)).peyeX = ones(1, length(nodes(X).values)); % peyeY(x)
end

end

numRoots = length(root);
for rr = 1:numRoots
   **for r = 1:length(nodes(root(rr)).values)**
    nodes(root(rr)).peye(r) = nodes(root(rr)).CPT(r);
    nodes(root(rr)).P(r) = nodes(root(rr)).CPT(r);
end
childrenR = nodes(root(rr)).children;
for cr = 1:length(childrenR)
    [nodes, edges] = bnMsgPassSendPiMsg(root(rr), childrenR(cr), nodes, edges, []); %A = []
end
end

3 ответа

"Индекс превышает размеры матрицы", когда вы работаете с каким-то значением, выходящим за границы. Например, если у меня N = [1,2,3], то, если я попытался вызвать N(4), я получу "Индекс превышает размеры матрицы". И помните, матрица в Matlab начиналась с индекса 1, а не с 0.

Убедитесь, что вы проверили размер вашей матрицы, прежде чем работать с ней, используя

size(yourmatrix)

На первый взгляд, ваша ошибка должна быть в root(rr) или же nodes(root(rr).values),

Значение root(rr) больше, чем количество элементов в nodes,

Это означает, что вы указали значение индекса, превышающее предел, назначенный вашей матрице назначенных измерений. Например, "для оператора, выполняющего 10 циклов, и вы присвоили значение индекса 301, в то время как максимальный размер матрицы равен 300, это приведет к ошибке" индекс превышает размеры матрицы "".

Другие вопросы по тегам