あなたの行は(元の質問で)正しく:
KT = 0.;
for i=1:37
dKT = KTc(i,1) *const2^KTc(i,2) *const3^KTc(i,3) *const4^KTc(i,4) *const5^KTc(i,5);
KT = KT + dKT;
end
sprintf('KT = %f10.8', KT);
一方、私は提案します
KT = repmat([1; const2; const3; const4; const5], 1, n) .^ KTc;
KT(1,:) = KTc(1,:);
KT = sum(KT(:));
実際の matlab スタイルのプログラムでループが使用されることはめったにありません。その理由は、私の 2 番目のソリューションはより多くの操作を実行しますが、実際には、プロセッサでの最適なキャッシュ、並列化、およびバックグラウンドでサイレントに実行されるその他の可能な最適化により、より高速であるためです。
更新: (repmat の説明)
repmat は「複製マトリックス」の略だと思います。それが実際に行うことは、2 つの典型的な例で最もよく説明されています。
v_row=[1 2 3];
repmat(v_row, 2, 1);
%result:
[1 2 3
1 2 3]
v_col=[1;2;3]; % I could also write v_col=v_row';
repmat(v_col, 1, 2);
[1 1
2 2
3 3]
一般に、repmat はこれを行います。
repmat(m, 2, 3);
[m m m
m m m]
% if m=[1 2; 3 4] was the value of m, then
[1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4]