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));
84 STD__ cerr <<
"\n\n error: gaussj: singular Matrix-2 \n" <<
STD__ endl;
85 err |= 2; pivinv = (
T)
HVAL;
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)));
NAMESPACE_TBCI char gaussj(Matrix< T > &a, Matrix< T > &b)
#define BCHK(cond, exc, txt, ind, rtval)
const Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > & z
void SWAP(T &a, T &b)
SWAP function Note: We could implement a swap function without temporaries: a -= b b += a a -= b a = ...
const Vector< T > const Vector< T > const Vector< T > int T T & err
const unsigned TMatrix< T > const Matrix< T > * a
const Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > long int int char v
< find minimun of func on grid with resolution res