root/library/tests/testsuite/LQG_test.cpp @ 731

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

Big commit of LQG stuff

  • Property svn:eol-style set to native
Line 
1#define BDMLIB
2#include "../mat_checks.h"
3#include "design/ctrlbase.h"
4
5using namespace bdm;
6
7TEST(LQG_test) {
8        LQG reg;
9        shared_ptr<StateSpace<chmat> > stsp=new StateSpace<chmat>;
10        // 2 x 1 x 1
11        stsp-> set_parameters(eye(2), ones(2,1), ones(1,2), ones(1,1), /* Q,R */ eye(2), eye(1));
12        reg.set_system(stsp); // A, B, C
13        reg.set_control_parameters(eye(1), eye(1),  vec_1(1.0), 6); //Qy, Qu, horizon
14        reg.validate();
15
16        reg.redesign();
17        double reg_apply=reg.ctrlaction("0.5, 1.1","0.0")(0); /*convert vec to double*/
18        CHECK_CLOSE(reg_apply, -0.248528137234392, 0.0001);
19}
20
21TEST(to_state_test) {
22        mlnorm<fsqmat> ml;
23        mat A="1.1, 2.3";
24        ml.set_parameters(A, vec_1(1.3), eye(1));
25        RV yr=RV("y",1);
26        RV ur=RV("u",1);
27        ml.set_rv(yr);
28        yr.t_plus(-1);
29        ml.set_rvc(concat(yr, ur));
30       
31        shared_ptr<StateCanonical > Stsp=new StateCanonical;
32        Stsp->connect_mlnorm(ml);
33       
34        /* results from
35        [A,B,C,D]=tf2ss([2.3 0],[1 -1.1])
36        */
37        CHECK_CLOSE_EX(Stsp->_A().get_row(0), vec("1.1"), 0.0001);
38        CHECK_CLOSE_EX(Stsp->_C().get_row(0), vec("2.53"), 0.0001);
39        CHECK_CLOSE_EX(Stsp->_D().get_row(0), vec("2.30"), 0.0001);
40}
41
42TEST(to_state_arx_test) {
43        mlnorm<chmat> ml;
44        mat A="1.1, 2.3, 3.4";
45        ml.set_parameters(A, vec_1(1.3), eye(1));
46        RV yr=RV("y",1);
47        RV ur=RV("u",1);
48        ml.set_rv(yr);
49        ml.set_rvc(concat(yr.copy_t(-1), concat(ur, ur.copy_t(-1))));
50       
51        shared_ptr<StateFromARX> Stsp=new StateFromARX;
52        RV xrv; RV urv;
53        Stsp->connect_mlnorm(ml,xrv,urv);
54       
55        /* results from
56        [A,B,C,D]=tf2ss([2.3 0],[1 -1.1])
57        */
58        CHECK_CLOSE_EX(Stsp->_A().get_row(0), vec("1.1, 3.4, 1.3"), 0.0001);
59        CHECK_CLOSE_EX(Stsp->_B().get_row(0), vec("2.3"), 0.0001);
60        CHECK_CLOSE_EX(Stsp->_C().get_row(0), vec("1, 0, 0"), 0.0001);
61}
62
63TEST(arx_LQG_test){
64        mlnorm<chmat> ml;
65        mat A="1.81, -.81, .00468, .00438";
66        ml.set_parameters(A, vec_1(0.0), 0.00001*eye(1));
67        RV yr=RV("y",1);
68        RV ur=RV("u",1);
69        RV rgr = yr.copy_t(-1);
70        rgr.add(yr.copy_t(-2));
71        rgr.add(yr.copy_t(-2));
72        rgr.add(ur.copy_t(-1));
73        rgr.add(ur);
74       
75        ml.set_rv(yr);
76        ml.set_rvc(rgr);
77        ml.validate();
78       
79        shared_ptr<StateFromARX> Stsp=new StateFromARX;
80        RV xrv; RV urv;
81        Stsp->connect_mlnorm(ml,xrv,urv);
82       
83        LQG L;
84        L.set_system(Stsp);
85        L.set_control_parameters(eye(1), sqrt(1.0/1000)*eye(1), vec_1(0.0), 100);
86        L.validate();
87       
88        L.redesign();
89        cout << L.to_string()<<endl;
90}
Note: See TracBrowser for help on using the browser.