Effacer les filtres
Effacer les filtres

Is this a bug in lsqcurvefit?

2 vues (au cours des 30 derniers jours)
Catalytic
Catalytic le 29 Mar 2019
Commenté : Matt J le 4 Avr 2019
When I run this simple test of lsqcurvefit (this is R2018a), I get errors.
opts=optimoptions(@lsqcurvefit,'SpecifyObjectiveGradient',true,...
'JacobianMultiplyFcn',@Jfun);
p=lsqcurvefit(@modelfun,2,10,11,[],[],opts)
function [y,Jinfo]=modelfun(p,xdata)
y=xdata-p;
Jinfo=0;
end
function out=Jfun(Jinfo,Y,flag)
out=0;
end
The errors are
Too many input arguments.
Error in lsqcurvefit/jacobmult (line 291)
W = feval(mtxmpy_xdata,Jinfo,Y,flag,XDATA,varargin{:});
Error in snls (line 199)
g = feval(mtxmpy,A,fvec(:,1),-1,varargin{:});
Error in lsqncommon (line 167)
snls(funfcn,xC,lb,ub,flags.verbosity,options,defaultopt,initVals.F,initVals.J,caller,
...
Error in lsqcurvefit (line 271)
lsqncommon(funfcn,xCurrent,lb,ub,options,defaultopt,allDefaultOpts,caller,...
Error in test1 (line 6)
p=lsqcurvefit(@modelfun,2,10,11,[],[],opts)
Looking at line 291 in lsqcurvefit shows that it is in fact trying to pass xdata as a 4th argument to the JacobMult function
function W = jacobmult(Jinfo,Y,flag,varargin)
W = feval(mtxmpy_xdata,Jinfo,Y,flag,XDATA,varargin{:});
end
I can see why it would make sense to pass xdata to the user-provided JacobMult function, in addition to Jinfo,Y, and flag, but nowhere in the documentation does it say to format the JacobMult function this way. Is this a coding bug or a documentation bug?
  1 commentaire
Matt J
Matt J le 4 Avr 2019
Another question, sort of on the same subject. When the JacobianMutiplyFcn is used, what does the solver return for the jacobian output in the following?
[x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqcurvefit(___)

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Physics dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by