MATLAB: Matlab2012a vs matlab20111b. Why does the latter produces an error message

r2011b

Dear all,
I use matlab 2012a and matlab 2011b
I have constructed a code and whenever I run it in matlab 2012a everything runs normal Yet, whenever I run it in matlab2011b I obtain the following error which is related to the fminunc function
??? Error using ==> roots at 28
Input to ROOTS must not contain NaN or
Inf.
Error in ==>
lineSearch>globalMinimizerOfPolyInInterval
at 304
stationaryPoint = roots([3*coeff(1)
2*coeff(2) coeff(3)]);
Error in ==>
lineSearch>pickAlphaWithinInterval at 279
z =
globalMinimizerOfPolyInInterval(zlb,zub,coeff);
Error in ==> lineSearch>sectioningPhase at
193
alpha =
pickAlphaWithinInterval(brcktEndpntA,brcktEndpntB,a,b,f_a,fPrime_a,f_b,fPrime_b);
Error in ==> lineSearch at 55
[alpha,f_alpha,grad,exitflag,funcCount]
= sectioningPhase(funfcn, ...
Error in ==> fminusub at 208
[alpha,f,grad,exitflagLnSrch,funcCountLnSrch]
= ...
Error in ==> fminunc at 376
[x,FVAL,GRAD,HESSIAN,EXITFLAG,OUTPUT] =
fminusub(funfcn,x, ...
Error in ==> testxa2 at 252
[xxx,fval,exitflag,output,gradient,H]=fminunc('CES_mode7cutDCsvk',x00,options,...
Why is this happening? Do I neeed to update this function within matlab2011b?
Regards,

Best Answer

  • I think the cause here is that fminunc was updated in R2012a to attempt to recover when the objective function returns NaN or Inf: http://www.mathworks.com/help/toolbox/optim/rn/bs86_xz.html#bs87ab0
    My guess is that at some point your objective function 'CES_mode7cutDCsvk' is returning a value of Inf or NaN. In 12a fminunc attempts to recover from this, but in 11b it just causes an error.
    If you need to use 11b, check out this thread for some things you could try: http://www.mathworks.com/matlabcentral/newsreader/view_thread/270387
    Of course, if you can use 12a that would be best since the solver has been enhanced.