matlab 重写函数

pcww981p  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(147)

在下面的代码中,我想替换函数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

但不幸的是,它并没有奏效。我做错了什么?
错误消息是“输入参数不足。

zpgglvta

zpgglvta1#

在您的第一个代码片段中,f是一个函数句柄,而在第二个代码片段中,它是一个函数
通过调用x=fmincon(@f,x0,[],[],[],[],lb,[],nonlincon),可以轻松地使其成为fmincon要调用的函数句柄
否则,matlab会尝试调用f并将其输出提供给fmincon,这不是您想要做的。

相关问题