Модель, которую вы даете, может быть решена с помощью простых методов:
% model function
f = @(a,b,c,x) 1./(a*x.^2+b*x+c);
% noise function
noise = @(z) 0.005*randn(size(z));
% parameters to find
a = +3;
b = +4;
c = -8;
% exmample data
x = -2:0.01:2; x = x + noise(x);
y = f(a,b,c, x); y = y + noise(y);
% create linear system Ax = b, with
% A = [x² x 1]
% x = [a; b; c]
% b = 1/y;
A = bsxfun(@power, x.', 2:-1:0);
A\(1./y.')
Результат:
ans =
3.035753123094593e+00 % (a)
4.029749103502019e+00 % (b)
-8.038644874704120e+00 % (c)
Это возможно, потому что модель, которую вы даете, является линейной, и в этом случае оператор обратной косой черты даст решение (хотя 1./y
немного опасен...)
При подборе нелинейных моделей обратите внимание на lsqcurvefit
(набор инструментов оптимизации) или вы можете написать свою собственную реализацию, используя fmincon
(набор инструментов оптимизации), fminsearch
или fminunc
.
Кроме того, если у вас есть набор инструментов для подбора кривой, введите help curvefit
и начните с него.
person
Rody Oldenhuis
schedule
19.10.2012
fminunc
иfminsearch
. - person H.Muster   schedule 19.10.2012