for循环中的条件求和

时间:2013-04-27 01:48:03

标签: matlab

我需要在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.任何建议?

3 个答案:

答案 0 :(得分:0)

此处的问题是,您始终将tau(l)重置为tau(l-1),因为当{= 1 34且k == 34时,else条件将始终执行,i值1}}无关紧要。

我认为,如果您将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

答案 1 :(得分: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

答案 2 :(得分: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