├── README.md ├── algo_2008.xlsx ├── ar_kalman_algo_2008.m ├── tec_algo2008_ann.m ├── tec_algo_mmse.m ├── wann_algo2008.m ├── wkalmanl3.m └── wmmsel6_algo2008.m /README.md: -------------------------------------------------------------------------------- 1 | # PAPER2 2 | This repository contains the MATLAB codes for the time-series prediction using (i) MMSE forecast of ARIMA models (ii) Kalman filter approach (iii)Artificial neural networks. The codes for the wavelet version of the above techniques is also presented here. Since the central idea is same, the code for Rainfall data and geophysical bore-well data follows the similar steps. 3 | 4 | 5 | Following is the description of all the MATLAB files: 6 | 7 | ar_kalman_algo_2008.m: Kalman filter approach for time series forecasting. 8 | tec_algo2008_ann.m: Feed forward neural network for time-series forecasting. 9 | tec_algo_mmse.m: MMSE forecast using ARIMA models. 10 | wann_algo2008.m: Wavelet-based Feed forward neural network for time-series forecasting. 11 | wkalmanl3.m: Wavelet-based Kalman filter approach for time series forecasting. 12 | wmmsel6_algo2008.m: Wavelet-based MMSE forecast using ARIMA models. 13 | -------------------------------------------------------------------------------- /algo_2008.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ParticleFilter101/PAPER2/e1b2922b112ab93912418f32f2604bdaf82db6c2/algo_2008.xlsx -------------------------------------------------------------------------------- /ar_kalman_algo_2008.m: -------------------------------------------------------------------------------- 1 | clc;clear all; close all; 2 | % [A1,dilimiterout2]=importdata('algo2008_tec_interp_by_sample.txt'); 3 | % tec1=A1.data(:,2); 4 | A=xlsread('algo_2008'); 5 | tec1=A(:,2); 6 | tsig1=tec1(127286:141685);tsig1_max=max(tsig1); 7 | tsig1=tsig1/(tsig1_max); 8 | figure(1) 9 | plot(tsig1) 10 | [a,e] = aryule(tsig1,2); 11 | %% %%%kalman filter eq. 12 | F=[-a(2) -a(3);1 0]; 13 | H=[1 0]; 14 | x=[2.05; 2.05]; 15 | P=[0 0;0 e]; 16 | Q=[e 0;0 0]; 17 | R=e; 18 | z=tsig1; 19 | A=[]; 20 | for i=1:length(z) 21 | [xpred,Ppred]=predict(x,P,F,Q); 22 | [nu,S]=innovation(xpred,Ppred,z(i),H,R); 23 | [x,P]=innovation_update(xpred,Ppred,nu,S,H); 24 | A(:,i)=x; 25 | end 26 | 27 | t=linspace(1,11,15840); 28 | s1=tec1(127286:143125)/max(tec1(127286:143125)); 29 | %% 30 | A2=[]; 31 | for i=1:1440 32 | A2(:,i)=(F^1440)*A(:,(14400-1440)+i); 33 | end 34 | A22=[A A2]; 35 | figure(3) 36 | plot(t,s1*max(tec1(127286:143125)),t,A22(1,:)*max(tec1(127286:143125))) 37 | p_sqerr=(A2(1,:)-(tec1(141686:143125))'/max(tec1(141686:143125))).^2; 38 | rms_err=sqrt(mean(p_sqerr)) 39 | [c,lags] = xcorr(A2(1,:),(tec1(196141:197580))',0,'coeff') 40 | 41 | original_kalman_algo2008=(s1(14401:15840))*max(tec1(127286:143125)); 42 | predicted_kalman_algo2008=(A22(1,14401:15840))'*max(tec1(127286:143125)); 43 | 44 | 45 | 46 | %% 47 | 48 | function [xpred,Ppred]=predict(x,P,F,Q) 49 | xpred=F*x; 50 | Ppred=F*P*F'+Q; 51 | end 52 | 53 | function [nu,S]=innovation(xpred,Ppred,z,H,R) 54 | nu=z-H*xpred; 55 | S=R+H*Ppred*H'; 56 | end 57 | 58 | function [xnew,Pnew]=innovation_update(xpred,Ppred,nu,S,H) 59 | K=Ppred*H'*inv(S); 60 | xnew=xpred+K*nu; 61 | Pnew=Ppred-K*S*K'; 62 | end 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /tec_algo2008_ann.m: -------------------------------------------------------------------------------- 1 | clc;clear all; close all; 2 | A=xlsread('algo_2008'); 3 | t=A(:,1); 4 | d=A(:,2); 5 | d=d'; 6 | a1=d(127286:128725); 7 | a2=d(128726:130165); 8 | a3=d(130166:131605); 9 | a4=d(131606:133045); 10 | a5=d(133046:134485); 11 | a6=d(134486:135925); 12 | a7=d(135926:137365); 13 | a8=d(137366:138805); 14 | a9=d(138806:140245); 15 | a10=d(140246:141685); 16 | a11=d(141686:143125); 17 | 18 | d1=d(127286:143125); 19 | m=max(d1); 20 | t1=t(127286:143125); 21 | input = [a1 a2 a3 a4 a5 a6 a7 a8 a9 ]./m; 22 | target= [a2 a3 a4 a5 a6 a7 a8 a9 a10]./m; 23 | sample= [a10]./m; 24 | original= [a11]./m; 25 | original_ann_algo2008=original.*m; 26 | 27 | in_len=length(input); 28 | s_len=length(sample); 29 | net=newff(input,target, [5,12,15,7], {'tansig','tansig','tansig','tansig','purelin'},'trainlm'); 30 | net.trainParam.show = 50; 31 | net.trainParam.lr = 0.05; 32 | net.trainParam.epochs =1000; 33 | net.trainParam.goal = 1e-3; 34 | net = train(net,input,target); 35 | a1= sim(net,sample); 36 | predicted1=a1; 37 | predicted_ann_algo2008=predicted1.*m; 38 | 39 | RMS_error= sqrt(sum((original-predicted1).^2)/length(a11)) 40 | correlation_coefficient=corr2(original,predicted1) 41 | plot(t1,d1,'Linewidth',2) 42 | hold on 43 | t2=t(141686:143125); 44 | plot(t2,predicted1*m,'Linewidth',2) 45 | t2=t(141686:143125); -------------------------------------------------------------------------------- /tec_algo_mmse.m: -------------------------------------------------------------------------------- 1 | tic; 2 | clc; close all; clear all; 3 | A=xlsread('algo_2008'); 4 | d=A(:,2); 5 | data=d(127286:143125);m=max(data); 6 | y=d(127286:141685); 7 | T=length(y); 8 | data_original=d(141686:143125); 9 | p=0:3;lp=length(p); 10 | q=0:3;lq=length(q); 11 | logl=zeros(lp,lq); 12 | aic=zeros(lp,lq); 13 | bic=zeros(lp,lq); 14 | innovar=zeros(lp,lq); 15 | for i=1:lp 16 | for j=1:lq 17 | Mdl=arima(p(i),0,q(j)); 18 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,y); 19 | logl(i,j)=logL; 20 | [n,m1]=size(EstParamCov); 21 | [aic(i,j), bic(i,j)]=aicbic(logl(i,j),n,T); 22 | innovar(i,j)=EstParamCov(n,n) 23 | end 24 | end 25 | %% min AIC 26 | [M1,I1] = min(aic(:)); 27 | [row_aic, col_aic] = ind2sub(size(aic),I1) 28 | mdl=arima(row_aic-1,0,col_aic-1); 29 | [estmdl,parmcov,loglik,infor]=estimate(mdl,y); 30 | res_aic = infer(estmdl,y); 31 | rng('default') 32 | Ysim_aic = simulate(estmdl,1440,'NumPaths',50,'Y0',y,'E0',res_aic); 33 | mn_aic = mean(Ysim_aic,2); 34 | paic= mn_aic; 35 | figure(1) 36 | % plot(y,'k') 37 | % hold on 38 | % plot(T+1:T+1440,Ysim,'Color',[.85,.85,.85]); 39 | plot(T+1:T+1440,data_original,'k--','Linewidth',2) 40 | hold on 41 | h = plot(T+1:T+1440,mn_aic,'r--','LineWidth',2); 42 | hold on 43 | xlim([T+1,T+1440]) 44 | rmserraic=sqrt(mean(((mn_aic./m)-(data_original./m)).^2)) 45 | [caic,lags] = xcorr(mn_aic,data_original,0,'coeff'); 46 | %% min BIC 47 | 48 | [M2,I2] = min(bic(:)); 49 | [row_bic, col_bic] = ind2sub(size(bic),I2) 50 | mdl1=arima(row_bic,0,col_bic-1); 51 | [estmdl1,parmcov1,loglik1,infor1]=estimate(mdl1,y); 52 | res_bic = infer(estmdl1,y); 53 | rng('default') 54 | Ysim_bic = simulate(estmdl1,1440,'NumPaths',50,'Y0',y,'E0',res_bic); 55 | mn_bic = mean(Ysim_bic,2); 56 | pbic= mn_bic; 57 | figure(1) 58 | % plot(y,'k') 59 | % hold on 60 | % plot(T+1:T+1440,Ysim,'Color',[.85,.85,.85]); 61 | % plot(T+1:T+1440,data_original,'r--','Linewidth',2) 62 | % hold on 63 | plot(T+1:T+1440,mn_bic,'b--','LineWidth',2); 64 | hold on 65 | xlim([T+1,T+1440]) 66 | rmserrbic=sqrt(mean(((mn_bic./m)-(data_original./m)).^2)) 67 | [cbic,lags] = xcorr(mn_bic,data_original,0,'coeff'); 68 | %% min innovar 69 | 70 | [M3,I3] = min(innovar(:)); 71 | [row_inno, col_inno] = ind2sub(size(innovar),I1) 72 | mdl2=arima(row_inno-1,0,col_inno-1); 73 | [estmdl2,parmcov2,loglik2,infor2]=estimate(mdl2,y); 74 | res_inno = infer(estmdl2,y); 75 | rng('default') 76 | Ysim_inno = simulate(estmdl2,1440,'NumPaths',50,'Y0',y,'E0',res_inno); 77 | mn_inno = mean(Ysim_inno,2); 78 | pinno= mn_inno; 79 | rmserrinno=sqrt(mean(((data_original./m)-(pinno./m)).^2)); 80 | [cinno,lags] = xcorr(pinno,data_original,0,'coeff'); 81 | plot(T+1:T+1440,pinno,'c--','LineWidth',2); 82 | 83 | 84 | 85 | toc; -------------------------------------------------------------------------------- /wann_algo2008.m: -------------------------------------------------------------------------------- 1 | clear all; 2 | clc; 3 | 4 | 5 | A=xlsread('algo_2008'); 6 | t=A(:,1); 7 | d=A(:,2); m=max(d); 8 | d=d'; 9 | x=d(127286:141685)./m; 10 | x1=d(127286:143125)./m; 11 | wname='haar'; 12 | [c1,l1]=wavedec(x,6,wname); 13 | [c2,l2]=wavedec(x1,6,wname); 14 | 15 | al6=c1(1:225); 16 | dl6=c1(226:450); 17 | dl5=c1(451:900); 18 | dl4=c1(901:1800); 19 | dl3=c1(1801:3600); 20 | dl2=c1(3601:7200); 21 | dl1=c1(7201:14400); 22 | 23 | 24 | %% predict approx l-6 25 | apl6_in=al6(1:200); 26 | apl6_tar=al6(26:225); 27 | apl6_sample=al6(203:225); 28 | apl6net=newff(apl6_in,apl6_tar, [5,12,15,7] ,{'tansig','tansig','tansig','tansig','purelin'},'trainbr'); 29 | apl6net.trainParam.show = 50; 30 | apl6net.trainParam.lr = 0.05; 31 | apl6net.trainParam.epochs =1000; 32 | apl6net.trainParam.goal = 1e-3; 33 | apl6net = train(apl6net,apl6_in,apl6_tar); 34 | ap16_p= sim(apl6net,apl6_sample); 35 | apl6_pre=[al6 ap16_p]; 36 | 37 | %% predict detail l6 38 | dpl6_in=dl6(1:200); 39 | dpl6_tar=dl6(26:225); 40 | dpl6_sample=dl6(203:225); 41 | dpl6net=newff(dpl6_in,dpl6_tar, [5,12,15,7] ,{'tansig','tansig','tansig','tansig','purelin'},'trainbr'); 42 | dpl6net.trainParam.show = 50; 43 | dpl6net.trainParam.lr = 0.05; 44 | dpl6net.trainParam.epochs =1000; 45 | dpl6net.trainParam.goal = 1e-3; 46 | dpl6net = train(dpl6net,dpl6_in,dpl6_tar); 47 | dp16_p= sim(dpl6net,dpl6_sample); 48 | dpl6_pre=[dl6 dp16_p]; 49 | 50 | %% predict detail l5 51 | dpl5_in=dl5(1:405); 52 | dpl5_tar=dl5(46:450); 53 | dpl5_sample=dl5(406:450); 54 | dpl5net=newff(dpl5_in,dpl5_tar, [5,12,15,7] ,{'tansig','tansig','tansig','tansig','purelin'},'trainbr'); 55 | dpl5net.trainParam.show = 50; 56 | dpl5net.trainParam.lr = 0.05; 57 | dpl5net.trainParam.epochs =1000; 58 | dpl5net.trainParam.goal = 1e-3; 59 | dpl5net = train(dpl5net,dpl5_in,dpl5_tar); 60 | dpl5_p= sim(dpl5net,dpl5_sample); 61 | dpl5_pre=[dl5 dpl5_p]; 62 | 63 | %% predict detail l4 64 | dpl4_in=dl4(1:810); 65 | dpl4_tar=dl4(91:900); 66 | dpl4_sample=dl4(811:900); 67 | dpl4net=newff(dpl4_in,dpl4_tar, [5,12,15,7] ,{'tansig','tansig','tansig','tansig','purelin'},'trainbr'); 68 | dpl4net.trainParam.show = 50; 69 | dpl4net.trainParam.lr = 0.05; 70 | dpl4net.trainParam.epochs =1000; 71 | dpl4net.trainParam.goal = 1e-3; 72 | dpl4net = train(dpl4net,dpl4_in,dpl4_tar); 73 | dpl4_p= sim(dpl4net,dpl4_sample); 74 | dpl4_pre=[dl4 dpl4_p]; 75 | 76 | %% predict detai l3 77 | dpl3_in=dl3(1:1620); 78 | dpl3_tar=dl3(181:1800); 79 | dpl3_sample=dl3(1621:1800); 80 | dpl3net=newff(dpl3_in,dpl3_tar, [5,12,15,7] ,{'tansig','tansig','tansig','tansig','purelin'},'trainbr'); 81 | dpl3net.trainParam.show = 50; 82 | dpl3net.trainParam.lr = 0.05; 83 | dpl3net.trainParam.epochs =1000; 84 | dpl3net.trainParam.goal = 1e-3; 85 | dpl3net = train(dpl3net,dpl3_in,dpl3_tar); 86 | dpl3_p= sim(dpl3net,dpl3_sample); 87 | dpl3_pre=[dl3 dpl3_p]; 88 | 89 | %% predict detail l2 90 | dpl2_in=dl2(1:3240); 91 | dpl2_tar=dl2(361:3600); 92 | dpl2_sample=dl2(3241:3600); 93 | dpl2net=newff(dpl2_in,dpl2_tar, [5,12,15,7] ,{'tansig','tansig','tansig','tansig','purelin'},'trainbr'); 94 | dpl2net.trainParam.show = 50; 95 | dpl2net.trainParam.lr = 0.05; 96 | dpl2net.trainParam.epochs =1000; 97 | dpl2net.trainParam.goal = 1e-3; 98 | dpl2net = train(dpl2net,dpl2_in,dpl2_tar); 99 | dpl2_p= sim(dpl2net,dpl2_sample); 100 | dpl2_pre=[dl2 dpl2_p]; 101 | 102 | %% predict detail l1 103 | 104 | dpl1_in=dl1(1:6480); 105 | dpl1_tar=dl1(721:7200); 106 | dpl1_sample=dl1(6481:7200); 107 | dpl1net=newff(dpl1_in,dpl1_tar, [5,12,15,7] ,{'tansig','tansig','tansig','tansig','purelin'},'trainbr'); 108 | dpl1net.trainParam.show = 50; 109 | dpl1net.trainParam.lr = 0.05; 110 | dpl1net.trainParam.epochs =1000; 111 | dpl1net.trainParam.goal = 1e-3; 112 | dpl1net = train(dpl1net,dpl1_in,dpl1_tar); 113 | dpl1_p= sim(dpl1net,dpl1_sample); 114 | dpl1_pre=[dl1 dpl1_p]; 115 | %% 116 | C=[apl6_pre dpl6_pre dpl5_pre dpl4_pre dpl3_pre dpl2_pre dpl1_pre];L=l2; 117 | ptec=waverec(C,L,wname); 118 | 119 | rmsewann=sqrt(mean((x1-ptec).^(2))) 120 | [cann,lann]=xcorr(x1,ptec,0,'coeff') 121 | -------------------------------------------------------------------------------- /wkalmanl3.m: -------------------------------------------------------------------------------- 1 | 2 | clc; close all; clear all; 3 | A=xlsread('algo_2008'); 4 | d=A(:,2); 5 | data=d(127286:143125);m=max(data); 6 | y=d(127286:141685); 7 | T=length(y); 8 | data_original=d(141686:143125); 9 | %% level 3 DWT 10 | wname='haar'; 11 | level=3; 12 | [cy,ly] = wavedec(y,level,wname); 13 | [cd,ld]=wavedec(data,level,wname); 14 | 15 | yapprox=cy(1:1800); 16 | ydetail3=cy(1801:3600); 17 | ydetail2=cy(3601:7200); 18 | ydetail1=cy(7201:14400); 19 | 20 | %% predict approx 21 | [a,e] = aryule(yapprox,2); 22 | F=[-a(2) -a(3);1 0]; 23 | H=[1 0]; 24 | x=[2.05; 2.05]; 25 | P=[0 0;0 e]; 26 | Q=[e 0;0 0]; 27 | R=e; 28 | z=yapprox; 29 | Aapprox=[]; 30 | for i=1:length(z) 31 | [xpred,Ppred]=predict(x,P,F,Q); 32 | [nu,S]=innovation(xpred,Ppred,z(i),H,R); 33 | [x,P]=innovation_update(xpred,Ppred,nu,S,H); 34 | Aapprox(:,i)=x; 35 | end 36 | 37 | A2approx=[]; 38 | for i=1:180 39 | A2approx(:,i)=(F^180)*Aapprox(:,(length(z)-180)+i); 40 | end 41 | A22approx=[Aapprox A2approx]; 42 | papprox=A22approx(1,:); 43 | 44 | %% predict detail 3 45 | [a,e] = aryule(ydetail3,2); 46 | F=[-a(2) -a(3);1 0]; 47 | H=[1 0]; 48 | x=[2.05; 2.05]; 49 | P=[0 0;0 e]; 50 | Q=[e 0;0 0]; 51 | R=e; 52 | z=ydetail3; 53 | Adetail3=[]; 54 | for i=1:length(z) 55 | [xpred,Ppred]=predict(x,P,F,Q); 56 | [nu,S]=innovation(xpred,Ppred,z(i),H,R); 57 | [x,P]=innovation_update(xpred,Ppred,nu,S,H); 58 | Adetail3(:,i)=x; 59 | end 60 | 61 | A2detail3=[]; 62 | for i=1:180 63 | A2detail3(:,i)=(F^180)*Adetail3(:,(length(z)-180)+i); 64 | end 65 | A22detail3=[Adetail3 A2detail3]; 66 | pdetail3=A22detail3(1,:); 67 | 68 | %% predict detail 2 69 | 70 | [a,e] = aryule(ydetail2,2); 71 | F=[-a(2) -a(3);1 0]; 72 | H=[1 0]; 73 | x=[2.05; 2.05]; 74 | P=[0 0;0 e]; 75 | Q=[e 0;0 0]; 76 | R=e; 77 | z=ydetail2; 78 | Adetail2=[]; 79 | for i=1:length(z) 80 | [xpred,Ppred]=predict(x,P,F,Q); 81 | [nu,S]=innovation(xpred,Ppred,z(i),H,R); 82 | [x,P]=innovation_update(xpred,Ppred,nu,S,H); 83 | Adetail2(:,i)=x; 84 | end 85 | 86 | A2detail2=[]; 87 | for i=1:360 88 | A2detail2(:,i)=(F^360)*Adetail2(:,(length(z)-360)+i); 89 | end 90 | A22detail2=[Adetail2 A2detail2]; 91 | pdetail2=A22detail2(1,:); 92 | %% predict detail 1 93 | 94 | [a,e] = aryule(ydetail1,2); 95 | F=[-a(2) -a(3);1 0]; 96 | H=[1 0]; 97 | x=[2.05; 2.05]; 98 | P=[0 0;0 e]; 99 | Q=[e 0;0 0]; 100 | R=e; 101 | z=ydetail1; 102 | Adetail1=[]; 103 | for i=1:length(z) 104 | [xpred,Ppred]=predict(x,P,F,Q); 105 | [nu,S]=innovation(xpred,Ppred,z(i),H,R); 106 | [x,P]=innovation_update(xpred,Ppred,nu,S,H); 107 | Adetail1(:,i)=x; 108 | end 109 | 110 | A2detail1=[]; 111 | for i=1:720 112 | A2detail1(:,i)=(F^720)*Adetail1(:,(length(z)-720)+i); 113 | end 114 | A22detail1=[Adetail1 A2detail1]; 115 | pdetail1=A22detail1(1,:); 116 | %% reconstruction 117 | C=[papprox';pdetail3';pdetail2';pdetail1']; 118 | L=[1980;1980;3960;7920;15840]; 119 | Xp=waverec(C,L,wname); 120 | 121 | %% 122 | plot(data,'k','Linewidth',2) 123 | hold on 124 | plot([T+1:T+1440],Xp(14401:15840),'r', 'Linewidth',2) 125 | hold on 126 | kalman=load('p_kalman_algo2008.mat'); 127 | kalman=kalman.predicted_kalman_algo2008; 128 | plot([T+1:T+1440],kalman,'b', 'Linewidth',2) 129 | 130 | %% rmse 131 | rmse=sqrt(mean((Xp(14401:15840)./m-data_original./m).^(2))) 132 | [c,lag]=xcorr(Xp(14401:15840),data_original,0,'coeff') 133 | 134 | 135 | %% Function 136 | 137 | function [xpred,Ppred]=predict(x,P,F,Q) 138 | xpred=F*x; 139 | Ppred=F*P*F'+Q; 140 | end 141 | 142 | function [nu,S]=innovation(xpred,Ppred,z,H,R) 143 | nu=z-H*xpred; 144 | S=R+H*Ppred*H'; 145 | end 146 | 147 | function [xnew,Pnew]=innovation_update(xpred,Ppred,nu,S,H) 148 | K=Ppred*H'*inv(S); 149 | xnew=xpred+K*nu; 150 | Pnew=Ppred-K*S*K'; 151 | end -------------------------------------------------------------------------------- /wmmsel6_algo2008.m: -------------------------------------------------------------------------------- 1 | clc; close all; clear all; 2 | A=xlsread('algo_2008'); 3 | d=A(:,2); 4 | data=d(127286:143125);m=max(data); 5 | y=d(127286:141685); 6 | T=length(y); 7 | data_original=d(141686:143125); 8 | %% level 6 DWT 9 | wname='haar'; 10 | level=6; 11 | [cy,ly] = wavedec(y,level,wname); 12 | [cd,ld]=wavedec(data,level,wname); 13 | yapprox=cy(1:225); 14 | ydetail6=cy(226:450); 15 | ydetail5=cy(451:900); 16 | ydetail4=cy(901:1800); 17 | ydetail3=cy(1800:3600); 18 | ydetail2=cy(3601:7200); 19 | ydetail1=cy(7201:14400); 20 | 21 | %% predict approx 22 | p=0:3;lp=length(p); 23 | q=0:3;lq=length(q); 24 | loglapprox=zeros(lp,lq); 25 | aicapprox=zeros(lp,lq); 26 | bicapprox=zeros(lp,lq); 27 | innovarapprox=zeros(lp,lq); 28 | for i=1:lp 29 | for j=1:lq 30 | Mdl=arima(p(i),0,q(j)); 31 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,yapprox); 32 | loglapprox(i,j)=logL; 33 | [n,m1]=size(EstParamCov); 34 | [aicapprox(i,j), bicapprox(i,j)]=aicbic(loglapprox(i,j),n,T); 35 | innovarapprox(i,j)=EstParamCov(n,n); 36 | end 37 | end 38 | [M1approx,I1approx] = min(aicapprox(:)); 39 | [row_aicapprox, col_aicapprox] = ind2sub(size(aicapprox),I1approx); 40 | mdlaicapprox=arima(row_aicapprox-1,0,col_aicapprox-1) 41 | [estmdlapproxaic,parmcovapproxaic,loglikapproxaic,inforapproxaic]=estimate(mdlaicapprox,yapprox); 42 | res_aicapprox = infer(estmdlapproxaic,yapprox); 43 | rng('default') 44 | Ysim_aicapprox = simulate(estmdlapproxaic,23,'NumPaths',50,'Y0',yapprox,'E0',res_aicapprox); 45 | mn_aicapprox = mean(Ysim_aicapprox,2); 46 | pcdapproxaic=[yapprox;mn_aicapprox]; 47 | 48 | [M11approx,I11approx] = min(bicapprox(:)); 49 | [row_bicapprox, col_bicapprox] = ind2sub(size(bicapprox),I11approx); 50 | mdlbicapprox=arima(row_bicapprox-1,0,col_bicapprox-1) 51 | [estmdlapproxbic,parmcovapproxbic,loglikapproxbic,inforapproxbic]=estimate(mdlbicapprox,yapprox); 52 | res_bicapprox = infer(estmdlapproxbic,yapprox); 53 | rng('default') 54 | Ysim_bicapprox = simulate(estmdlapproxbic,23,'NumPaths',50,'Y0',yapprox,'E0',res_bicapprox); 55 | mn_bicapprox = mean(Ysim_bicapprox,2); 56 | pcdapproxbic=[yapprox;mn_bicapprox]; 57 | 58 | 59 | [M111approx,I111approx] = min(innovarapprox(:)); 60 | [row_innovarapprox, col_innovarapprox] = ind2sub(size(innovarapprox),I111approx); 61 | mdlinnovarapprox=arima(row_innovarapprox-1,0,col_innovarapprox-1) 62 | [estmdlapproxinnovar,parmcovapproxinnovar,loglikapproxinnovar,inforapproxinnovar]=estimate(mdlinnovarapprox,yapprox); 63 | res_innovarapprox = infer(estmdlapproxinnovar,yapprox); 64 | rng('default') 65 | Ysim_innovarapprox = simulate(estmdlapproxinnovar,23,'NumPaths',50,'Y0',yapprox,'E0',res_innovarapprox); 66 | mn_innovarapprox = mean(Ysim_innovarapprox,2); 67 | pcdapproxinnovar=[yapprox;mn_innovarapprox]; 68 | 69 | %% predict detail 6 70 | p=0:3;lp=length(p); 71 | q=0:3;lq=length(q); 72 | logldetail6=zeros(lp,lq); 73 | aicdetail6=zeros(lp,lq); 74 | bicdetail6=zeros(lp,lq); 75 | innovardetail6=zeros(lp,lq); 76 | for i=1:lp 77 | for j=1:lq 78 | Mdl=arima(p(i),0,q(j)); 79 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,ydetail6); 80 | logldetail6(i,j)=logL; 81 | [n,m1]=size(EstParamCov); 82 | [aicdetail6(i,j), bicdetail6(i,j)]=aicbic(logldetail6(i,j),n,T); 83 | innovardetail6(i,j)=EstParamCov(n,n); 84 | end 85 | end 86 | [M1detail6,I1detail6] = min(aicdetail6(:)); 87 | [row_aicdetail6, col_aicdetail6] = ind2sub(size(aicdetail6),I1detail6); 88 | mdlaicdetail6=arima(row_aicdetail6-1,0,col_aicdetail6-1) 89 | [estmdldetail6aic,parmcovdetail6aic,loglikdetail6aic,infordetail6aic]=estimate(mdlaicdetail6,ydetail6); 90 | res_aicdetail6 = infer(estmdldetail6aic,ydetail6); 91 | rng('default') 92 | Ysim_aicdetail6 = simulate(estmdldetail6aic,23,'NumPaths',50,'Y0',ydetail6,'E0',res_aicdetail6); 93 | mn_aicdetail6 = mean(Ysim_aicdetail6,2); 94 | pcddetail6aic=[ydetail6;mn_aicdetail6]; 95 | 96 | 97 | [M11detail6,I11detail6] = min(bicdetail6(:)); 98 | [row_bicdetail6, col_bicdetail6] = ind2sub(size(bicdetail6),I11detail6); 99 | mdlbicdetail6=arima(row_bicdetail6-1,0,col_bicdetail6-1) 100 | [estmdldetail6bic,parmcovdetail6bic,loglikdetail6bic,infordetail6bic]=estimate(mdlbicdetail6,ydetail6); 101 | res_bicdetail6 = infer(estmdldetail6bic,ydetail6); 102 | rng('default') 103 | Ysim_bicdetail6 = simulate(estmdldetail6bic,23,'NumPaths',50,'Y0',ydetail6,'E0',res_bicdetail6); 104 | mn_bicdetail6 = mean(Ysim_bicdetail6,2); 105 | pcddetail6bic=[ydetail6;mn_bicdetail6]; 106 | 107 | [M111detail6,I111detail6] = min(innovardetail6(:)); 108 | [row_innovardetail6, col_innovardetail6] = ind2sub(size(innovardetail6),I111detail6); 109 | mdlinnovardetail6=arima(row_innovardetail6-1,0,col_innovardetail6-1) 110 | [estmdldetail6innovar,parmcovdetail6innovar,loglikdetail6innovar,infordetail6innovar]=estimate(mdlinnovardetail6,ydetail6); 111 | res_innovardetail6 = infer(estmdldetail6innovar,ydetail6); 112 | rng('default') 113 | Ysim_innovardetail6 = simulate(estmdldetail6innovar,23,'NumPaths',50,'Y0',ydetail6,'E0',res_innovardetail6); 114 | mn_innovardetail6 = mean(Ysim_innovardetail6,2); 115 | pcddetail6innovar=[ydetail6;mn_innovardetail6]; 116 | 117 | %% predict detail 5 118 | p=0:3;lp=length(p); 119 | q=0:3;lq=length(q); 120 | logldetail5=zeros(lp,lq); 121 | aicdetail5=zeros(lp,lq); 122 | bicdetail5=zeros(lp,lq); 123 | innovardetail5=zeros(lp,lq); 124 | for i=1:lp 125 | for j=1:lq 126 | Mdl=arima(p(i),0,q(j)); 127 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,ydetail5); 128 | logldetail5(i,j)=logL; 129 | [n,m1]=size(EstParamCov); 130 | [aicdetail5(i,j), bicdetail5(i,j)]=aicbic(logldetail5(i,j),n,T); 131 | innovardetail5(i,j)=EstParamCov(n,n); 132 | end 133 | end 134 | [M1detail5,I1detail5] = min(aicdetail5(:)); 135 | [row_aicdetail5, col_aicdetail5] = ind2sub(size(aicdetail5),I1detail5); 136 | mdlaicdetail5=arima(row_aicdetail5-1,0,col_aicdetail5-1) 137 | [estmdldetail5aic,parmcovdetail5aic,loglikdetail5aic,infordetail5aic]=estimate(mdlaicdetail5,ydetail5); 138 | res_aicdetail5 = infer(estmdldetail5aic,ydetail5); 139 | rng('default') 140 | Ysim_aicdetail5 = simulate(estmdldetail5aic,45,'NumPaths',50,'Y0',ydetail5,'E0',res_aicdetail5); 141 | mn_aicdetail5 = mean(Ysim_aicdetail5,2); 142 | pcddetail5aic=[ydetail5;mn_aicdetail5]; 143 | 144 | 145 | [M11detail5,I11detail5] = min(bicdetail5(:)); 146 | [row_bicdetail5, col_bicdetail5] = ind2sub(size(bicdetail5),I11detail5); 147 | mdlbicdetail5=arima(row_bicdetail5-1,0,col_bicdetail5-1) 148 | [estmdldetail5bic,parmcovdetail5bic,loglikdetail5bic,infordetail5bic]=estimate(mdlbicdetail5,ydetail5); 149 | res_bicdetail5 = infer(estmdldetail5bic,ydetail5); 150 | rng('default') 151 | Ysim_bicdetail5 = simulate(estmdldetail5bic,45,'NumPaths',50,'Y0',ydetail5,'E0',res_bicdetail5); 152 | mn_bicdetail5 = mean(Ysim_bicdetail5,2); 153 | pcddetail5bic=[ydetail5;mn_bicdetail5]; 154 | 155 | [M111detail5,I111detail5] = min(innovardetail5(:)); 156 | [row_innovardetail5, col_innovardetail5] = ind2sub(size(innovardetail5),I111detail5); 157 | mdlinnovardetail5=arima(row_innovardetail5-1,0,col_innovardetail5-1) 158 | [estmdldetail5innovar,parmcovdetail5innovar,loglikdetail5innovar,infordetail5innovar]=estimate(mdlinnovardetail5,ydetail5); 159 | res_innovardetail5 = infer(estmdldetail5innovar,ydetail5); 160 | rng('default') 161 | Ysim_innovardetail5 = simulate(estmdldetail5innovar,45,'NumPaths',50,'Y0',ydetail5,'E0',res_innovardetail5); 162 | mn_innovardetail5 = mean(Ysim_innovardetail5,2); 163 | pcddetail5innovar=[ydetail5;mn_innovardetail5]; 164 | 165 | %% predict detail 4 166 | p=0:3;lp=length(p); 167 | q=0:3;lq=length(q); 168 | logldetail4=zeros(lp,lq); 169 | aicdetail4=zeros(lp,lq); 170 | bicdetail4=zeros(lp,lq); 171 | innovardetail4=zeros(lp,lq); 172 | for i=1:lp 173 | for j=1:lq 174 | Mdl=arima(p(i),0,q(j)); 175 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,ydetail4); 176 | logldetail4(i,j)=logL; 177 | [n,m1]=size(EstParamCov); 178 | [aicdetail4(i,j), bicdetail4(i,j)]=aicbic(logldetail4(i,j),n,T); 179 | innovardetail4(i,j)=EstParamCov(n,n); 180 | end 181 | end 182 | [M1detail4,I1detail4] = min(aicdetail4(:)); 183 | [row_aicdetail4, col_aicdetail4] = ind2sub(size(aicdetail4),I1detail4); 184 | mdlaicdetail4=arima(row_aicdetail4-1,0,col_aicdetail4-1) 185 | [estmdldetail4aic,parmcovdetail4aic,loglikdetail4aic,infordetail4aic]=estimate(mdlaicdetail4,ydetail4); 186 | res_aicdetail4 = infer(estmdldetail4aic,ydetail4); 187 | rng('default') 188 | Ysim_aicdetail4 = simulate(estmdldetail4aic,90,'NumPaths',50,'Y0',ydetail4,'E0',res_aicdetail4); 189 | mn_aicdetail4 = mean(Ysim_aicdetail4,2); 190 | pcddetail4aic=[ydetail4;mn_aicdetail4]; 191 | 192 | 193 | [M11detail4,I11detail4] = min(bicdetail4(:)); 194 | [row_bicdetail4, col_bicdetail4] = ind2sub(size(bicdetail4),I11detail4); 195 | mdlbicdetail4=arima(row_bicdetail4-1,0,col_bicdetail4-1) 196 | [estmdldetail4bic,parmcovdetail4bic,loglikdetail4bic,infordetail4bic]=estimate(mdlbicdetail4,ydetail4); 197 | res_bicdetail4 = infer(estmdldetail4bic,ydetail4); 198 | rng('default') 199 | Ysim_bicdetail4 = simulate(estmdldetail4bic,90,'NumPaths',50,'Y0',ydetail4,'E0',res_bicdetail4); 200 | mn_bicdetail4 = mean(Ysim_bicdetail4,2); 201 | pcddetail4bic=[ydetail4;mn_bicdetail4]; 202 | 203 | [M111detail4,I111detail4] = min(innovardetail4(:)); 204 | [row_innovardetail4, col_innovardetail4] = ind2sub(size(innovardetail4),I111detail4); 205 | mdlinnovardetail4=arima(row_innovardetail4-1,0,col_innovardetail4-1) 206 | [estmdldetail4innovar,parmcovdetail4innovar,loglikdetail4innovar,infordetail4innovar]=estimate(mdlinnovardetail4,ydetail4); 207 | res_innovardetail4 = infer(estmdldetail4innovar,ydetail4); 208 | rng('default') 209 | Ysim_innovardetail4 = simulate(estmdldetail4innovar,90,'NumPaths',50,'Y0',ydetail4,'E0',res_innovardetail4); 210 | mn_innovardetail4 = mean(Ysim_innovardetail4,2); 211 | pcddetail4innovar=[ydetail4;mn_innovardetail4]; 212 | 213 | %% predict detail 3 214 | 215 | p=0:3;lp=length(p); 216 | q=0:3;lq=length(q); 217 | logldetail3=zeros(lp,lq); 218 | aicdetail3=zeros(lp,lq); 219 | bicdetail3=zeros(lp,lq); 220 | innovardetail3=zeros(lp,lq); 221 | for i=1:lp 222 | for j=1:lq 223 | Mdl=arima(p(i),0,q(j)); 224 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,ydetail3); 225 | logldetail3(i,j)=logL; 226 | [n,m1]=size(EstParamCov); 227 | [aicdetail3(i,j), bicdetail3(i,j)]=aicbic(logldetail3(i,j),n,T); 228 | innovardetail3(i,j)=EstParamCov(n,n); 229 | end 230 | end 231 | [M1detail3,I1detail3] = min(aicdetail3(:)); 232 | [row_aicdetail3, col_aicdetail3] = ind2sub(size(aicdetail3),I1detail3); 233 | mdlaicdetail3=arima(row_aicdetail3-1,0,col_aicdetail3-1) 234 | [estmdldetail3aic,parmcovdetail3aic,loglikdetail3aic,infordetail3aic]=estimate(mdlaicdetail3,ydetail3); 235 | res_aicdetail3 = infer(estmdldetail3aic,ydetail3); 236 | rng('default') 237 | Ysim_aicdetail3 = simulate(estmdldetail3aic,180,'NumPaths',50,'Y0',ydetail3,'E0',res_aicdetail3); 238 | mn_aicdetail3 = mean(Ysim_aicdetail3,2); 239 | pcddetail3aic=[ydetail3;mn_aicdetail3]; 240 | 241 | 242 | [M11detail3,I11detail3] = min(bicdetail3(:)); 243 | [row_bicdetail3, col_bicdetail3] = ind2sub(size(bicdetail3),I11detail3); 244 | mdlbicdetail3=arima(row_bicdetail3-1,0,col_bicdetail3-1) 245 | [estmdldetail3bic,parmcovdetail3bic,loglikdetail3bic,infordetail3bic]=estimate(mdlbicdetail3,ydetail3); 246 | res_bicdetail3 = infer(estmdldetail3bic,ydetail3); 247 | rng('default') 248 | Ysim_bicdetail3 = simulate(estmdldetail3bic,180,'NumPaths',50,'Y0',ydetail3,'E0',res_bicdetail3); 249 | mn_bicdetail3 = mean(Ysim_bicdetail3,2); 250 | pcddetail3bic=[ydetail3;mn_bicdetail3]; 251 | 252 | [M111detail3,I111detail3] = min(innovardetail3(:)); 253 | [row_innovardetail3, col_innovardetail3] = ind2sub(size(innovardetail3),I111detail3); 254 | mdlinnovardetail3=arima(row_innovardetail3-1,0,col_innovardetail3-1) 255 | [estmdldetail3innovar,parmcovdetail3innovar,loglikdetail3innovar,infordetail3innovar]=estimate(mdlinnovardetail3,ydetail3); 256 | res_innovardetail3 = infer(estmdldetail3innovar,ydetail3); 257 | rng('default') 258 | Ysim_innovardetail3 = simulate(estmdldetail3innovar,180,'NumPaths',50,'Y0',ydetail3,'E0',res_innovardetail3); 259 | mn_innovardetail3 = mean(Ysim_innovardetail3,2); 260 | pcddetail3innovar=[ydetail3;mn_innovardetail3]; 261 | 262 | %% predict detail 2 263 | p=0:3;lp=length(p); 264 | q=0:3;lq=length(q); 265 | logldetail2=zeros(lp,lq); 266 | aicdetail2=zeros(lp,lq); 267 | bicdetail2=zeros(lp,lq); 268 | innovardetail2=zeros(lp,lq); 269 | for i=1:lp 270 | for j=1:lq 271 | Mdl=arima(p(i),0,q(j)); 272 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,ydetail2); 273 | logldetail2(i,j)=logL; 274 | [n,m1]=size(EstParamCov); 275 | [aicdetail2(i,j), bicdetail2(i,j)]=aicbic(logldetail2(i,j),n,T); 276 | innovardetail2(i,j)=EstParamCov(n,n); 277 | end 278 | end 279 | [M1detail2,I1detail2] = min(aicdetail2(:)); 280 | [row_aicdetail2, col_aicdetail2] = ind2sub(size(aicdetail2),I1detail2); 281 | mdlaicdetail2=arima(row_aicdetail2-1,0,col_aicdetail2-1) 282 | [estmdldetail2aic,parmcovdetail2aic,loglikdetail2aic,infordetail2aic]=estimate(mdlaicdetail2,ydetail2); 283 | res_aicdetail2 = infer(estmdldetail2aic,ydetail2); 284 | rng('default') 285 | Ysim_aicdetail2 = simulate(estmdldetail2aic,360,'NumPaths',50,'Y0',ydetail2,'E0',res_aicdetail2); 286 | mn_aicdetail2 = mean(Ysim_aicdetail2,2); 287 | pcddetail2aic=[ydetail2;mn_aicdetail2]; 288 | 289 | 290 | [M11detail2,I11detail2] = min(bicdetail2(:)); 291 | [row_bicdetail2, col_bicdetail2] = ind2sub(size(bicdetail2),I11detail2); 292 | mdlbicdetail2=arima(row_bicdetail2-1,0,col_bicdetail2-1) 293 | [estmdldetail2bic,parmcovdetail2bic,loglikdetail2bic,infordetail2bic]=estimate(mdlbicdetail2,ydetail2); 294 | res_bicdetail2 = infer(estmdldetail2bic,ydetail2); 295 | rng('default') 296 | Ysim_bicdetail2 = simulate(estmdldetail2bic,360,'NumPaths',50,'Y0',ydetail2,'E0',res_bicdetail2); 297 | mn_bicdetail2 = mean(Ysim_bicdetail2,2); 298 | pcddetail2bic=[ydetail2;mn_bicdetail2]; 299 | 300 | [M111detail2,I111detail2] = min(innovardetail2(:)); 301 | [row_innovardetail2, col_innovardetail2] = ind2sub(size(innovardetail2),I111detail2); 302 | mdlinnovardetail2=arima(row_innovardetail2-1,0,col_innovardetail2-1) 303 | [estmdldetail2innovar,parmcovdetail2innovar,loglikdetail2innovar,infordetail2innovar]=estimate(mdlinnovardetail2,ydetail2); 304 | res_innovardetail2 = infer(estmdldetail2innovar,ydetail2); 305 | rng('default') 306 | Ysim_innovardetail2 = simulate(estmdldetail2innovar,360,'NumPaths',50,'Y0',ydetail2,'E0',res_innovardetail2); 307 | mn_innovardetail2 = mean(Ysim_innovardetail2,2); 308 | pcddetail2innovar=[ydetail2;mn_innovardetail2]; 309 | 310 | %% predict detail 1 311 | 312 | p=0:3;lp=length(p); 313 | q=0:3;lq=length(q); 314 | logldetail=zeros(lp,lq); 315 | aicdetail1=zeros(lp,lq); 316 | bicdetail1=zeros(lp,lq); 317 | innovardetail1=zeros(lp,lq); 318 | for i=1:lp 319 | for j=1:lq 320 | Mdl=arima(p(i),0,q(j)); 321 | [EstMdl,EstParamCov,logL,info] = estimate(Mdl,ydetail1); 322 | logldetail1(i,j)=logL; 323 | [n,m1]=size(EstParamCov); 324 | [aicdetail1(i,j), bicdetail1(i,j)]=aicbic(logldetail1(i,j),n,T); 325 | innovardetail1(i,j)=EstParamCov(n,n); 326 | end 327 | end 328 | [M1detail1,I1detail1] = min(aicdetail1(:)); 329 | [row_aicdetail1, col_aicdetail1] = ind2sub(size(aicdetail1),I1detail1); 330 | mdlaicdetail1=arima(row_aicdetail1-1,0,col_aicdetail1-1) 331 | [estmdldetail1aic,parmcovdetail1aic,loglikdetail1aic,infordetail1aic]=estimate(mdlaicdetail1,ydetail1); 332 | res_aicdetail1 = infer(estmdldetail1aic,ydetail1); 333 | rng('default') 334 | Ysim_aicdetail1 = simulate(estmdldetail1aic,720,'NumPaths',50,'Y0',ydetail1,'E0',res_aicdetail1); 335 | mn_aicdetail1 = mean(Ysim_aicdetail1,2); 336 | pcddetail1aic=[ydetail1;mn_aicdetail1]; 337 | 338 | 339 | [M11detail1,I11detail1] = min(bicdetail1(:)); 340 | [row_bicdetail1, col_bicdetail1] = ind2sub(size(bicdetail1),I11detail1); 341 | mdlbicdetail1=arima(row_bicdetail1-1,0,col_bicdetail1-1) 342 | [estmdldetail1bic,parmcovdetail1bic,loglikdetail1bic,infordetail1bic]=estimate(mdlbicdetail1,ydetail1); 343 | res_bicdetail1 = infer(estmdldetail1bic,ydetail1); 344 | rng('default') 345 | Ysim_bicdetail1 = simulate(estmdldetail1bic,720,'NumPaths',50,'Y0',ydetail1,'E0',res_bicdetail1); 346 | mn_bicdetail1 = mean(Ysim_bicdetail1,2); 347 | pcddetail1bic=[ydetail1;mn_bicdetail1]; 348 | 349 | [M111detail1,I111detail1] = min(innovardetail1(:)); 350 | [row_innovardetail1, col_innovardetail1] = ind2sub(size(innovardetail1),I111detail1); 351 | mdlinnovardetail1=arima(row_innovardetail1-1,0,col_innovardetail1-1) 352 | [estmdldetail1innovar,parmcovdetail1innovar,loglikdetail1innovar,infordetail1innovar]=estimate(mdlinnovardetail1,ydetail1); 353 | res_innovardetail1 = infer(estmdldetail1innovar,ydetail1); 354 | rng('default') 355 | Ysim_innovardetail1 = simulate(estmdldetail1innovar,720,'NumPaths',50,'Y0',ydetail1,'E0',res_innovardetail1); 356 | mn_innovardetail1 = mean(Ysim_innovardetail1,2); 357 | pcddetail1innovar=[ydetail1;mn_innovardetail1]; 358 | %% reconstruction 359 | 360 | Caic=[pcdapproxaic;pcddetail6aic;pcddetail5aic;pcddetail4aic;pcddetail3aic;pcddetail2aic;pcddetail1aic]; 361 | Cbic=[pcdapproxbic;pcddetail6bic;pcddetail5bic;pcddetail4bic;pcddetail3bic;pcddetail2bic;pcddetail1bic]; 362 | Cinnovar= [pcdapproxinnovar;pcddetail6innovar;pcddetail5innovar;pcddetail4innovar;pcddetail3innovar;pcddetail2innovar;pcddetail1innovar]; 363 | L=[248;248;495;990;1980;3960;7920;15840]; 364 | Xpaic=waverec(Caic,L,wname); 365 | Xpbic=waverec(Cbic,L,wname); 366 | Xpinnovar=waverec(Cinnovar,L,wname); 367 | %% rms error and error 368 | rmseaic= sqrt(mean(((Xpaic(14401:15840)./m)-(data_original./m)).^2)) 369 | [corraic,lags]=xcorr((Xpaic(14401:15840)),data_original,0,'coeff') 370 | 371 | rmsebic= sqrt(mean(((Xpbic(14401:15840)./m)-(data_original./m)).^2)) 372 | [corrbic,lags]=xcorr((Xpbic(14401:15840)),data_original,0,'coeff') 373 | 374 | rmseinnovar= sqrt(mean(((Xpinnovar(14401:15840)./m)-(data_original./m)).^2)) 375 | [corrinnovar,lags]=xcorr((Xpinnovar(14401:15840)),data_original,0,'coeff') 376 | %% plot 377 | plot(data,'k','Linewidth',2) 378 | hold on 379 | plot([T+1:T+1440],Xpaic(14401:15840),'r','Linewidth',2) 380 | hold on 381 | plot([T+1:T+1440],Xpbic(14401:15840),'b','Linewidth',2) 382 | hold on 383 | plot([T+1:T+1440],Xpinnovar(14401:15840),'g','Linewidth',2) 384 | 385 | --------------------------------------------------------------------------------