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 回の反復で計算する必要があります。そして、これは私が問題を抱えているところです。おそらく tau(1) を 0 として初期化したことが原因で、1000 個のゼロを取得するだけです。何か提案はありますか?

4

3 に答える 3

0

ここでの問題は、j==34 および k==34 の場合に条件が常に実行されるため、常に にリセットtau(l)していることです。 の値は無関係です。tau(l-1)elsei

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、式に記述されている場所 (1 レベル上) に条件をシフトすると、大きな行列を扱っている場合、計算時間を少し節約できます。

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 に答える