为什么我在matlab fmincon函数中得到错误?

bnl4lu3b  于 2023-01-31  发布在  Matlab
关注(0)|答案(1)|浏览(618)

我一点也不擅长matlab,我在找有约束的函数的最小值。
我尝试逐行使用文档中的示例(https://www.mathworks.com/help/optim/ug/optimization-toolbox-tutorial.html-part约束优化示例:用户提供的梯度)
我已经尝试了以下代码:

f = @(x,y) x.*exp(-x.^2-y.^2)+(x.^2+y.^2)/20;
g = @(x,y) x.*y/2+(x-2).^2+(y-2).^2/2-4;

x0 = [2 ,0];
options = optimoptions('fmincon','Algorithm','interior-point','Display','iter');
gfun = @(x,y) deal(g(x,y),[]);
[x,fval,exitflag,output] = fmincon(f,x0,[],[],[],[],[],[],gfun,options);

这是控制台输出:

>> Untitled4
Not enough input arguments.

Error in Untitled4>@(x,y)x.*exp(-x.^2-y.^2)+(x.^2+y.^2)/20 (line 1)
f = @(x,y) x.*exp(-x.^2-y.^2)+(x.^2+y.^2)/20;

Error in fmincon (line 552)
      initVals.f = feval(funfcn{3},X,varargin{:});

Error in Untitled4 (line 7)
[x,fval,exitflag,output] = fmincon(f,x0,[],[],[],[],[],[],gfun,options);

Caused by:
    Failure in initial objective function evaluation. FMINCON cannot continue.

我不明白-我的功能出了什么问题?

ohtdti5x

ohtdti5x1#

您错过了文档中定义fun的部分,并且您错过了gfun的定义。(两者都是单个变量x的函数是很重要的)
下面是工作代码:

f = @(x,y) x.*exp(-x.^2-y.^2)+(x.^2+y.^2)/20;
g = @(x,y) x.*y/2+(x-2).^2+(y-2).^2/2-4;

x0 = [2 0];

options = optimoptions('fmincon','Algorithm','interior-point','Display','iter');

fun = @(x) f(x(1),x(2));
gfun = @(x) deal(g(x(1),x(2)),[]); 

[x,fval,exitflag,output] = fmincon(fun,x0,[],[],[],[],[],[],gfun,options);

相关问题