Curve fitting nonlinear data sets by tuning multiple parameters

13 visualizzazioni (ultimi 30 giorni)
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 Commenti
Matt J
Matt J il 7 Ago 2021
Modificato: Matt J il 7 Ago 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?
Shahriar Mahmud
Shahriar Mahmud il 7 Ago 2021
Yes x is a vector and Y is a scaler. The z data and x data sets are stored in separate arrays.

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 7 Ago 2021
Modificato: Matt J il 7 Ago 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 Commenti
Shahriar Mahmud
Shahriar Mahmud il 8 Ago 2021
Modificato: Shahriar Mahmud il 8 Ago 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?
Matt J
Matt J il 9 Ago 2021
Can't you just calculate R2 yourself? It's a pretty easy formula.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Linear and Nonlinear Regression in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by