Curve Fitting using Least Squares

11 次查看(过去 30 天)
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 个评论
Walter Roberson
Walter Roberson 2019-1-25
编辑:Walter Roberson 2019-1-25
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';

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2019-1-25
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 个评论
Star Strider
Star Strider 2019-1-25
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 ...

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Linear and Nonlinear Regression 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by