I'm having a problem with row and column major in symmetric matrices. I'm probably not understanding correctly how the storage takes place in memory. I assumed upper+column_major storage was the same as lower+row_major. Here's an example:
Upper part of the symmetric matrix:
0.34 0.9 1.17 0.689 1.42
---- 1.36 0.9 0.808 0.146
---- ---- 0.572 1.55 1.61
---- ---- ---- 0.093 1.32
---- ---- ---- ---- 0.828
ublas::symmetric_matrix<double, ublas::upper, ublas::column_major> S
double* a = &(S.data()[0]);
ublas::symmetric_matrix<double, ublas::lower, ublas::column_major> S2
double* a2 = &(S2.data()[0]);
Contents of a, a2:
0.34 0.9 1.17 0.689 1.42 1.36 0.9 0.808 0.146 0.572 1.55 1.61 0.093 1.32 0.828
ublas::symmetric_matrix<double, ublas::lower, ublas::row_major> S3;
double* a3 = &(S3.data()[0]);
ublas::symmetric_matrix<double, ublas::upper, ublas::row_major> S4;
double* a4 = &(S4.data()[0]);
Contents of a3, a4:
0.34 0.9 1.36 1.17 0.9 0.572 0.689 0.808 1.55 0.093 1.42 0.146 1.61 1.32 0.828
So, ublas::lower or upper doesn't make any difference to the storage scheme? From above it seems row/column storage always corresponds to the ros/cols from the lower part of the matrix.