所以它看起来像model
期望 beta 是一个 1xN 数组,并返回一个 1xM 数组。因此,您首先需要修改model
以将 de.nP x N 数组用于 beta,并返回一个 de.nP x M 数组(并且您需要对模型中的计算进行矢量化)。
我不确定如何处理 yM。如果只是一个数字,则无需更改任何内容。如果它本身是一个 1xM 数组,那么你需要做
aux=y-repmat(yM, [size(y,1) 1]);
那你想换
ObjVal=dot(aux,aux);
和
ObjVal=dot(aux,aux,2);
我要补充一点,除非您向我们提供可以实际运行的代码(即不依赖于和定义之类的外部内容de
)model
,否则很难给出明确的答案。
编辑哦,我想你需要用类似的东西替换你的 for 循环
F=OF(P1',data);
编辑
我认为以下正确矢量化了您的model
功能:
function y = NSS(beta, mats)
gam1 = (1./beta(:,5)) * mats;
gam2 = (1./beta(:,6)) * mats;
aux1=1-exp(-gam1);
aux2=1-exp(-gam2);
y = repmat(beta(:,1), [1 length(mats)]) + ...
repmat(beta(:,2), [1 length(mats)]) .* (aux1./gam1) + ...
repmat(beta(:,3), [1 length(mats)]) .* (aux1./gam1 + aux1 - 1) + ...
repmat(beta(:,4), [1 length(mats)]) .* (aux2./gam2 + aux2 - 1);
end
同样,由于我无法运行您的代码,我不能 100% 确定这会起作用,但我认为没关系。