0

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

\tau = \sum_{i=1}^n \sum_{j \neq i} \sum_{k \neq i,j} w_{ji}*w_{ki}*d_j*d_k

基本上,它是一个矩阵的总和,但不包括 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。有什么建议吗?

4

3 回答 3

0

这里的问题是您总是重置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
于 2013-04-27T04:34:23.633 回答
0

你想做这样的事情吗?

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
于 2013-04-27T04:38:22.040 回答
0

基本上,如其他答案中所述,您可能不需要该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
于 2013-04-27T05:09:59.977 回答