1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//solving unit lower triangular
inline void v_lm(mxd::r _m, vxd::r _b){
 
    i::t idx = 0;
    while(idx < _m.rows()){
 
        mxd::b A00     = _m.block(0      , 0       , idx                     , idx                    );
        mxd::b a10     = _m.block(idx    , 0       , 1                       , idx                    );
        mxd::b A20     = _m.block(idx + 10       , _m .rows() - (idx + 1)  , idx                    );
 
        mxd::b a01     = _m.block(0      , idx     , idx                     , 1                      );
        mxd::b alpha11 = _m.block(idx    , idx     , 1                       , 1                      );
        mxd::b a21     = _m.block(idx + 1, idx     , _m.rows() - (idx + 1)   , 1                      );
 
        mxd::b A02     = _m.block(0      , idx + 1 , idx                     , _m.cols() - (idx + 1)  );
        mxd::b a12     = _m.block(idx    , idx + 1 , 1                       , _m.cols() - (idx + 1)  );
        mxd::b A22     = _m.block(idx + 1, idx + 1 , _m.rows() - (idx + 1)   , _m.cols() - (idx + 1)  );
 
        vxd::b b0       = _b.segment(0      ,       idx              );
        vxd::b betha1   = _b.segment(idx    ,        1               );
        vxd::b b2       = _b.segment(idx + 1, _b.rows() - (idx + 1)  );
 
        b2 = b2 - betha1.value() * a21;
 
        idx++;
 
    }
}
 
cs





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//solving upper triangular matrix
inline void v_um(mxd::r _m, vxd::r _b){
 
    i::t idx = _m.rows() - 1;
    while(idx > -1){
 
        mxd::b A00     = _m.block(0      , 0       , idx                     , idx                    );
        mxd::b a10     = _m.block(idx    , 0       , 1                       , idx                    );
        mxd::b A20     = _m.block(idx + 10       , _m .rows() - (idx + 1)  , idx                    );
 
        mxd::b a01     = _m.block(0      , idx     , idx                     , 1                      );
        mxd::b alpha11 = _m.block(idx    , idx     , 1                       , 1                      );
        mxd::b a21     = _m.block(idx + 1, idx     , _m.rows() - (idx + 1)   , 1                      );
 
        mxd::b A02     = _m.block(0      , idx + 1 , idx                     , _m.cols() - (idx + 1)  );
        mxd::b a12     = _m.block(idx    , idx + 1 , 1                       , _m.cols() - (idx + 1)  );
        mxd::b A22     = _m.block(idx + 1, idx + 1 , _m.rows() - (idx + 1)   , _m.cols() - (idx + 1)  );
 
        vxd::b b0       = _b.segment(0      ,       idx              );
        vxd::b betha1   = _b.segment(idx    ,        1               );
        vxd::b b2       = _b.segment(idx + 1, _b.rows() - (idx + 1)  );
 
        betha1 = betha1 - a12 * b2;
        betha1 = betha1 / alpha11.value();
 
        idx--;
 
    }
}
 
cs


+ Recent posts