Почему 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)
,
Это означает, что вы указали значение индекса, превышающее предел, назначенный вашей матрице назначенных измерений. Например, "для оператора, выполняющего 10 циклов, и вы присвоили значение индекса 301, в то время как максимальный размер матрицы равен 300, это приведет к ошибке" индекс превышает размеры матрицы "".