root/doprava/model.h @ 196

Revision 196, 2.2 kB (checked in by smidl, 16 years ago)
Line 
1#ifndef MODEL_H
2#define MODEL_H
3
4#include <stat/libFN.h>
5
6//Tady se naplni "popis" jednotlivych nahodnych velicin na kterych se pracuje
7// Moznosti je velmi mnoho (viz doc/html/index.html): napriklad
8RV RVstav ( "{stav }", "4");  // Vyrabim stav velikosti 4
9RV RVut ( "{ut }", "2");     // Vstup velikosti 2
10RV RVpozor ( "{I1 O1 }");     //Vystup je intenzita a obsazenost
11
12//! Model stredni hodnoty vyvoje stavu pro k1
13class IMk1 : public diffbifn {
14protected:
15        double alp1, alp2; // pomery odboceni...
16
17public:
18        //! Constructor
19        IMk1() :diffbifn (RVstav.count(), RVstav, RVut ) {}; 
20        //! set CONSTANT parameters
21        void set_parameters ( double alp10,  double alp20) {alp1=alp10; alp2=alp20;}
22
23        vec eval ( const vec &x0, const vec &u0 ) {
24                // napln stav nulami
25                vec xk=zeros ( RVstav.count() );
26
27                xk ( 0 ) = 0.2* x0(1) - 0.1* x0(2)+ u0(0);  // vycucane z prstu
28                xk ( 1 ) = x0( 0); 
29                xk ( 2 ) = x0(1);
30                xk ( 3 ) = x0(2);
31
32                return xk;
33        }
34
35        void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
36                // Vysledek se uklada do matice A
37
38                if (full) { // priznak full se nastavi na zacatku => je treba naplnit celou matici
39                        A = eye(RVstav.count());
40                        A(0,1) = 0.2;
41                        A(0,2) = -0.1;
42                } else {
43                }; // pokud neni priznak full, staci naplnit jen to co se zmenilo. V tomhle pripade se nemeni nic
44        }
45
46        void dfdu_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {it_error ( "not needed" );};
47
48};
49
50//! model stredni hodnoty pozorovani pro k1
51class OMk1 : public diffbifn {
52public:
53        //! Constructor
54        OMk1() :diffbifn (RVpozor.count(), RVstav, RVut ) {}; 
55        // Model pozorovani  je trivialni jen se zkopiruji stavy
56        vec eval(const vec &x0, const vec &u0 ){
57                vec dt(RVpozor.count());
58                // Pozoruji pouze prvni dva stavy
59                dt(0) = x0(0);
60                dt(1) = x0(1); 
61                return dt;
62        }
63        //
64        void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
65                // Vysledek se uklada do matice A
66
67                if (full) { // priznak full se nastavi na zacatku => je treba naplnit celou matici
68                        A = zeros(RVpozor.count(),RVstav.count());
69                        A(0,0)=1.0;
70                        A(1,1)=1.0;
71                } else {}; // pokud neni priznak full, staci naplnit jen to co se zmenilo. V tomhle pripade se nemeni nic
72        }
73};
74
75#endif //MODEL_H
Note: See TracBrowser for help on using the browser.