我需要解决以下问题:

对于给定的 p=(x0,y0,z0,w0) 和任意 T。例如,令 p=(0.8,0.1,0.06,0.04) 和 T=-1.2。我需要在给定的约束下找到一个与 p 的距离最小的向量 q=(x,y,z,w)。
我需要一个数值解决方案,我尝试使用 MATLAB,但我遇到了很多问题。我会很高兴得到一些帮助/想法。
谢谢!
我需要解决以下问题:

对于给定的 p=(x0,y0,z0,w0) 和任意 T。例如,令 p=(0.8,0.1,0.06,0.04) 和 T=-1.2。我需要在给定的约束下找到一个与 p 的距离最小的向量 q=(x,y,z,w)。
我需要一个数值解决方案,我尝试使用 MATLAB,但我遇到了很多问题。我会很高兴得到一些帮助/想法。
谢谢!
我试过了(使用 YALMIP(免责声明,由我开发))
x0 = [0.8,0.1,0.06,0.04]';
x = sdpvar(4,1);
objective = (x-x0)'*(x-x0);
constraints = [sum(x)==1, x>=0, sum(x.*log(x)) <= -1.2];
solvesdp(constraints,objective,sdpsettings('solver','fmincon'))
double(x)
ans =
5.356398659440911e-01
1.666760280554157e-01
1.522838063170345e-01
1.454002996834589e-01
fmincon 解决问题绝对没有问题。你的说法“很多问题”有点含糊。我的猜测是你没有注意零熵的定义,即你不能直接计算 xlog(x),你必须检查零并在那里返回分析值,因为你会得到 0*(- inf)=NaN 否则
if x==0
y = 0;
else
y = x*log(x);
end
某些版本的 fmincon 甚至可能需要防止 x 为负值,但上面的版本是绝对最小值。
我想你可以很好地使用 CVX 包在 MATLAB 中最小化它:http: //cvxr.com/cvx/