286 | | |
| 286 | |
| 287 | /*! \brief ARX model with fixed-length window - old entries are removed |
| 288 | * \f[ f( heta| d_1 \ldots d_t) \f] |
| 289 | * |
| 290 | */ |
| 291 | class ARXwin : public ARX { |
| 292 | protected: |
| 293 | mat Y; |
| 294 | mat Cond; |
| 295 | |
| 296 | int win_length; |
| 297 | ldmat V0; |
| 298 | double nu0; |
| 299 | public: |
| 300 | ARXwin() : ARX() {}; |
| 301 | //! copy constructor |
| 302 | void set_parameters(const int win_length0){ |
| 303 | win_length=win_length0; |
| 304 | } |
| 305 | ARXwin ( const ARXwin &A0 ) : ARX(A0), Y( A0.Y), Cond(A0.Cond) {}; |
| 306 | |
| 307 | virtual ARXwin* _copy() const { |
| 308 | ARXwin *A = new ARXwin ( *this ); |
| 309 | return A; |
| 310 | } |
| 311 | |
| 312 | void bayes ( const vec &val, const vec &cond ) { |
| 313 | // fill window |
| 314 | Y.append_col(val); |
| 315 | Cond.append_col(cond); |
| 316 | if (Y.cols()>win_length){ |
| 317 | // shift the buffer |
| 318 | Y=Y.get_cols(1,Y.cols()-1); |
| 319 | Cond=Cond.get_cols(1,Cond.cols()-1); |
| 320 | } |
| 321 | |
| 322 | est._V()=V0; |
| 323 | est._nu()=nu0; |
| 324 | for ( int t = 0; t < Y.cols(); t++ ) { |
| 325 | ARX::bayes ( Y.get_col ( t ), Cond.get_col ( t ) ); |
| 326 | } |
| 327 | |
| 328 | } |
| 329 | void from_setting(const Setting &set){ |
| 330 | ARX::from_setting(set); |
| 331 | UI::get(win_length,set,"win_length",UI::compulsory); |
| 332 | } |
| 333 | void validate() { |
| 334 | ARX::validate(); |
| 335 | V0=est._V(); |
| 336 | nu0=est._nu(); |
| 337 | } |
| 338 | }; |
| 339 | |
| 340 | UIREGISTER ( ARXwin ); |
| 341 | |
| 342 | |