Curve Fitting using Least Squares

9 vues (au cours des 30 derniers jours)
MATLABhelp
MATLABhelp le 25 Jan 2019
Commenté : Star Strider le 25 Jan 2019
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?
  2 commentaires
Walter Roberson
Walter Roberson le 25 Jan 2019
Modifié(e) : Walter Roberson le 25 Jan 2019
We recommend that you avoid using inv() for numeric stability reasons.
b = (A'*A) \ (A'*y');
but except in case of singular A, that should be the same as
b = A \ y';
MATLABhelp
MATLABhelp le 25 Jan 2019
Thank you!

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 25 Jan 2019
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.
  2 commentaires
MATLABhelp
MATLABhelp le 25 Jan 2019
Thank you!
Star Strider
Star Strider le 25 Jan 2019
As always, my pleasure!
Correcting one small error, ‘... the derivative with respect to the each parameter ...’ should be ‘... the partial derivative with respect to the each parameter ...

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Linear and Nonlinear Regression dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by