我必须解决问题
为了做到这一点,我目前正在使用 Matlab fmincon
:
FMinValue = @(x) sum(x) + lambda * sum((Omega*mu - x).^2) / 2 + beta * sum((x - gamma_bar).^2) / 2;
GradFMin = @(x) ones(length(x),1) + lambda * (Omega*mu - x) + beta * (x - gamma_bar);
Fmin = @(x) FMin(x, FMinValue, GradFMin); % merges FMinValue and GradFMin so that fmincon can handle it
HessianFPlusLagrangianPart = @(x, lagrange_multiplier) spdiags((beta-lambda)*ones(length(x),1),0,length(x),length(x));
options = optimoptions('fmincon', 'Algorithm', 'interior-point' , 'GradObj', 'on', 'Hessian', 'user-supplied', 'HessFcn', HessianFPlusLagrangianPart);
x = fmincon(Fmin, ones(length(gamma_bar), 1), [], [], P_bar, c_bar, zeros(length(gamma_bar), 1), [], [], options);
这里和是可以相等的固定参数。如果是这种情况,则这意味着我的 hessian 矩阵也为零。当然,我得到了 Matlab 警告Warning: Matrix is close to singular or badly scaled
,但在这种情况下,零粗麻布是正确的。
有什么建议在这种情况下该怎么做?不幸的是,我无法更改为,lsqnonlin
因为我的目标函数中有线性项sum(x)
。而且我不能使用另一种算法来代替interior-point
,因为我同时有界和线性约束。
如何克服这个问题并使其适用于和的所有选择?