MATLAB: Curve Fitting using Least Squares

curveequationequationsfittinghelpleast squaresparabolaparametersplotpower

Given a data table with values of x and y and supposed to approximate relationship between x and y. The first case is a parabola with equation y = a0 + a1*x + a2*(x^2)
and the second case is a saturation growth rate equation with the equation y = a0*(x/(a1+x)). Must find the parameters using normal equations formulation of least squares.
Finished the code for the parabola and it is the following
x = [20 40 60 80 100 120 140 160];
y = [13 22 30 36 40 43 45 46];
A = [ones(size(x))' x' (x.^2)'];
b = inv(A'*A)*(A'*y');
s = b(3)*x.^2+b(2)*x+b(1);
plot(x,s,'k')
hold off
How can you modify code for it to run for saturation growth rate equation?

Best Answer

Try this:
fcn = @(b,x) b(1).*x./(b(2)+x);
x = [20 40 60 80 100 120 140 160];
y = [13 22 30 36 40 43 45 46];
B0 = [50; 50];
B = fminsearch(@(b) norm(y - fcn(b,x)), B0);
s = fcn(B,x);
figure
plot(x, y, 'pg')
hold on
plot(x,s,'k')
hold off
A = [ones(size(x))' x' (x.^2)'];
b = A\y';
s = A*b;
figure
plot(x,y,'pg')
hold on
plot(x,s,'k')
hold off
The first equation (in my code) is nonlinear in the parameters, in that the derivative with respect to the each parameter is a function of the same parameter or other parameters. A linear approach will not provide optimal estimates of the parameters.
The second (in my code) is linear in the parameters, so a linear approach will provide optimal parameter estimates.
Related Question