Help with optimizing the curve fitting function
12 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Betzalel Fialkoff
il 18 Ott 2017
Commentato: John D'Errico
il 19 Ott 2017
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
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.
Risposta accettata
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
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!
Più risposte (0)
Vedere anche
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!