x = f 112; 118; 132; 129; 121; 135; 148; 148; 136; 119; 104; 118; 115; 126; 141; 135; 125; 149; 170; 170; 158; 133; 114; 140; 145; 150; 178; 163; 172; 178; 199; 199; 184; 162; 146; 166; 171; 180; 193; 181; 183; 218; 230; 242; 209; 191; 172; 194; 196; 196; 236; 135; 229; 243; 264; 272; 237; 211; 180; 201; 204; 188; 235; 227; 234g: utilizând metoda polinomial¸a pentru k = 12, metoda mediei mobile de ordinul 3 »si de ordinul 6, medota netezirii exponențiale pentru ® = 0:2 »si alpha = 0:7. Soluție. Mai întâi introducem datele și le reprezent¸am gra¯c, dup¸a cum urmeaz¸a: >> x=[112 118 132 129 121 135 148 148 136 119 104 118 115 126 141 135 125 149 170 170 158 133 114 140 145 150 178 163 172 178 199 199 184 162 146 166 171 180 193 181 183 218 230 242 209 191 172 194 196 196 236 135 229 243 264 272 237 211 180 201 204 188 235 227 234]; 300 1. Programe ^³n Matlab 301 >> n=length(x); >> t=1:n; >> plot(t,x) 1. Metoda polinomial¸a Matlab-ul dispune de funct»ii prede¯nite pentru aceast¸a metod¸a. La linia de comand¸a vom scrie: >> p=poly¯t(x,12); >> y=polyval(p,t); >> plot(t,x,t,y) 2. Metoda mediilor mobile. Pentru mediile mobile de ordin impar vom scrie ^³ntr-un ¯»sier matlab: function [t,m]=f(x,k) n=length(x); t=k+1:n-k; for i=k:(n-2*k) s=0; for j=i-k+1:(k+i+1) s=s+x(j); end m(i)=s/(2*k+1); end »si salv¸am cu numele medmob.m iar la linia de comand¸a putem scrie: >> [tm1,m1]=medmob(x,3); 302 Capitolul VII. Serii de timp >> plot(t,x,tm1,m1) Pentru media mobil¸a de ordin par trebuie s¸a modi¯c¸am funct»ia medmob.m astfel: function [t,m]=f(x,k) n=length(x); t=k+1:n-k; if mod(k,2)==0 for i=k:(n-2*k) s=x(i-k+1)/2; for j=i-k+2:(2*k+i-1) s=s+x(j); end s=s+x(k+i+1)/2; m(i)=s/(2*k+1); end else for i=k:(n-2*k) s=0; for j=i-k+1:(k+i+1) s=s+x(j); end m(i)=s/(2*k+1); end end »si salv¸am cu numele medmobpar.m, iar la linia de comand¸a putem scrie: >> [tm2,m2]=medmobpar(x,6); 1. Programe ^³n Matlab 303 >> plot(t,x,tm2,m2) >> plot(t,x,tm1,m1,tm2,m2) 3. Metoda netezirii exponent»iale Pentru metoda netezirii exponent»iale scriem un nou ¯»sier matlab, astfel: function [t,s]=f(x,alfa) n=length(x); t=1:n; s(1)=x(1); for i=2:n s(i)=alfa*x(i)+(1-alfa)*s(i-1); end »si salv¸am cu numele netexp.m, iar acum putem scrie: >> [ts1,s1]=netexp(x,0.2); >> plot(t,x,ts1,s1) >> [ts2,s2]=netexp(x,0.7); >> plot(t,x,ts2,s2) >> plot(t,x,ts1,s1,ts2,s2) >> plot(t,x,tm1,m1,ts1,s1) >> plot(t,x,tm2,m2,ts2,s2) >> plot(t,x,t,y,tm1,m1,tm2,m2,ts1,s1,ts2,s2) 304 Capitolul VII. Serii de timp 1.2 Spectrul unei serii de timp. Modele liniare Pornind de la datele din problema de mai sus, pentru determinarea spectrului unei serii de timp fYngn2N (unde Yn = Xn ¡ Tn, adic¸a seria f¸ar¸a tendint»¸a, even- tual se elimin¸a »si componenta sezonier¸a), avem prede¯nit¸a o funct»ie ^³n Matlab »si putem scrie la linia de comand¸a urm¸atoarele: >> y=x-ms2; >> Hs=spectrum.cov >> psd(Hs,y,'NFFT',512) Se deschide o fereastr¸a unde se poate vedea gra¯cul spectrului serii de timp fYngn2N. din gra¯c se disting dou¸a v^arfuri esent»iale, la frecvent»ele ! = 0:27 »si ! = 0:8 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 2 4 6 8 10 12 14 Normalized Frequency (´ p rad/sample) Power/frequency (dB/rad/sample) Power Spectral Density Estimate via Covariance Construim un model autoregresiv de ordinul 2, astfel: 1. Programe ^³n Matlab 305 >> m=ar(y,2) Discrete-time IDPOLY model: A(q)y(t) = e(t) A(q) = 1 + 0.06607 q^-1 - 0.008304 q^-2 Estimated using AR ('fb'/'now') from data set y Loss function 23.2361 and FPE 24.7114 Sampling interval: 1 deci avem un model AR(2) de forma: yn = ¡0:06607 ¤ yn¡1 + 0:008304 ¤ yn¡2 + "n unde f"gn2IN este un zgomot alb (gaussian). Pentru estimarea ordinului vom folosi metoda Criteriului Inofrmat»ional al lui Akaike - AIC. Pentru acest criteriu avem o funct»ie prede¯nit¸a ^³n Matlab - funct»ia aic.m. Putem scrie la linia de comand¸a urm¸atoarele: >> AIC=aic(ar(y,2)) AIC = 3.2072 >> AIC=aic(ar(y,3)) AIC = 3.2104 >> AIC=aic(ar(y,4)) AIC = 3.1195 >> AIC=aic(ar(y,5)) AIC = 3.1650 >> AIC=aic(ar(y,6)) AIC = 3.2021 >> AIC=aic(ar(y,7)) 306 Capitolul VII. Serii de timp AIC = 3.2325 >> AIC=aic(ar(y,8)) AIC = 3.0498 >> AIC=aic(ar(y,9)) AIC = 2.9840 >> AIC=aic(ar(y,10)) AIC = 3.0270 Adic¸a minimul se atinge pentru valoarea p = 9. Determin¸am parametrii modelu- lui AR(9) utiliz^and funct»ia ar.m, »si avem: >> m=ar(y,9) Discrete-time IDPOLY model: A(q)y(t) = e(t) A(q) = 1 + 0.3202 q^-1 + 0.04754 q^-2 + 0.2142 q^-3 + 0.5666 q^-4 + 0.2593 q^-5 + 0.06896 q^-6 + 0.09674 q^-7 + 0.5088 q^-8 + 0.3215 q^-9 Estimated using AR ('fb'/'now') from data set y Loss function 14.9861 and FPE 19.8031 Sampling interval: 1 cu alte cuvinte avem modelul yn = ¡0:3202 ¤ yn¡1 ¡ 0:04754 ¤ yn¡2 ¡ 0:2142 ¤ yn¡3 ¡ 0:5666 ¤ yn¡4 ¡0:2593 ¤ yn¡5 ¡ 0:06896 ¤ yn¡6 ¡ 0:09674 ¤ yn¡7 ¡ 0:5088 ¤ yn¡8 ¡0:3215 ¤ yn¡9 + "n Pentru a compara gra¯c seria init»ial¸a cu modelul g¸asit vom scrie o funct»ie ^³n Matlab astfel: 1. Programe ^³n Matlab 307 function z=f(y,p) n=length(y); for i=1:p z(i)=y(i); end for i=p+1:n z(i)=-0.3202*z(i-1)-0.04754*z(i-20-0.2142*z(i-3)-0.5666*z(i-4)-0.2593*z(i-5) -0.06896*z(i-6)-0.09674*z(i-7)-0.5088*z(i-8)-0.3215*z(i-9); end pe care o salv¸am cu numele armodel.m, iar la linia de comand¸a vom scrie: >> z=armodel(y,9); >> subplot(2,1,1);plot(t,y) >> subplot(2,1,2);plot(t,y,t,z) 308 Capitolul VII. Serii de timp 0 10 20 30 40 50 60 70 -20 -10 0 10 20 0 10 20 30 40 50 60 70 -20 -10 0 10 20 unde cu albastru este seria fyng iar cu verde seria fzng » AR(9). Diferent»a dintre cele dou¸a serii reprezint¸a zgomotul alb f"ng. ^In practic¸a la modelul g¸asit se mai adaug¸a un zgomot alb gaussian generat de calculator, de medie ¹ = 0 »si abatere ¾, unde ¾2 = 1 n Xn i=1 (yi ¡ zi)2: De exemplu, pentru ¾ = 1:1 avem: >> sigma=1.1; >> e=sigma*randn(1,n); unde funct»ia randn.m genereaz¸a variabile aleatoare normale (gaussiene) X » N(0; 1) adic¸a de medie ¹ = 0 »si abatere ¾ = 1. Pentru a genera o variabil¸a 1. Programe ^³n Matlab 309 aleatoare normal¸a Y » N(¹; ¾) adic¸a de medie ¹ »si abatere ¾ folosim trasformarea Y = mu + ¾ ¤ X: Observat»ie. Pentru seria init»ial¸a fxng trebuie s¸a adun¸am la seria fzng tendint»a dat¸a ^³n seria fsng (care este o funct»ie determinist¸a, adic¸a nealeatoare): >> w=s+z; >> plot(t,x,t,w) 0 10 20 30 40 50 60 70 100 120 140 160 180 200 220 240 260 280 Xn Wn