您的台词(在原始问题中)正确:
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 风格的程序中很少使用循环。这样做的原因是,虽然我的第二个解决方案执行了更多操作,但实际上它更快,因为处理器处的缓存更优化、并行化以及其他可能的优化在后台静默完成。
更新:(关于repmat的解释)
我认为 repmat 是“复制矩阵”的缩写。它的真正作用最好用两个典型的例子来解释:
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]