Поиск нелинейных параметров

необходимо найти набор оптимальных параметров P системы y = P(1)*exp(-P(2)*x) - P(3)*x, где x и y - экспериментальные значения. Я определил свою функцию

f = @(P) P(1)*exp(-P(2)*x) - P(3)*x

и

guess = [1, 1, 1]

и пытался

P = fminsearch(f,guess)

по справке. я получаю сообщение об ошибке

Несоответствие размера назначения в подписке.

Ошибка в fminsearch (строка 191) fv(:,1) = funfcn(x,varargin{:});

Я не совсем понимаю, куда упадут мои значения y, а также откуда функция берет P. К сожалению, у меня нет доступа к nlinfit или инструментам оптимизации.


person matlab-oh-no    schedule 07.12.2013    source источник


Ответы (1)


Вы должны попробовать функцию Matlab lsqnonlin(@testfun,[1;1;1]) Но сначала создайте функцию и сохраните ее в m-файле, который включает все точки данных, скажем, ваш y A и x - это x, как показано ниже:

function F = testfun(P)
A = [1;2;3;7;30;100];
x = [1;2;3;4;5;6];
F = A-P(1)*exp(-P(2)*x) - P(3)*x;

Этот минимизированный конец с двумя нормами дает вам наилучшие параметры.

person steinbitur    schedule 07.12.2013
comment
У меня есть только lsqnonneg. - person matlab-oh-no; 07.12.2013
comment
получить набор инструментов оптимизации для Matlab, если вы можете - person steinbitur; 07.12.2013
comment
Я написал, что у меня его нет. - person matlab-oh-no; 07.12.2013
comment
реализуйте это, затем en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm - person steinbitur; 07.12.2013
comment
Если вы не хотите этого делать, я полагаю, вы могли бы взять журнал своей функции, а затем использовать C\d в Matlab, где C - матрица коэффициентов P, а d - журнал (y) - person steinbitur; 07.12.2013
comment
К сожалению, есть отрицательные значения. - person matlab-oh-no; 07.12.2013