fitting curve to two points
Afficher commentaires plus anciens
I have this daily load curve " f(x)=342.8+(-4.141*cos(x*0.261))+(-60.26*sin(x*0.261))+(43.46*cos(2*x*0.261))+(-21.9*sin(x*0.261*2)) " I also have data for the two peaks of each day, (ie the two local maxima) with no relation to time.That looks like this:
Day 1 Morning Max 800 Afternoon Max 860 Day 2 Morning Max 900 Afternoon Max 990
I need to adjust the coefficients so that the curve passes through or as close as possible to the data points. I need this to be done for every day for 3 months, so it has to be automated. Any ideas? Thanks in advance.
Réponse acceptée
Plus de réponses (1)
Richard Willey
le 24 Fév 2012
From the looks of things, your daily load curve is a particular example of a second order Fourier series.
If you have Curve Fitting Toolbox, its pretty easy to generate a fit. If you don't have Curve Fitting Toolbox, you can solve this same equation using nlinfit in Stats or lsqcurvefit in Optim. However, in either case you'll need to provide starting conditions. (Curve Fitting Toolbox is able to automatically compute the starting conditions for the solvers)
%%Generate a set of random data
X = linspace(1,10,100);
X = X';
% Specify the parameters for a second order Fourier series
w = .6067;
a0 = 1.6345;
a1 = -.6235;
b1 = -1.3501;
a2 = -1.1622;
b2 = -.9443;
Y = a0 + a1*cos(X*w) + b1*sin(X*w) + a2*cos(2*X*w) + b2*sin(2*X*w);
foo = fit(X,Y, 'Fourier2')
Please note: You mention that the only data points that you have available are the peaks in the data series. I'd be leery about using the resulting model to predict anything other than the peak load...
1 commentaire
d s.
le 24 Fév 2012
Catégories
En savoir plus sur Get Started with Curve Fitting Toolbox dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!