Я предлагаю просто шаблонировать ваши новые функции, чтобы вам не приходилось беспокоиться о матричных выражениях или внутренних элементах ublas. Например, если вы хотите написать свою собственную обратную функцию, напишите ее в виде шаблона:
template<typename MATRIX_IN, typename MATRIX_OUT>
bool invert_matrix(const MATRIX& A, MATRIX_OUT& B)
{
// now use A(i,j), B(i,j), etc
...
}