mat_gen_dim section 8F.
home

This sample program shows how ordinary matrix multiplication as can be implemented in mat_gen_dim. Note that the second blt of the first matrix must equal the first blt of the second matrix.

```#include "SOME_DIRECTORY/mat_gen_dim.h"
using namespace mat_gen_dim;

template <typename compo, typename alloc>
var_matrix<compo,alloc> ordinary_matrix_mult (
sub_matrix_base<compo,alloc> const & mat_a,
sub_matrix_base<compo,alloc> const & mat_b
) {
vec_bool const which {false,true,true,false};

struct mul {
compo operator() (compo const a, compo const b) { return a * b; }
};

compo operator() (compo & z, compo const y) { return z += y; }
};

}

int main () {
form const frm_a {blt{1,3},blt{1,4}};

con_matrix<int> mat_a (frm_a, {
2,  3, -1,
4, -2,  5
} );
cout << "\n mat_a: " << mat_a;

form const frm_b {blt{1,4},blt{1,5}};
con_matrix<int> mat_b (frm_b, {
2, -1,  0,  6,
1,  3, -5,  1,
4,  1, -2,  2
} );
cout << "\n mat_b: " << mat_b;

con_matrix<int> mat_c (ordinary_matrix_mult (mat_a, mat_b));
cout << "\n mat_a times mat_b: " << mat_c;

cout << "\n\n now transpose everything: \n";

permu const p10 {1, 0};

con_lens_permu_form<int> tam_b (mat_b, p10);
cout << "\n tam_b: " << tam_b;

con_lens_permu_form<int> tam_a (mat_a, p10);
cout << "\n tam_a: " << tam_a;

con_matrix<int> tam_c (ordinary_matrix_mult (tam_b, tam_a));
cout << "\n tam_b times tam_a: " << tam_c;

return 0;
}
```
yields this output:
``` mat_a:
( 1 1 ) =   2     ( 1 2 ) =   3     ( 1 3 ) =  -1
( 2 1 ) =   4     ( 2 2 ) =  -2     ( 2 3 ) =   5
mat_b:
( 1 1 ) =   2     ( 1 2 ) =  -1     ( 1 3 ) =   0     ( 1 4 ) =   6
( 2 1 ) =   1     ( 2 2 ) =   3     ( 2 3 ) =  -5     ( 2 4 ) =   1
( 3 1 ) =   4     ( 3 2 ) =   1     ( 3 3 ) =  -2     ( 3 4 ) =   2
mat_a times mat_b:
( 1 1 ) =   3     ( 1 2 ) =   6     ( 1 3 ) = -13     ( 1 4 ) =  13
( 2 1 ) =  26     ( 2 2 ) =  -5     ( 2 3 ) =   0     ( 2 4 ) =  32

now transpose everything:

tam_b:
( 1 1 ) =   2     ( 1 2 ) =   1     ( 1 3 ) =   4
( 2 1 ) =  -1     ( 2 2 ) =   3     ( 2 3 ) =   1
( 3 1 ) =   0     ( 3 2 ) =  -5     ( 3 3 ) =  -2
( 4 1 ) =   6     ( 4 2 ) =   1     ( 4 3 ) =   2
tam_a:
( 1 1 ) =   2     ( 1 2 ) =   4
( 2 1 ) =   3     ( 2 2 ) =  -2
( 3 1 ) =  -1     ( 3 2 ) =   5
tam_b times tam_a:
( 1 1 ) =   3     ( 1 2 ) =  26
( 2 1 ) =   6     ( 2 2 ) =  -5
( 3 1 ) = -13     ( 3 2 ) =   0
( 4 1 ) =  13     ( 4 2 ) =  32
```