When using optimization tools I usually keep my objective function and gradient function as separate subfunctions and then use 'deal' to combine them as output of one function (see example 'f_opt' below).
This has always worked fine, but now that i try to run 'DerivativeCheck' it gives me an error:
??? Error using ==> deal at 38 The number of outputs should match the number of inputs.
I dont understand why matlab suddenly has problems understanding what i want. Can somebody explain why and give a solution?? (of course i can make subfunction instead of a handle, but say i wanted to keep my 'deal')
Here is an example program: x1 and x2 solve without problem, but x3 does not give a solution but the error.
function main_fun_grad();f_opt=@(x)deal(fun_obj(x),fun_grad(x));x0=1;x1=fminunc(f_opt,x0,optimset('GradObj','on'))x2=fminunc(@fun_all,1,optimset('GradObj','on','DerivativeCheck','on'))x3=fminunc(f_opt,x0,optimset('GradObj','on','DerivativeCheck','on'))end%%auxiliary
function [f]=fun_obj(x)f = x^2;endfunction [g]=fun_grad(x);g=2*x;endfunction [f, g]=fun_all(x)f = x^2;g = 2*x;end
Best Answer