Help with optimizing the curve fitting function

12 visualizzazioni (ultimi 30 giorni)
I need to to fit a set of data to a function of the form y=a*x^b. I need to do this on the order of 50,000 times. the fit() function takes way too long. I have been trying to find alternatives, I found articles related to fitoptions, fittype, nlinfit, etc. However I wasn't able to understand how to work with them in the way that I need. if anyone can help me out with this I would Greatly appreciate it.
Thank You
  1 Commento
Birdman
Birdman il 18 Ott 2017
Have you tried Curve Fitting Toolbox? Because I recently tried out to fit two arrays size of 50000 and it quickly finds the coefficients a and b.

Accedi per commentare.

Risposta accettata

John D'Errico
John D'Errico il 18 Ott 2017
The simple answer is to log your model. Then a call to polyfit will suffice, and polyfit is fast.
log(y) = log(a) + b*log(x)
So a first order model for polyfit. (Think about it.)
P1 = polyfit(log(x),log(y),1);
b = P1(1);
a = exp(P1(2));
Note that this can sometimes play hell with the error structure, but it may actually be a good thing, if y varies by an order of magnitude or more. Then some points in the fit will get far too much weight applied to them. So the log transformation turns it into a proportional noise problem.
There are other schemes one could use, such as the use of custom code that would employ a partitioned least squares solver, and a sparse jacobian matrix. But that will take a lot of time on your part to learn all you need.
Or, you could learn to use the parallel processing toolbox. Again, a lot of effort when simple use of polyfit might be entirely sufficient on the logged model.
  2 Commenti
Betzalel Fialkoff
Betzalel Fialkoff il 19 Ott 2017
Thank you, this is a brilliant and elegant solution, it reduced my run time to ~25seconds from ~30minutes. Lifesave!
John D'Errico
John D'Errico il 19 Ott 2017
Yeah, but now you need to look as if you are doing something useful in those 29.5 minutes you just saved. ;-) BACK TO WORK FOR YOU!

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