MATLAB [Matlab] Which is the good solution My vs. School - curve fitting?

AI Thread Summary
The discussion revolves around solving a nonlinear least squares problem using the function y = x / (a + b.x). The user outlines their approach, which involves linearization and substitution to transform the problem into a linear model. They provide MATLAB code snippets for calculating parameters a and b using both a linearization method and a curve fitting tool. The results from their manual calculations differ from those obtained using the Curve Fitting tool, leading to confusion about the correct approach. The user notes that when they omit the substitutions for u and v, they still achieve results consistent with the Curve Fitting tool, raising questions about the necessity of these transformations. They seek clarification on the differences in outcomes and whether there are alternative methods for linearization that might yield better results. The conversation highlights the complexities of nonlinear regression and the importance of understanding different methodologies in MATLAB for parameter estimation.
artiny
Messages
6
Reaction score
0
Hy, I wonder which is the good solution for this problem:

Nonlinear least square problem: function: y = x / (a + b.x) linearization: 1/y = a/x + b substitution: v = 1/y , u = 1/x >> model v = b + a.u

What we did in school:

x = [1 2 4 7]; y = [2 1 0.4 0.1];
v=1./y;
u=1./x;
n = length(x);
A=[ones(n,1), u']
xbeta=A\v'
Lbeta=xbeta;
beta0=flipud(Lbeta)
beta=fminsearch('kritfun',beta0)
r = [kritfun(beta0) , kritfun(beta)]


+ kritfun.m

function z=kritfun(beta)
a=beta(1);
b=beta(2);
x = [1 2 4 7];
y = [2 1 0.4 0.1];
error = y - x./(a + b*x );
z = sum((error .^2 ));


in ML we get : xbeta =

7.3658
-8.1692
beta =

1.0e+014 *

-8.2085
4.1043
r =

11.0600 4.1700

but when I try in Curve Fitting tool too check the soulution , I get something else ..according to this video:
too call CF I typed to prompt >>cftool

When I try this I get the same number like in the Curve fitting tool , the a,b parameters is my beta(1),beta(2) and the SSE number is my r(2) ..what was same when I tried this:

x = [1 2 4 7];
y = [2 1 0.4 0.1];

%u = 1./x; %these u and v I don't use it...but I didnt know when not using substituion is correct the beta and r(2) , but when I didnt use I get same numbers lik in the Curve Fitting tool
%v = 1./y;

n = length(x);
X = [ ones(n,1), x'];
btr = X\y'

beta0 = flipud(btr)'
beta = fminsearch('mnsNLcFUN',beta0)
r = [mnsNLcFUN(beta0), mnsNLcFUN(beta)]


+ mnsNLcFUN.m function is:

function z=mnsNLcFUN(beta)
a=beta(1);
b=beta(2);

x = [1 2 4 7];
y = [2 1 0.4 0.1];

error = y - x./(a+b.*x);
z = sum((error .^2 ));
 
Physics news on Phys.org
Thanks for the post! Sorry you aren't generating responses at the moment. Do you have any further information, come to any new conclusions or is it possible to reword the post?
 
somewho said that is more possible way to do the linearization...and what we did is not the same as Matlab makes ,...or I don't know what else..
 

Similar threads

Replies
2
Views
3K
Replies
4
Views
1K
Replies
1
Views
1K
Replies
6
Views
5K
Replies
1
Views
2K
Back
Top