6 #include <boost/numeric/ublas/matrix.hpp>
7 #include <boost/numeric/ublas/vector.hpp>
8 #include <boost/numeric/ublas/matrix_proxy.hpp>
9 #include <boost/numeric/ublas/lu.hpp>
33 boost::numeric::ublas::vector<size_t>
P;
41 assert(A_.size1() == A_.size2());
48 using namespace boost::numeric::ublas;
50 std::iota(P.begin(), P.end(), 0);
52 for (
size_t i = 0; i < N; ++i) {
55 for (
size_t k = i;
k < N; ++
k) {
56 T absA = abs(A(
k, i));
65 swap(row(A, i), row(A, imax));
71 for (
size_t j = i + 1; j < N; ++j) {
73 for (
size_t k = i + 1;
k < N; ++
k)
74 A(j,
k) -= A(j, i) * A(i,
k);
86 for (
size_t i = 0; i < N; ++i) {
88 for (
size_t k = 0;
k < i; ++
k)
89 x(i) -= A(i,
k) * x(
k);
92 for (
size_t i = N; i > 0; --i) {
93 for (
size_t k = i;
k < N; ++
k)
94 x(i - 1) -= A(i - 1,
k) * x(
k);
95 x(i - 1) = x(i - 1) / A(i - 1, i - 1);