ABACUS/src/MATRIX/lubksb.cc

26 lines
510 B
C++

#include "ABACUS.h"
using namespace std;
void ABACUS::lubksb (SQMat_DP& a, Vect_INT& indx, Vect_DP& b)
{
int i, ii=0, ip, j;
DP sum;
int n = a.size();
for (i = 0; i < n; i++) {
ip = indx[i];
sum = b[ip];
b[ip] = b[i];
if (ii != 0)
for (j = ii-1; j < i; j++) sum -= a[i][j] * b[j];
else if (sum != 0.0)
ii = i + 1;
b[i] = sum;
}
for (i = n - 1; i >= 0; i--) {
sum = b[i];
for (j = i + 1; j < n; j++) sum -= a[i][j] * b[j];
b[i] = sum/a[i][i];
}
}