在下面的代码中,我想替换函数f的定义
f=@(x)-x(1)*x(2)*x(3);
x0=[1 1 1];
lb=[0 0 0];
nonlincon=@constr;
x=fmincon(f,x0,[],[],[],[],lb,[],nonlincon)
function [c,ceq] = constr(x)
c = [2*x(1)*x(2)+2*x(1)*x(3)+2*x(2)*x(3)-100 ; 1-x(1)*x(2)];
ceq = [];
end
我把它换成
function erg = f(x)
erg = -x(1)*x(2)*x(3);
end
但不幸的是,它并没有奏效。我做错了什么?
错误消息是“输入参数不足。”
1条答案
按热度按时间zpgglvta1#
在您的第一个代码片段中,
f
是一个函数句柄,而在第二个代码片段中,它是一个函数。通过调用
x=fmincon(@f,x0,[],[],[],[],lb,[],nonlincon)
,可以轻松地使其成为fmincon
要调用的函数句柄否则,matlab会尝试调用
f
并将其输出提供给fmincon
,这不是您想要做的。