48 #ifndef MUI_GAUSSIAN_ELINATION_H_
49 #define MUI_GAUSSIAN_ELINATION_H_
55 template<
typename ITYPE,
typename VTYPE>
59 assert(A_.get_rows() == b_.get_rows() &&
60 "MUI Error [solver_ge.h]: Number of rows of A matrix must be the same as the number of rows of b matrix");
61 assert(b_.get_cols() == 1 &&
62 "MUI Error [solver_ge.h]: Number of column of b matrix must be 1");
63 x_.resize(b_.get_rows(),b_.get_cols());
67 template<
typename ITYPE,
typename VTYPE>
71 assert(A_.get_rows() == b_.get_rows() &&
72 "MUI Error [solver_ge.h]: Number of rows of A matrix must be the same as the number of rows of b matrix");
73 x_.resize(b_.get_rows(),b_.get_cols());
74 b_column_.resize(b_.get_rows(), 1);
78 template<
typename ITYPE,
typename VTYPE>
87 template<
typename ITYPE,
typename VTYPE>
97 template<
typename ITYPE,
typename VTYPE>
101 for (ITYPE i = 0; i < A_.get_rows(); ++i) {
104 for (ITYPE j = i+1; j < A_.get_cols(); ++j) {
105 if (std::abs(A_.get_value(j, i)) > std::abs(A_.get_value(pivot, i))) {
111 for (ITYPE j = 0; j < A_.get_cols(); ++j) {
112 A_.swap_elements(i, j, pivot, j);
114 b_.swap_elements(i, 0, pivot, 0);
117 for (ITYPE j = i+1; j < A_.get_cols(); ++j) {
119 "MUI Error [solver_ge.h]: Divide by zero assert for A_.get_value(i, i)");
120 VTYPE factor = A_.get_value(j, i) / A_.get_value(i, i);
121 for (ITYPE k = i; k < A_.get_cols(); ++k) {
122 A_.set_value(j, k, (A_.get_value(j, k) - (factor * A_.get_value(i, k))));
124 b_.set_value(j, 0, (b_.get_value(j, 0) - (factor * b_.get_value(i, 0))));
129 for (ITYPE i = A_.get_cols()-1; i >= 0; --i) {
130 x_.set_value(i, 0, b_.get_value(i, 0));
131 for (ITYPE j = i+1; j < A_.get_cols(); ++j) {
132 x_.set_value(i, 0, (x_.get_value(i, 0) - (A_.get_value(i, j) * x_.get_value(j, 0))));
135 "MUI Error [solver_ge.h]: Divide by zero assert for A_.get_value(i, i)");
136 x_.set_value(i, 0, (x_.get_value(i, 0) / A_.get_value(i, i)));
139 return std::make_pair(
static_cast<ITYPE
>(0),
static_cast<VTYPE
>(0));
143 template<
typename ITYPE,
typename VTYPE>
147 for (ITYPE j = 0; j < b_.get_cols(); ++j) {
148 b_column_.set_zero();
149 b_column_ = b_.segment(0,(b_.get_rows()-1),j,j);
151 std::pair<ITYPE, VTYPE> geReturnTemp = ge.
solve();
154 for (ITYPE i = 0; i < x_column.
get_rows(); ++i) {
155 x_.set_value(i, j, x_column.
get_value(i,0));
159 return std::make_pair(
static_cast<ITYPE
>(0),
static_cast<VTYPE
>(0));
163 template<
typename ITYPE,
typename VTYPE>
169 template<
typename ITYPE,
typename VTYPE>
sparse_matrix< ITYPE, VTYPE > getSolution()
Definition: solver_ge.h:164
~gaussian_elimination_1d()
Definition: solver_ge.h:79
std::pair< ITYPE, VTYPE > solve(sparse_matrix< ITYPE, VTYPE >=sparse_matrix< ITYPE, VTYPE >())
Definition: solver_ge.h:98
gaussian_elimination_1d(sparse_matrix< ITYPE, VTYPE >, sparse_matrix< ITYPE, VTYPE >)
Definition: solver_ge.h:56
gaussian_elimination(sparse_matrix< ITYPE, VTYPE >, sparse_matrix< ITYPE, VTYPE >)
Definition: solver_ge.h:68
sparse_matrix< ITYPE, VTYPE > getSolution()
Definition: solver_ge.h:170
std::pair< ITYPE, VTYPE > solve(sparse_matrix< ITYPE, VTYPE >=sparse_matrix< ITYPE, VTYPE >())
Definition: solver_ge.h:144
~gaussian_elimination()
Definition: solver_ge.h:88
ITYPE get_rows() const
Definition: matrix_io_info.h:579
VTYPE get_value(ITYPE, ITYPE) const
Definition: matrix_io_info.h:523
u u u u u u min
Definition: dim.h:289