필터 지우기
필터 지우기

Optimization toolbox: "lsqnonlin" stopped because it exceeded the function evaluation limit

조회 수: 41 (최근 30일)
Hi everyone,
I am using the lsqnonlin from optimization toolbox for a problem. After 88 itterations I am getting my answeres and this msg:
lsqnonlin stopped because it exceeded the function evaluation limit
options.MaxFunEvals=800
As I am not satisfied with the answeres, I am guessing maybe changing the MaxFunEvals to a higher number can help. Could anyone let me know how I can set it in the toolbox? I am not seeing any parameter like this in the options.
Thank you

채택된 답변

John D'Errico
John D'Errico 2018년 11월 20일
편집: John D'Errico 2018년 11월 20일
Note that I don't know which release of MATLAB you are using. But what did you try? This seems clear:
opts = optimoptions('lsqnonlin')
opts =
lsqnonlin options:
Options used by current Algorithm ('trust-region-reflective'):
(Other available algorithms: 'levenberg-marquardt')
Set properties:
No options set.
Default properties:
Algorithm: 'trust-region-reflective'
CheckGradients: 0
Display: 'final'
FiniteDifferenceStepSize: 'sqrt(eps)'
FiniteDifferenceType: 'forward'
FunctionTolerance: 1e-06
JacobianMultiplyFcn: []
MaxFunctionEvaluations: '100*numberOfVariables'
MaxIterations: 400
OptimalityTolerance: 1e-06
OutputFcn: []
PlotFcn: []
SpecifyObjectiveGradient: 0
StepTolerance: 1e-06
SubproblemAlgorithm: 'factorization'
TypicalX: 'ones(numberOfVariables,1)'
UseParallel: 0
Now, nothing stops you from setting:
opts.MaxFunctionEvaluations = 2000
opts =
lsqnonlin options:
Options used by current Algorithm ('trust-region-reflective'):
(Other available algorithms: 'levenberg-marquardt')
Set properties:
MaxFunctionEvaluations: 2000
Default properties:
Algorithm: 'trust-region-reflective'
CheckGradients: 0
Display: 'final'
FiniteDifferenceStepSize: 'sqrt(eps)'
FiniteDifferenceType: 'forward'
FunctionTolerance: 1e-06
JacobianMultiplyFcn: []
MaxIterations: 400
OptimalityTolerance: 1e-06
OutputFcn: []
PlotFcn: []
SpecifyObjectiveGradient: 0
StepTolerance: 1e-06
SubproblemAlgorithm: 'factorization'
TypicalX: 'ones(numberOfVariables,1)'
UseParallel: 0
As you can see, opts now contains the desired value. Pass opts into lsqnonlin to use these settings.
As Walter points out, in older releases, the property name was MaxFunEvals. But the same sort of thing will still apply. You may just need to use the proper property name.
Having said that, frequently when you run out of function evals or iterations, it means your problem is not converging very well. Tht in turn either means that your starting values are particularly poor, or that your problem is fairly ill-posed. In either case, merely increasing the function evals will not really help that much. Essentially, it says that you really need to get better data or a better model or better starting values, each a far better choice than merely increasing the function evals allowed.
  댓글 수: 2
has azz
has azz 2020년 7월 21일
Hi John could you please let me know in which line i can introduce these corrections in my code. thanks

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Problem-Based Optimization Setup에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by