#define BDMLIB #include "../mat_checks.h" #include "design/ctrlbase.h" using namespace bdm; TEST ( LQG_test ) { LQG reg; shared_ptr > stsp = new StateSpace; // 2 x 1 x 1 stsp-> set_parameters ( eye ( 2 ), ones ( 2, 1 ), ones ( 1, 2 ), ones ( 1, 1 ), /* Q,R */ eye ( 2 ), eye ( 1 ) ); reg.set_system ( stsp ); // A, B, C reg.set_control_parameters ( eye ( 1 ), eye ( 1 ), vec_1 ( 1.0 ), 6 ); //Qy, Qu, horizon reg.validate(); reg.redesign(); double reg_apply = reg.ctrlaction ( "0.5, 1.1", "0.0" ) ( 0 ); /*convert vec to double*/ CHECK_CLOSE ( reg_apply, -0.248528137234392, 0.0001 ); } TEST ( to_state_test ) { mlnorm ml; mat A = "1.1, 2.3"; ml.set_parameters ( A, vec_1 ( 1.3 ), eye ( 1 ) ); RV yr = RV ( "y", 1 ); RV ur = RV ( "u", 1 ); ml.set_rv ( yr ); yr.t_plus ( -1 ); ml.set_rvc ( concat ( yr, ur ) ); shared_ptr Stsp = new StateCanonical; Stsp->connect_mlnorm ( ml ); /* results from [A,B,C,D]=tf2ss([2.3 0],[1 -1.1]) */ CHECK_CLOSE_EX ( Stsp->_A().get_row ( 0 ), vec ( "1.1" ), 0.0001 ); CHECK_CLOSE_EX ( Stsp->_C().get_row ( 0 ), vec ( "2.53" ), 0.0001 ); CHECK_CLOSE_EX ( Stsp->_D().get_row ( 0 ), vec ( "2.30" ), 0.0001 ); } TEST ( to_state_arx_test ) { mlnorm ml; mat A = "1.1, 2.3, 3.4"; ml.set_parameters ( A, vec_1 ( 1.3 ), eye ( 1 ) ); RV yr = RV ( "y", 1 ); RV ur = RV ( "u", 1 ); ml.set_rv ( yr ); ml.set_rvc ( concat ( yr.copy_t ( -1 ), concat ( ur, ur.copy_t ( -1 ) ) ) ); shared_ptr Stsp = new StateFromARX; RV xrv; RV urv; Stsp->connect_mlnorm ( ml, xrv, urv ); /* results from [A,B,C,D]=tf2ss([2.3 0],[1 -1.1]) */ CHECK_CLOSE_EX ( Stsp->_A().get_row ( 0 ), vec ( "1.1, 3.4, 1.3" ), 0.0001 ); CHECK_CLOSE_EX ( Stsp->_B().get_row ( 0 ), vec ( "2.3" ), 0.0001 ); CHECK_CLOSE_EX ( Stsp->_C().get_row ( 0 ), vec ( "1, 0, 0" ), 0.0001 ); } TEST ( arx_LQG_test ) { mlnorm ml; mat A = "1.81, -.81, .00468, .00438"; ml.set_parameters ( A, vec_1 ( 0.0 ), 0.00001*eye ( 1 ) ); RV yr = RV ( "y", 1 ); RV ur = RV ( "u", 1 ); RV rgr = yr.copy_t ( -1 ); rgr.add ( yr.copy_t ( -2 ) ); rgr.add ( yr.copy_t ( -2 ) ); rgr.add ( ur.copy_t ( -1 ) ); rgr.add ( ur ); ml.set_rv ( yr ); ml.set_rvc ( rgr ); ml.validate(); shared_ptr Stsp = new StateFromARX; RV xrv; RV urv; Stsp->connect_mlnorm ( ml, xrv, urv ); LQG L; L.set_system ( Stsp ); L.set_control_parameters ( eye ( 1 ), sqrt ( 1.0 / 1000 ) *eye ( 1 ), vec_1 ( 0.0 ), 100 ); L.validate(); L.redesign(); cout << L.to_string() << endl; }