/* ## class NPoBand ## ## This class contains the routines for positive definite matrices ## in banded form. ## */ package edu.rice.linpack.Matrix.NMatrix; import edu.rice.linpack.LNumber.*; import edu.rice.linpack.util.*; public class NPoBand extends NBanded { private int M; public NPoBand() { super(); } public NPoBand(int c, int M2) { super(0,M2,c); mu = M2; ml = 0; M = M2; } public NPoBand(LNumber[][] f, int ML, int MU) { mu = MU; M = mu; ml = 0; rows = M+1; cols = f[0].length; Mat = band(f,M); } public NPoBand(LNumber[][] f, int M2) { mu = M2; M = M2; ml = 0; rows = M+1; cols = f[0].length; Mat = f; } public NPoBand(NPoFull F, int M2) { mu = M2; M = M2; ml = 0; cols = F.numofCols(); rows = M+1; Mat = band(F.Mat,M); } public NPoBand(NPoBand F) { super(F); M = F.M; } private LNumber[][] band(LNumber[][] f,int M) { int n = f[0].length; LNumber[][] ret = new LNumber[M+1][n]; for(int j=0;j=0;k--) { if((Z[k].abs()).greaterThan(Mat[M][k].abs())) { LNumber S = (Mat[M][k].abs()).div(Z[k].abs()); NUtil.scal(cols,S,Z,1); } if(!Mat[M][k].equals(0)) Z[k] = Z[k].div(Mat[M][k]); else Z[k].setOne(); int lm = Math.min(k,M); int la = M - lm; int lz = k - lm; LNumber T = Z[k].negate(); this.axpy(lm,T,1,la,k,Z,1,lz); } LNumber S = (NUtil.asum(cols,Z,1)).invTo(); NUtil.scal(cols,S,Z,1); } private LNumber solveTrans (int M, LNumber[] Z) { LNumber ynorm = Z[0].Clone(); ynorm.setOne(); for(int k=0;k