-2

我通过使用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 个节点!

谁能告诉我或提示我如何实现这一目标?谢谢!

4

3 回答 3

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
于 2013-09-11T08:58:15.877 回答
0

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

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

  1. 将它们全部连接成一个大矩阵initialMatrices,如此处所述。
  2. 适用cumprod1-initialMatrices
  3. 如果您使用cumprod了从该结果中提取所需的矩阵

需要注意的一些事项:

  • 也许通过减一或删除它来预处理第一个初始矩阵。
  • 确保在正确的“方向”上构建总矩阵。检查help cumprod正确的方向是什么。
于 2013-09-11T09:13:25.907 回答
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

rand(1)您可以通过使用语句而不是[0]在定义 initial_matrix 时验证这是否正确。

我希望我正确地理解了你

于 2013-09-11T09:28:11.277 回答