Matlab lsqnonlin Fit Проблемы с параметрами

Почти уверен, что Matlab просто игнорирует мои настройки параметра решателя ... Я устанавливаю FuctionTolerance с 1e-6 по умолчанию на 1e-10, и решатель останавливается на 1e-8, говоря мне, что он ниже предела 1e-6 по умолчанию.

Я использую команду options = optimoptions('lsqnonlin', 'FunctionTolerance', 1e-10). Любые идеи?

Вывод командного окна ниже:

options = 

  lsqnonlin options:

   Options used by current Algorithm ('trust-region-reflective'):
   (Other available algorithms: 'levenberg-marquardt')

   Set properties:
           FunctionTolerance: 1.0000e-10

   Default properties:
                   Algorithm: 'trust-region-reflective'
              CheckGradients: 0
                     Display: 'final'
    FiniteDifferenceStepSize: 'sqrt(eps)'
        FiniteDifferenceType: 'forward'
         JacobianMultiplyFcn: []
      MaxFunctionEvaluations: '100*numberOfVariables'
               MaxIterations: 400
         OptimalityTolerance: 1.0000e-06
                   OutputFcn: []
                     PlotFcn: []
    SpecifyObjectiveGradient: 0
               StepTolerance: 1.0000e-06
         SubproblemAlgorithm: 'factorization'
                    TypicalX: 'ones(numberOfVariables,1)'
                 UseParallel: 0


Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the default value of the function tolerance.

<stopping criteria details>

Optimization stopped because the relative sum of squares (r) is changing
by less than options.FunctionTolerance = 1.000000e-06.

Optimization Metric                                  Options
relative change r =   6.50e-08             FunctionTolerance =   1e-06 (default)

person Trojanian    schedule 19.01.2017    source источник
comment
FunctionTolerance не подходит для lsqnonlin. Вместо этого используйте TolFun   -  person AVK    schedule 19.01.2017
comment
Это не работает. Насколько я понимаю, это синонимы.   -  person Trojanian    schedule 19.01.2017
comment
Является ли это значение 1E-8 значением функции, размером шага, максимальной нормой градиента или чем-то еще? Есть несколько значений, которые могут остановить итерации.   -  person TroyHaskin    schedule 19.01.2017
comment
@ Трой, я все изменил и получил ту же проблему. Теперь я понял, в чем проблема... Я отправлю ответ.   -  person Trojanian    schedule 20.01.2017


Ответы (2)


Команда options = optimoptions('lsqnonlin', 'FunctionTolerance', 1e-10) сама по себе не изменяет настройки.

options — это переменная, в которой есть некоторые параметры настройки, и ее необходимо передать в вызов функции для активного изменения параметров.

optimisedParameters = lsqnonlin(functionToMinimise, initialParameters, [], [], options)

person Trojanian    schedule 20.01.2017

Попробуйте уменьшить FiniteDifferenceStepSize, например,

options = optimoptions('lsqnonlin', 'FunctionTolerance', 1e-10, 'FiniteDifferenceStepSize',1e-6)

или даже меньший размер шага конечной разности.

person Helmhlotz    schedule 09.07.2017