fminunc不适用于两个以上变量的符号函数

时间:2018-07-15 19:44:43

标签: matlab optimization symbolic-math

我正在尝试优化(不受约束)目标函数obj。由于各种原因,我需要采用具有符号函数的方法,然后使用matlabFunction将其转换为函数句柄。

当我使用两个以上的符号变量时,收到以下错误消息:

Error in
symengine>@(in1)deal(in1(1,:).^2+in1(2,:).^2+in1(3,:).^2,[in1(1,:).*2.0;in1(2,:).*2.0;in1(3,:).*2.0])
Error in fminunc (line 310)
      [f,GRAD,HESS] = feval(funfcn{3},x,varargin{:});
Error in newmethod (line 23)
[xfinal,fval,exitflag,output] =
fminunc(objfun,[0;0;1.15*pi/2],options)
Caused by:
    Failure in initial objective function evaluation. FMINUNC
    cannot continue.

我的代码如下:

Xsym=sym('X',[3,1]);
obj=Xsym(1)^2+Xsym(2)^2+Xsym(3)^2;
gradobj=jacobian(obj,Xsym).';
hessobj=jacobian(gradobj,Xsym);
objfun=matlabFunction(obj,gradobj,'vars',{Xsym},'Outputs',{'f','gradf'});
options = optimoptions('fminunc', ...
    'SpecifyObjectiveGradient', true, ...
    'HessianFcn', 'objective', ...
    'Algorithm','trust-region', ...
    'Display','final');
[xfinal,fval,exitflag,output] = fminunc(objfun,[0;0;1.15*pi/2],options)

0 个答案:

没有答案