【发布时间】:2015-11-20 19:35:46
【问题描述】:
我从以下简单的优化问题开始:
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
但是,我需要在max(-[Obj]) 中为Obj 提供可变数量的输入函数。在上面的例子中,我有三个函数,即
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可以变化20多个。很难手动输入所有功能。
【问题讨论】:
标签: matlab convex-optimization