我有一个三个未知的系统,让我们说x
,y
,z
。我想解决以下非线性系统:
f1(x,y,z) = 0
f2(x,y,z) = 0
由于我有3个未知但有2个方程,我想结果说z
最大化。
有三个限制因素:
x > 0
y > 0
z > 0
我该如何解决这个问题?总结一下:
修改
这是我到目前为止使用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
)。我不知道我是否写得正确
答案 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