我已经使用for循环定义了一个等于0的矩阵(initial_matrix):
I = 5; % e.g number of nodes
for i =1:I
initial_matrix = [0]; // an initial matrix will be generated for each node
end
现在,对于每个节点i,我将考虑所有其他节点,但不考虑节点i本身,并从1中减去每个节点并获取它们的产品:
节点1的:
result = (1 - initial_matrix of node 2) * (1 - initial_matrix of node 3) * ...
(1 - initial_matrix of node 4) * (1 - initial_matrix of node 5)
节点2的:
result = (1 - initial_matrix of node 1) * (1 - initial_matrix of node 3) * ...
(1 - initial_matrix of node 4) * (1 - initial_matrix of node 5)
节点3的:
result = (1 - initial_matrix of node 1) * (1 - initial_matrix of node 2) * ...
(1 - initial_matrix of node 4) * (1 - initial_matrix of node 5)
等等......剩余的2个节点!
任何人都可以告诉我或者告诉我如何实现这一目标吗?谢谢!
答案 0 :(得分:1)
对于每个产品(每个节点),您需要提前拥有所有初始矩阵,因此您应该将初始循环修改为以下内容:
initial_matrix = cell(I, 1);
for i = 1:I
initial_matrix{i} = blah blah... %// Generated for each node
end
然后,您可以添加另一个执行类似以下内容的嵌套循环:
result = cell(I, 1);
for k = 1:I
%// Compute product
result{k} = 1;
for n = setdiff(1:I, k)
result{k} = result{k} * (1 - initial_matrix{n});
end
end
答案 1 :(得分:0)
我认为这些是您需要采取的步骤:
假设所有矩阵具有相同的大小并且您想要进行元素乘法:
initialMatrices
,作为desribed here. cumprod
1-initialMatrices
cumprod
从此结果中提取所需的矩阵要注意的一些事项:
help cumprod
了解正确的方向。答案 2 :(得分:0)
目前,您没有为每个节点创建初始矩阵。如果你想为每个单独的一个,我建议你定义一个结构。所以你将拥有:
I = 5;
for i =1:I
initial_matrix.(sprintf('Node%d',i)) = [0]; % an initial matrix will be generated for each node
end
然后你可以做以下的事情来做你的操作(如果我理解的话):
for i =1:I
numnode=[1:I]
numnode(numnode==i)=[]
for ind = 1:numel(numnode)-1
NewMatrix.(sprintf('Node%d',i)) = (1- initial_matrix.sprintf('Node%d',numnode(ind))))*(1- initial_matrix.(sprintf('Node%d',numnode(ind+1))))
end
end
您可以在定义initial_matrix时使用rand(1)
语句而不是[0]
来验证这是否正确。
我希望我理解正确