刚开始用matlab和向量化,FF到问题:
该怎么办:
%n,t are vectors(1D arrays) EDIT: these are column vectors.
k=9;
i=1;
kv = 0.6*k:0.2*k:1.4*k;
[zs,zb] = size(k);
error1 = zeros(zs,1);
for k2 = kv
error1(i,1) = error_km(n,t,kv(i));
i= i+1;
end
其中 error_km 是:(n 和 t 大小相同)
function [ returnV] = error_km( n,t,k )
returnV = 0
[a,b] = size(n);
Nt = zeros();
for i=2:a
Nt(i,1) = (n(i-1,1)^-1 + k*(t(i,1)-t(i-1,1)))^-1;
error1 = Nt(i,1) - n(i,1);
returnV = returnV + error1*error1;
end
整个程序大约需要 3 到 4 分钟,对于小型测试用例,我能够制作和理解循环的简单矢量化替代方案,但我无法对这个循环进行矢量化,
有什么指导吗?
更新:在error_km中,现在我正在使用:
Nt = (n(1:a-1,1).^-1 + (diff(t(:,1))).*k).^-1 - n(2:a,1);
Nt = Nt.^2;
returnV = sum(Nt);
效果很好,但仍然在主程序中我被迫使用循环来迭代 kv,如果我使用 kv(:) 它每次都将向量传递给函数而不是单个值。在 main 中使用了这个: error1 = error_km(n,t,kv.*1);
是否也可以摆脱主循环?
EDIT2,索恩:
要摆脱主循环,只需使用 arrayfun