Кривая Левенберга Маркварда, подходящая MATLAB с несколькими параметрами

Я пытаюсь приспособить огромную функцию с четырьмя неизвестными параметрами к моим данным методом наименьших квадратов Левенберга-Марквардта в Matlab. Я использовал эту команду:

[x, resnorm]=lsqcurvefit(@myfun1,[-100:100], xdata, ydata, ...
                         [-inf, -inf, -1.5, -inf], [inf, inf, 1.5, inf], options)

что означает, что я заинтересован ограничить третий параметр. Но я сталкиваюсь с этой проблемой:

??? Error using ==> lsqncommon at 102
Levenberg-Marquardt and Gauss-Newton algorithms do not handle bound constraints and trust-region-reflective algorithm
requires at least as many equations as variables; aborting.

Error in ==> lsqcurvefit at 258
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

Я думаю, что эта ошибка показывает, что мои данные невелики, поскольку они имеют 36 точек или, возможно, слишком много неизвестных параметров, но я думаю, что четыре неизвестных параметра для подгонки - это хорошо!

Итак, что вы думаете? Означает ли это, что MATLAB не может приспособить мою функцию к этим данным 36 точек?

Буду признателен за любые комментарии.

1 ответ

Решение

Согласно этому http://www.mathworks.co.uk/help/toolbox/optim/ug/lsqcurvefit.html вторым аргументом являются начальные значения параметров, для которых вы хотите оптимизировать. Вы проходите в

 [-100:100]

который (если только Matlab не сильно изменился с тех пор, как я в последний раз использовал его) является вектором из 201 параметра, поэтому может показаться, что вы запрашиваете в Matlab оптимизацию по 201 параметру. Как отмечает @Dan в комментарии ниже, у вас есть только 36 точек данных, и поэтому то, что вы спрашиваете, является необоснованным. Вы хотите оптимизировать всего за 4 параметра, поэтому вам нужно ввести только 4 начальных значения. Вы передаете по длине 4 вектора для параметров предела, поэтому здесь есть несоответствие.

Я бы предложил просто ввести вектор из 4 начальных значений для ваших параметров в качестве второго аргумента и посмотреть, даст ли он ожидаемый результат.

Другие вопросы по тегам