root/doprava/model.h @ 278

Revision 278, 2.2 kB (checked in by smidl, 15 years ago)

props

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