📄 fmincon_con.m
字号:
function [g,geq] = fmincon_con(x,dummy1,dummy2,dummy4)
persistent interfacedata
persistent monomtable
persistent nonlinearindicies
persistent linearindicies
persistent xx
if nargin == 4
interfacedata = dummy4;
monomtable = interfacedata.monomtable;
nonlinearindicies = interfacedata.nonlinearindicies;
linearindicies = interfacedata.linearindicies;
xx=ones(1,size(interfacedata.monomtable,2));
return
end
xx(linearindicies) = x(:)';
for i = 1:length(nonlinearindicies)
xx(nonlinearindicies(i)) = prod(xx.^monomtable(nonlinearindicies(i),:));
end
if ~isempty(interfacedata.Anonlinineq)
A = interfacedata.Anonlinineq;
b = interfacedata.bnonlinineq;
g = A*xx(:)-b;
else
g = [];
end
if ~isempty(interfacedata.Anonlineq)
Aeq = interfacedata.Anonlineq;
beq = interfacedata.bnonlineq;
geq = Aeq*xx(:)-beq;
else
geq = [];
end
K = interfacedata.K;
top = 1;
if K.q(1) > 0
for i = 1:length(K.q)
Axcd = interfacedata.F_struc(top:top+K.q(i)-1,:)*[1;xx(:)];
g = [g;-(Axcd(1)^2-norm(Axcd(2:end),2)^2)];
top = top + K.q(i);
end
end
if K.s(1) > 0
for i = 1:length(K.s)
CminusA = interfacedata.F_struc(top:top+K.s(i)^2-1,:)*[1;xx(:)];
CminusA = reshape(CminusA,K.s(i),K.s(i));
[R,p] = chol(CminusA);
if p
% Extend beyond singularity with linear function. Hack...
%gi = -det(CminusA);
%gi = (log(1e-2)+(gi-1e-2)/1e-2);
%g = [g;(gi)];
g = [g;-min(eig(CminusA))];
else
g = [g;-log(det(CminusA))];
%g = [g;- 2*sum(log(diag(CminusA)))]; % -logdet(cminusA)
end
top = top + K.s(i)^2;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -