// implementation of bandMatrix class #include "band.h" #include "util.h" bandMatrix::bandMatrix( int n, int bandwidth ) :ncol(n), bw(bandwidth), d(n,0.0), a(n*bandwidth-(bandwidth*(bandwidth+1))/2,0.0), b(n*bandwidth-(bandwidth*(bandwidth+1))/2,0.0) {// buidl an nxn matrix if(bw<0) error("negative bandwidth"); } double& bandMatrix::operator() (int i, int j) { int k = i-j; int ka = abs(k); int ks = ncol*(ka-1)-((ka-1)*ka)/2; if( !(i>=0 && i=0 && j=0 && i=0 && j0 ) return b[ks+j]; else return 0.0; } std::ostream& operator <<( std::ostream& os, const bandMatrix& A ) {// print small matrices int n = A.cols(); int i, j; for(i=0; i& x ) {// print small matrices int n = x.size(); int i; for(i=0; i operator*(const bandMatrix& A, const vector& X ) {// return A X int bw = A.hbw(), n =A.cols(), i, k; vector y(n,0.0); for( i=0; i=0 ) y[i] += A(i,i-k)*X[i-k]; if( i+k solve(const bandMatrix & A, const vector & Y ) {// return the solution X of A X = Y bandMatrix B(A); vector r(Y); int i, j, k, m; int n=B.cols(), bw=B.hbw(); for( i=0; i=0; i-- ){ // back soln k = min(i+bw,n-1); for( j=i+1; j<=k; j++ ){ r[i] -= B(i,j)*r[j]; } } return r; }