root/doprava/model.h @ 318

Revision 283, 1.8 kB (checked in by smidl, 15 years ago)

get rid of BMcond + adaptation in doprava/

  • 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//! Model stredni hodnoty vyvoje stavu pro k1
9class IMk1 : public diffbifn {
10protected:
11        double alp1, alp2; // pomery odboceni...
12
13public:
14        //! Constructor
15        IMk1() :diffbifn () {dimy=4; dimx=3; dimu=1;}; 
16        //! set CONSTANT parameters
17        void set_parameters ( double alp10,  double alp20) {alp1=alp10; alp2=alp20;}
18
19        vec eval ( const vec &x0, const vec &u0 ) {
20                // napln stav nulami
21                vec xk=zeros ( dimy );
22
23                xk ( 0 ) = 0.2* x0(1) - 0.1* x0(2)+ u0(0);  // vycucane z prstu
24                xk ( 1 ) = x0(0); 
25                xk ( 2 ) = x0(1);
26                xk ( 3 ) = x0(2);
27
28                return xk;
29        }
30
31        void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
32                // Vysledek se uklada do matice A
33
34                if (full) { // priznak full se nastavi na zacatku => je treba naplnit celou matici
35                        A = eye(dimy);
36                        A(0,1) = 0.2;
37                        A(0,2) = -0.1;
38                } else {
39                }; // pokud neni priznak full, staci naplnit jen to co se zmenilo. V tomhle pripade se nemeni nic
40        }
41
42        void dfdu_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {it_error ( "not needed" );};
43
44};
45
46//! model stredni hodnoty pozorovani pro k1
47class OMk1 : public diffbifn {
48public:
49        //! Constructor
50        OMk1() :diffbifn ( ) {dimy=2;dimx=3;dimu=2;}; //<======= TODO
51        // Model pozorovani  je trivialni jen se zkopiruji stavy
52        vec eval(const vec &x0, const vec &u0 ){
53                vec dt(dimy);
54                // Pozoruji pouze prvni dva stavy
55                dt(0) = x0(0);
56                dt(1) = x0(1); 
57                return dt;
58        }
59        //
60        void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
61                // Vysledek se uklada do matice A
62
63                if (full) { // priznak full se nastavi na zacatku => je treba naplnit celou matici
64                        A = zeros(dimy,dimx);
65                        A(0,0)=1.0;
66                        A(1,1)=1.0;
67                } else {}; // pokud neni priznak full, staci naplnit jen to co se zmenilo. V tomhle pripade se nemeni nic
68        }
69};
70
71#endif //MODEL_H
Note: See TracBrowser for help on using the browser.