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);
bool gaussian_elimination_inplace(std::vector< std::vector< cadabra::multiplier_t > > &, std::vector< cadabra::multiplier_t > &)
int k
Definition passing.cc:4
boost::numeric::ublas::vector< size_t > P
Definition Linear.hh:33
boost::numeric::ublas::matrix< T > matrix_type
Definition Linear.hh:22
boost::numeric::ublas::vector< T > vector_type
Definition Linear.hh:23
matrix_type A
Definition Linear.hh:32
size_t N
Definition Linear.hh:35
bool factorize(const matrix_type &A_)
Definition Linear.hh:39
vector_type solve(const vector_type &y)
Definition Linear.hh:83
vector_type x
Definition Linear.hh:34