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