次の単純な最適化問題から始めました。
F=@(L) max(-[log(L(1)/(L(1)+1)) log(L(2)/(L(2)+1))+log(1-L(1)) log(L(3)/(L(3)+1))+log(1-L(1))+log(1-L(2))]);
[L,fval]=fmincon(F,[0.5 0.5 0.5],[],[],[],[],[0;0;0],[1;1;1])
これにより答えが得られます:L = 0.2554 0.3759 0.7785
そしてfval = 1.5925
Obj
ただし、 in には可変数の入力関数が必要ですmax(-[Obj])
。上記の例では、次の 3 つの関数があります。
Obj=log(L(1)/(L(1)+1)) log(L(2)/(L(2)+1))+log(1-L(1)) log(L(3)/(L(3)+1))+log(1-L(1))+log(1-L(2))
次のコードを使用Obj
して、関数の数が依存する生成を行いましたM
。
M = 3;
for i = 1:M
L(i) = sym(['L(' num2str(i) ')'])
end
tempL = log(1-L);
for m=1:M
Obj(1,m) = log((L(m))/(1+L(m))) + sum(tempL(1:m-1));
end
Obj
Obj
これは上記の例とまったく同じですが、これObj
を次の最適化関数に渡すと、サポートされません。
F=@(L) max(-[Obj]);
[L,fval]=fmincon(F,[0.5 0.5 0.5],[],[],[],[],[0;0;0],[1;1;1])
誰かがこの問題を解決するのを手伝ってくれますか? M
すべての機能を手動で入力するのは困難です 。