在 MATLAB 中使用 fmincon 的对数约束

问题描述

我想在 MATLAB 中使用 fmincon 来最小化以下最小化问题

enter image description here

当我用线性约束 sum(x) = 5 替换对数(非线性)约束时,我编写的以下代码(策略 1)解决了这个问题。那么如何更改它以引入对数约束?我在这里屏蔽了。

MATLAB 代码(策略 1):

x0 = zeros(3,1);
Sigma = rand(3,3); %take any matrix

Obj_func = @(x) sqrt(x' * Sigma * x);

options = optimoptions('fmincon','Algorithm','interior-point','MaxFunctionEvaluations',1e100);

[x,FVAL,EXITFLAG,OUTPUT] = fmincon(Obj_func,x0,[],ones(1,3),5,zeros(3,1),inf(3,options);

另一种方法(参见This reference)如下所示,但我确定我是否正确。 (我需要帮助)。

MATLAB 代码(策略 2):

fun = @(x)sqrt(x' * Sigma * x);

nonlcon = @my_function;
x0 = [0 0 0]';
A = []; % No other constraints
b = [];
Aeq = [];
beq = [];
lb = zeros(3,1);
ub = inf(3,1);
w = fmincon(fun,A,b,Aeq,beq,lb,ub,nonlcon)


function [const,ceq] = my_function(x)
const(1) = 5 - sum(log(x));
ceq = [];
end

任何帮助将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)