MATLAB - 求解多变量约束优化

时间:2014-08-07 20:25:56

标签: optimization matlab

我有一个三个未知的系统,让我们说xyz。我想解决以下非线性系统:

f1(x,y,z) = 0
f2(x,y,z) = 0

由于我有3个未知但有2个方程,我想结果说z最大化。

有三个限制因素:

x > 0
y > 0
z > 0

我该如何解决这个问题?总结一下:

  • 我有3个未知数
  • 我有2个等式和3个约束
  • 我希望其中一个未知数尽可能大

修改

这是我到目前为止使用fmincon

所做的
% objective function 
% Want to minimize the function 1/z (so maximize the variable)

function f = objFun(arg)
x = arg(1);
y = arg(2);
z = arg(3);

f = 1/z;
end

% My two nonlinear equalities f1, f2
function [c, ceq] = NLPart(arg, someInput)
% dont want to get into the detail of the equation since it is
% very long, but at the end:
x = arg(1);
y = arg(2);
z = arg(3);

c = 0;

% The equations below are dummy. they are just some nonlinear combination of the three 
ceq(1) = x*y*z;
ceq(2) = x/y + z^2;
end

然后在MATLAB中,我运行了以下内容:

system = @ (arg) NLPart(arg, [1 2 3]);
obj = @ (arg) objFun(arg);

fmincon(obj, init_state, [], [], [], [], [0 0 0], [], system);

这给了我以下错误:

  

使用svd输入到SVD时出错不得包含NaN或Inf。

     

pinv出错(第29行)[U,S,V] = svd(A,0);

     

qpsub中的错误(第463行)                       projSD = pinv(projH)*( - Zgf);

     

nlconst中的错误(第618行)           [SD,lambda,exitflagqp,outputqp,howqp,ACTIND] ......

     

fmincon出错(第794行)       [X,FVAL,LAMBDA,EXITFLAG,OUTPUT GRAD,粗麻布] = ...

BTW,我的目标1/z,我希望它等于零(通过最大化z)。我不知道我是否写得正确

1 个答案:

答案 0 :(得分:3)

您基本上希望在目标函数定义的情况下进行优化:

h(x,y,z) = z;

具有以下非线性等式约束:

f1(x,y,z) = 0;
f2(x,y,z) = 0;

以下较低的界限:

x > 0, y > 0, z > 0

是的,您可以在MATLAB中执行此操作。你应该能够使用' fmincon'在以下语法中:

x = fmincon(fun,x0,[],[],[],[],lb,[],nonlcon)

x0是一个三元素向量,结果也将采用相同的格式,它将为您提供x,y和z的值。有关更多详细信息,请查看fmincon的文档:  http://www.mathworks.com/help/optim/ug/fmincon.html