필터 지우기
필터 지우기

set Precision in lsqcurvefit

조회 수: 3 (최근 30일)
Marco Gaetani d'Aragona
Marco Gaetani d'Aragona 2020년 1월 16일
댓글: Matt J 2020년 1월 16일
Hi,
i want to set the precision of the output in terms of significant digits. In particular, i want to achieve a precision of 0.01. Setting the initial value of variables, and the options as follows:
a0 = [0.01;0.01;0.01];
options = optimoptions('lsqcurvefit','Algorithm','levenberg-marquardt' ,'MaxFunctionEvaluations',10000,'MaxIterations',5000);
lb = [];
ub = [];
[ahat,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(predicted,a0,x,y,lb,ub,options);
For instance, the output coefficients are ahat=[2.002 0.0251 0.1253]
I could round to specified significan digits after optimization of the regression. However, I would like to set the precision initially in order to achieve the best solution for the specified precision.
Can anyone help me with this issue?
Thanks in advance

답변 (2개)

Matt J
Matt J 2020년 1월 16일
편집: Matt J 2020년 1월 16일
You cannot do such a thing with lsqcurvefit. What you describe would require that you rewrite your objective function and bounds in terms of different parameter units, thus scaling the parameters (in this case by a factor of 100) so that your precision requirement becomes equivalent to constraining the parameter values to integers. You would then use an optimization routine that supports integer constraints, like ga() or maybe surrogateopt(), to implement the least squares minimization.
These optimizers tend to be less reliable than non-integer constrained algorithms, so I tend to think you'd be making a rather doubtful tradeoff unless post-rounding is really, really unacceptable to you for some strong reason.
  댓글 수: 1
Matt J
Matt J 2020년 1월 16일
These optimizers tend to be less reliable than non-integer constrained algorithms, so I tend to think you'd be making a rather doubtful tradeoff
Although, you could try a 2-step refinement approach. First, do the fit using lsqcurvefit with post-rounding. Then, do precision-constrained optimization using ga as I outlined above, but include the result from lsqcurvefit in the initial population. That would improve the reliability greatly, I suspect.

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


Spencer Chen
Spencer Chen 2020년 1월 16일
Check out:
doc optimoptions
I think something like OptimalityTolerance is what you are looking for.
Blessings,
Spencer

카테고리

Help CenterFile Exchange에서 Linear Programming and Mixed-Integer Linear Programming에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by