【问题标题】:Summation with conditions in for loopfor循环中的条件求和
【发布时间】:2013-04-27 13:09:59
【问题描述】:

我需要在 MATLAB 中计算以下内容:

基本上,它是一个矩阵的总和,但不包括 i=j 和 k = i 或 j 的实例。 我将其编码如下:

for l=2:1001;
tau1(1) = 0;
for i = 1:34
    for j = 1:34
        for k = 1:34
            if j ~= i & k ~= i & k ~= j
                tau1(l) = tau1(l-1) + TecCoef1(j,i)*TecCoef1(k,i)*herf1(j)*herf1(k);
            else
                tau1(l) = tau1(l-1);
            end
        end
    end
end
end

代码本身很好。但是,我需要计算 1000 次迭代。这就是我遇到问题的地方。我只是得到 1000 个零,很可能是因为我将 tau(1) 初始化为 0。有什么建议吗?

【问题讨论】:

  • 你能告诉我们w和d的尺寸吗?
  • w,又名 TecCoef1 是一个 34*34 的非对称权重矩阵。 d,又名 herf1 是一个 34*1 的向量。

标签: matlab


【解决方案1】:

基本上,正如其他答案中所述,您可能不需要else 子句。

此外,如果您正在处理大型矩阵,将j~=i 条件转移到公式中指定的位置(上一级)应该可以节省一些计算时间:

for l=2:1001;
    tau1(1) = 0;
    for i = 1:34
        for j = 1:34
            if j~=i
                for k = 1:34
                    if k~=i && k~=j
                        tau1(l) = tau1(l-1) + TecCoef1(j,i)*TecCoef1(k,i)*herf1(j)*herf1(k);
                    end
                end
            end
        end
    end
end

【讨论】:

    【解决方案2】:

    您是否正在尝试做这样的事情?

    tau1(1) = 0;
    for l=2:1001;
        tau1(l) = tau1(l-1);
        for i = 1:34
            for j = 1:34
                for k = 1:34
                    if (j ~= i) && (k ~= i) && (k ~= j)
                        tau1(l) = tau1(l) + TecCoef1(j,i)*TecCoef1(k,i)*herf1(j)*herf1(k);                    
                    end
                end
            end
        end
    end
    

    【讨论】:

      【解决方案3】:

      这里的问题是您总是将tau(l) 重置为tau(l-1),因为您的else 条件将始终在j==34 和k==34 时执行,i 的值无关紧要。

      我认为,如果您将 else 语句中的赋值替换为 continue,这可能会解决您的问题,这只会导致您跳过该迭代 - 或完全删除 else

      例如:

      for l=2:1001;
          tau1(1) = 0;
          for i = 1:34
              for j = 1:34
                  for k = 1:34
                      if j ~= i & k ~= i & k ~= j
                         tau1(l) = tau1(l-1) + TecCoef1(j,i)*TecCoef1(k,i)*herf1(j)*herf1(k);
                      end
                  end
              end
          end
      end
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 2012-10-20
        • 2018-08-02
        • 2018-01-24
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 2016-04-10
        • 1970-01-01
        相关资源
        最近更新 更多