Why is not possible to put the SpecifyObjectiveGradient option to true in case of Levenberg-Marquardt?
조회 수: 8 (최근 30일)
이전 댓글 표시
As I know from the theory, the Levenberg-Marquardt algorithm also needs to compute the Gradient and the Hessian. If I set the SpecifyObjectiveGradient property to true and I define the gradients explicitly, the lsqnonlin command chooses the trust-region-reflective method instead of the Levenberg-Marquardt to solve the problem. I don't understand, why I cannot reduce the number of function evaluations for the Levenberg-Marquardt algorithm by defining the gradient? Thanks for your help!
댓글 수: 0
답변 (1개)
Elizabeth Reese
2017년 9월 6일
The default algorithm for lsqnonlin is the trust-region-reflective method. In order to use the Levenberg-Marquardt algorithm and the SpecifyObjectiveGradient flag, you need you specify both in the options for the lsqnonlin problem. For example:
options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt','SpecifyObjectiveGradient',true);
Then you can specify the gradient using the input function described at the link below.
Finally, you can call lsqnonlin as with the following syntax:
x = lsqnonlin(fun,x0,lb,ub,options);
댓글 수: 2
Alan Weiss
2017년 9월 11일
I cannot reproduce your observation. When I run lsqnonlin with Algorithm = 'levenberg-marquardt' and SpecifyObjectiveGradient = true, and use the debugger to follow the code path that lsqnonlin takes, then I see it using the Levenberg-Marquardt algorithm.
Alan Weiss
MATLAB mathematical toolbox documentation
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!