00001 #ifndef MODEL_H
00002 #define MODEL_H
00003
00004 #include <stat/libFN.h>
00005
00006 using namespace bdm;
00007
00008
00009
00010 RV RVstav ( "{stav }", "4");
00011 RV RVut ( "{ut }", "2");
00012 RV RVpozor ( "{I1 O1 }");
00013
00015 class IMk1 : public diffbifn {
00016 protected:
00017 double alp1, alp2;
00018
00019 public:
00021 IMk1() :diffbifn (RVstav.count(), RVstav, RVut ) {};
00023 void set_parameters ( double alp10, double alp20) {alp1=alp10; alp2=alp20;}
00024
00025 vec eval ( const vec &x0, const vec &u0 ) {
00026
00027 vec xk=zeros ( RVstav.count() );
00028
00029 xk ( 0 ) = 0.2* x0(1) - 0.1* x0(2)+ u0(0);
00030 xk ( 1 ) = x0(0);
00031 xk ( 2 ) = x0(1);
00032 xk ( 3 ) = x0(2);
00033
00034 return xk;
00035 }
00036
00037 void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
00038
00039
00040 if (full) {
00041 A = eye(RVstav.count());
00042 A(0,1) = 0.2;
00043 A(0,2) = -0.1;
00044 } else {
00045 };
00046 }
00047
00048 void dfdu_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {it_error ( "not needed" );};
00049
00050 };
00051
00053 class OMk1 : public diffbifn {
00054 public:
00056 OMk1() :diffbifn (RVpozor.count(), RVstav, RVut ) {};
00057
00058 vec eval(const vec &x0, const vec &u0 ){
00059 vec dt(RVpozor.count());
00060
00061 dt(0) = x0(0);
00062 dt(1) = x0(1);
00063 return dt;
00064 }
00065
00066 void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
00067
00068
00069 if (full) {
00070 A = zeros(RVpozor.count(),RVstav.count());
00071 A(0,0)=1.0;
00072 A(1,1)=1.0;
00073 } else {};
00074 }
00075 };
00076
00077 #endif //MODEL_H