#ifndef _KLMN_LU_SOLVE_ #define _KLMN_LU_SOLVE_ #include #include #include // boost: разворот вектора на месте (y[0]<->y[n], y[1]<->y[n-1],...) template void inplace_turn(boost::numeric::ublas::vector& v) { for(size_t i=0, max_i=v.size()/2, j=v.size()-1; i void lu_solve (boost::numeric::ublas::matrix& A, boost::numeric::ublas::vector& b) { using namespace boost::numeric::ublas; // получаем L и U на месте A lu_factorize(A); // "вытаскиваем" L из A size_t N = A.size1(); boost::numeric::ublas::triangular_matrix L(N,N); for(size_t i=1; i U(N,N); for(size_t i=0; i