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