Curve fitting nonlinear data sets by tuning multiple parameters

Hi, I have multiple data sets (rn 5 sets but may increase later). I need to find out the values of three parameters C, a and b in order to best fit these three data sets. The function is as follows:
z=C*x^a*y^b
The datasets I got is as such, each data set has a given y. And once i change x, z changes. How do I tune C,a and b?
Thanks.

2 Kommentare

Matt J
Matt J am 7 Aug. 2021
Bearbeitet: Matt J am 7 Aug. 2021
So, for each data set, x is a vector and y is a scalar?
And it what form are the data sets stored? A cell array?
Yes x is a vector and Y is a scaler. The z data and x data sets are stored in separate arrays.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Matt J
Matt J am 7 Aug. 2021
Bearbeitet: Matt J am 7 Aug. 2021
You can get an initial guess using log-linear fitting,
n=[numel(x1),numel(x2),numel(x3)]; %concatenate data
X=[x1(:);x2(:);x3(:)];
Y=repelem([y1;y2;y3],n);
Z=[z1(:);z2(:),z3(:)];
p=[X.^0,log(X),log(Y)]\log(z); %linear algebraic solution
C0=exp(p(1)); %Initial estimates
a0=p(2);
b0=p(3);
Then you could refine with fminspleas (Download),
[ab,C]=fminspleas({@(ab,Q) prod(Q.^ab,2)} ,[a0,b0], [X,Y],Z );
a=ab(1);
b=ab(2);

2 Kommentare

Shahriar Mahmud
Shahriar Mahmud am 8 Aug. 2021
Bearbeitet: Shahriar Mahmud am 8 Aug. 2021
Thanks @Matt J, it worked. I have an additional question though. How do I evaluate this non-linear fit as R2 is not a viable option?
Can't you just calculate R2 yourself? It's a pretty easy formula.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Linear and Nonlinear Regression finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by