matlab中的循环和矩阵索引
我使用for循环定义了一个等于0的矩阵(初始_矩阵),如下所示:matlab中的循环和矩阵索引,matlab,loops,matrix-indexing,Matlab,Loops,Matrix Indexing,我使用for循环定义了一个等于0的矩阵(初始_矩阵),如下所示: 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
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个节点
有谁能告诉我或给我一些提示,说明如何实现这一目标?谢谢 对于每个产品(每个节点),您需要提前获得所有初始矩阵,因此您应该将初始循环修改为以下内容:
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
我认为你需要采取以下步骤: 假设所有矩阵大小相同,并且您希望执行元素乘法:
initialMatrix
,如下所示1-initialMatrix
cumprod
从该结果中提取所需的矩阵- 也许通过做一减或者删除来预处理第一个初始矩阵
- 确保按照正确的“方向”构建总矩阵。检查
,了解正确的方向help cumprod
I = 5;
for i =1:I
initial_matrix.(sprintf('Node%d',i)) = [0]; % an initial matrix will be generated for each node
end
然后,您可以执行以下操作(如果我理解正确的话):
在定义初始矩阵时,可以使用rand(1)
语句而不是[0]
来验证这是否正确
我希望我理解正确这很难理解。你能举个例子吗?@Dan。上述示例适用于考虑节点1的情况。现在,如果我考虑节点2:那么我应该得到:结果=(1 -初始化节点1的矩阵)*(1 -初始化节点3的矩阵)*…(1-节点4的初始_矩阵)*(1-节点5的初始_矩阵)…类似地,对于节点3等,这不是一个示例。如果下面的答案不是你要找的,你应该添加你的问题(即不是评论)一个数字小的工作例子。你真的想要矩阵乘积,或者EntEngple乘积?@ EiTiT,但是这不会为节点2运行等等…COZ对于节点1,我会考虑2,3,4和5,然后对于节点2:1,3,4和5,对于节点3:1,2,4和5…等等…因此,对于每个节点,你想考虑所有节点,但本身?请花时间把这个丢失的信息添加到问题中。是的,我想考虑所有的节点都期待这个问题。@user2762192我已经更新了答案。@EitanT:好的。我正在检查代码,但乘法部分在哪里?@伊坦刚刚意识到我的错误并修改了它。还有一件事:虽然它确实有效,但在我看来,使用结构和动态引用是不必要的过度复杂化。在这里使用单元阵列肯定会更干净。
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