我正在尝试优化(不受约束)目标函数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)