对于matlab中的循环和矩阵索引问题

时间:2013-09-11 08:38:29

标签: matlab loops matrix-indexing

我已经使用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个节点!

任何人都可以告诉我或者告诉我如何实现这一目标吗?谢谢!

3 个答案:

答案 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)

我认为这些是您需要采取的步骤:

假设所有矩阵具有相同的大小并且您想要进行元素乘法:

  1. 将所有这些连接成一个大矩阵initialMatrices,作为desribed here.
  2. cumprod
  3. 上应用1-initialMatrices
  4. 如果您使用cumprod从此结果中提取所需的矩阵
  5. 要注意的一些事项:

    • 也许通过做一个减去它来预处理第一个初始矩阵,或者删除它。
    • 确保在正确的“方向”上构建总矩阵。检查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]来验证这是否正确。

我希望我理解正确