sim_var_arx.cpp itpp/itbase.h estim/arx.h stat/loggers.h vec vec getPsi_a (int t, mat &D, mat &Du, mat &X) getPsi_a int t mat & D mat & Du mat & X vec vec getPsi_b (int t, mat &D, mat &Du, mat &X) getPsi_b int t mat & D mat & Du mat & X int int main () main Models for synchronous electric drive using IT++ and BDM. Vaclav Smidl. ----------------------------------- BDM++ - C++ library for Bayesian Decision Making under UncertaintyUsing IT++ for numerical operations ----------------------------------- #include<itpp/itbase.h> #include<estim/arx.h> #include<stat/loggers.h> usingnamespaceitpp; vecgetPsi_a(intt,mat&D,mat&Du,mat&X); vecgetPsi_b(intt,mat&D,mat&Du,mat&X); intmain(){ //Kalmanfilter intNdat=90000; matD; matDu; matX; dirfilelogL("exp/sim_var_arx",1000); it_fileitf("sim_var.it"); itf>>Name("D")>>D; itf>>Name("Du")>>Du; itf>>Name("X")>>X; Array<std::string>Names="{iaibomdomr}"; intrglen=Names.length(); //Regressor RVrgr(Names); matV0=0.0001*eye(rglen);V0(0,0)=200; doublenu0=rglen+1; //Autoregressivemodel ARXAr_a(rgr,V0,nu0,0.95); ARXAr_b(rgr,V0,nu0,0.95); epdf&pA=Ar_a._epdf(); epdf&pB=Ar_b._epdf(); RVrta("{th_a}",vec_1(rglen)); RVrtb("{th_b}",vec_1(rglen)); inttha_log=L.add(rta,""); intthb_log=L.add(rtb,""); L.init(); vecPsi(rglen); vecSave(13); for(intt=2;t<Ndat;t++){ Psi=getPsi_a(t,D,Du,X); Ar_a.bayes(Psi); Psi=getPsi_b(t,D,Du,X); Ar_b.bayes(Psi); Save=pA.mean(); L.logit(tha_log,Save); Save=pB.mean(); L.logit(thb_log,Save); L.step(); } L.finalize(); ivecbestind=Ar_a.structure_est(egiw(rgr,V0,nu0)); ivecbestind2=Ar_b.structure_est(egiw(rgr,V0,nu0)); cout<<bestind<<endl; cout<<bestind2<<endl; return0; } vecgetPsi_a(intt,mat&D,mat&Du,mat&X){ vecPsi(5); Psi(0)=D(t,0)-Du(t,0);//a=0 Psi(1)=D(t,2); Psi(2)=D(t,2)-D(t-1,2); Psi(3)=D(t,0)-D(t-1,0); Psi(4)=X(t,2)-X(t-1,2); returnPsi; } vecgetPsi_b(intt,mat&D,mat&Du,mat&X){ vecPsi(5); Psi(0)=D(t,1)-Du(t,1);//b=1 Psi(1)=D(t,3); Psi(2)=D(t,3)-D(t-1,3); Psi(3)=D(t,1)-D(t-1,1); Psi(4)=X(t,2)-X(t-1,2); returnPsi; }