したがって、model
ベータが 1xN 配列であると想定し、1xM 配列を返すように見えます。model
そのため、最初に、ベータ版の de.nP x N 配列を取得し、de.nP x M 配列を返すように変更する必要があります (モデル内の計算をベクトル化する必要があります)。
yM をどうしたらよいかわかりません。単なる数字の場合は、何も変更する必要はありません。それが1xM配列自体である場合は、次のことを行う必要があります
aux=y-repmat(yM, [size(y,1) 1]);
次に、交換したい
ObjVal=dot(aux,aux);
と
ObjVal=dot(aux,aux,2);
de
実際に実行できるコード (つまり、 andの定義のような外部のものに依存しないコード) を提供しない限り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% 確信が持てませんが、問題ないと思います。