Is there any way to do LFIT (general linear least-squares fit ) on the time series data using MATLAB?

2 visualizzazioni (ultimi 30 giorni)
How to do the attched linear least-square fitting equation on time series data in matlab?
y = a + b*t + c*t^2 + d*sin(2*pi*t) + e*cos(2*pi*t) + f*sin(2*pi*t*2) + g*cos(2*pi*t*2)
a,b,c ... are parameters. t is time and y is dependent variable.

Risposte (1)

Star Strider
Star Strider il 27 Lug 2021
That depends entirely on what you want to do.
One approach:
syms a b c d e f g t
y = a + b*t + c*t^2 + d*sin(2*pi*t) + e*cos(2*pi*t) + f*sin(2*pi*t*2) + g*cos(2*pi*t*2);
yfcn = matlabFunction(y, 'Vars',{[a b c d e f g],t})
yfcn = function_handle with value:
@(in1,t)in1(:,1)+in1(:,2).*t+in1(:,5).*cos(t.*pi.*2.0)+in1(:,7).*cos(t.*pi.*4.0)+in1(:,4).*sin(t.*pi.*2.0)+in1(:,6).*sin(t.*pi.*4.0)+in1(:,3).*t.^2
This will work in the Optimization Toolbox and Statictics and Machine Learning Toolbox nonlinear parameter estimation funcitons. Specify the initial parameter estimates as a row vector.
tv = linspace(0, 10, 50); % Create Data
yv = exp(-(tv-5).^2) + randn(size(tv))/10; % Create Data
B0 = rand(1,7); % Choose Appropriate Initial Parameter Estimates
B = nlinfit(tv(:), yv(:), yfcn, B0)
B = 1×7
-0.1691 0.2401 -0.0259 -0.0227 -0.0012 0.0266 -0.0076
The Curve Fitting Toolbox does it differently:
yfit = fittype('a + b*t + c*t^2 + d*sin(2*pi*t) + e*cos(2*pi*t) + f*sin(2*pi*t*2) + g*cos(2*pi*t*2)', 'independent',{'t'});
yfit = fit(tv(:) ,yv(:), yfit,'start',B0)
yfit =
General model: yfit(t) = a + b*t + c*t^2 + d*sin(2*pi*t) + e*cos(2*pi*t) + f*sin(2*pi*t*2) + g*cos(2*pi*t*2) Coefficients (with 95% confidence bounds): a = -0.1691 (-0.4125, 0.07436) b = 0.2401 (0.1275, 0.3526) c = -0.02595 (-0.03684, -0.01506) d = -0.02275 (-0.1431, 0.09761) e = -0.001153 (-0.1193, 0.117) f = 0.02665 (-0.09346, 0.1468) g = -0.007593 (-0.1257, 0.1105)
Experiment to get the result you want.
.
  6 Commenti
DIPENDRA007
DIPENDRA007 il 28 Lug 2021
@Star Strider residuals (t)=original data(t)- fitted equation data(t). The residuals are filtered to define short term variations and interannual variations that are not determined by the polynomial terms of the equations as well as for smoothing. Can we filter the residual two times using the attached low pass filter equation?
Where fc is chosen such that h(f) = 0.5 at f=fc.
thanks in advance.
Star Strider
Star Strider il 28 Lug 2021
I still do not understand what you want to do.
If you want to filter the data, use the lowpass (or bandpass, to eliminate the baseline offset and drift) functions. I have no idea what you want to do, however
[yr_filt,lpdf] = lowpass(yr, 4E-3, Fs, 'ImpulseResponse','iir');
will work for the lowpass filter, and
[yr_filt,bpdf] = bandpass(yr,[1E-5, 4E-3], Fs, 'ImpulseResponse','iir');
for the bandpass design (although it might be necessary to experiment with the lower passband edge).
.

Accedi per commentare.

Categorie

Scopri di più su Descriptive Statistics in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by