为什么MATLAB显示;索引超出了矩阵维度。”;错误

为什么MATLAB显示;索引超出了矩阵维度。”;错误,matlab,indexing,bayesian-networks,Matlab,Indexing,Bayesian Networks,我不熟悉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, l

我不熟悉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

root(rr)
的值大于
节点中的元素数

“索引超出了矩阵维度”是在使用超出范围的某个值时发生的。例如,如果我有N=[1,2,3],那么如果我试图调用N(4),那么我将得到“索引超过矩阵维数”。记住,matlab中的矩阵是从索引1开始的,而不是从0开始的

确保在使用之前检查矩阵的大小

size(yourmatrix)

乍一看,您的错误应该出现在
根(rr)
节点(根(rr).values)

这意味着您指定的索引值大于矩阵指定维度的限制。例如,“对于执行10个循环的语句,当最大矩阵维数为300时,您分配了一个索引值301,这将给您一个错误“索引超过矩阵维数”

您不理解错误的哪一部分,“索引”或“矩阵维数”"? 我们无法提供帮助,因为我们没有你的意见。nodes=0x1 struct root=1 values=1x4 cell CPT=1x4 cell这些是我的输入。