Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中的循环和矩阵索引_Matlab_Loops_Matrix Indexing - Fatal编程技术网

matlab中的循环和矩阵索引

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

我使用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 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