12#ifndef TBCI_SOLVER_GAUSS_JORDAN_H
13#define TBCI_SOLVER_GAUSS_JORDAN_H
15#include "tbci/basics.h"
16#include "tbci/matrix.h"
19# pragma interface "gauss_jordan.h"
23# define GJ_MINVAL 1e-16
48 const int n =
a.row, m =
b.col;
57 for (
int i = 0;
i < n; ++
i) {
59 int icol = 0, irow = 0;
60 for (
int j = 0; j < n; ++j)
62 for (
REGISTER int k = 0; k < n; ++k) {
68 }
else if (ipiv(k) > 1) {
69 STD__ cerr <<
"\n\n error: gaussj: singular Matrix-1 \n\n";
76 SWAP(
a(irow, l),
a(icol, l));
78 SWAP(
b(irow, z),
b(icol, z));
84 STD__ cerr <<
"\n\n error: gaussj: singular Matrix-2 \n" <<
STD__ endl;
87 pivinv = 1.0 /
a(icol, icol);
88 a(icol, icol) = (
T)1.0;
93 for (
int ll = 0; ll < n; ++ll)
98 a(ll, v) -=
a(icol, v) * dum;
100 b(ll, w) -=
b(icol, w) * dum;
103 for (
int l = n-1; l >= 0; --l) {
104 if (indxr(l) != indxc(l))
106 SWAP(
a(k, indxr(l)),
a(k, indxc(l)));
const Vector< T > const Vector< T > const Vector< T > int T T & err
#define BCHK(cond, exc, txt, ind, rtval)
provides basic Vector functionality but arithmetic operators (+=, - , *, /...).
double fabs(const TBCI__ cplx< T > &c)
NAMESPACE_TBCI char gaussj(Matrix< T > &a, Matrix< T > &b)
const unsigned TMatrix< T > const Matrix< T > * a