package jsci.maths.matrices; import jsci.GlobalSettings; import jsci.maths.DimensionException; import jsci.maths.Mapping; import jsci.maths.vectors.AbstractDoubleVector; import jsci.maths.vectors.DoubleVector; /** * The DoubleSparseSquareMatrix class provides an object for encapsulating sparse square matrices. * Uses compressed row storage. * @version 1.2 * @author Mark Hale */ public final class DoubleSparseSquareMatrix extends AbstractDoubleSquareMatrix { /** * Matrix elements. */ private double elements[]; /** * Sparse indexing data. * Contains the column positions of each element, * e.g.* to hold the pivot information (null if not interested) * @return an array with [0] containing the L-matrix * and [1] containing the U-matrix. */ public AbstractDoubleSquareMatrix[] luDecompose(int pivot[]) { if(LU!=null) { if(pivot!=null) System.arraycopy(LUpivot,0,pivot,0,pivot.length); return LU; } final double arrayL[][]=new double[numRows][numCols]; final double arrayU[][]=new double[numRows][numCols]; if(pivot==null) pivot=new int[numRows+1]; for(int i=0;icolPos[n]is the column position * of thenth element. */ private int colPos[]; /** * Sparse indexing data. * Contains the indices of the start of each row, * e.g.rows[i]is the index * where theith row starts. */ private int rows[]; /** * Constructs an empty matrix. * @param size the number of rows/columns */ public DoubleSparseSquareMatrix(final int size) { super(size); elements=new double[0]; colPos=new int[0]; rows=new int[numRows+1]; } /** * Constructs a matrix from an array. * @param array an assigned value * @exception MatrixDimensionException If the array is not square. */ public DoubleSparseSquareMatrix(final double array[][]) { super(array.length); rows=new int[numRows+1]; int n=0; for(int i=0;iGlobalSettings.ZERO_TOL) n++; } } elements=new double[n]; colPos=new int[n]; n=0; for(int i=0;i GlobalSettings.ZERO_TOL) { elements[n]=array[i][j]; colPos[n]=j; n++; } } } rows[numRows]=n; } /** * Compares two double sparse square matrices for equality. * @param m a double matrix */ public boolean equals(AbstractDoubleSquareMatrix m, double tol) { if(numRows==m.numRows && numCols==m.numCols) { if(m instanceof DoubleSparseSquareMatrix) { return this.equals((DoubleSparseSquareMatrix)m); } else { double sumSqr = 0; for(int i=0;i =0 && i =0 && j =0 && i =0 && j -norm. */ public double infNorm() { double result=0.0,tmpResult; for(int j,i=0;i
result) result=tmpResult; } return result; } /** * Returns the Frobenius (l2) norm. */ public double frobeniusNorm() { double result=0.0; for(int i=0;i rows()+1 max) { max=tmp; pivotrow=i; } } // swap row j with pivotrow if(pivotrow!=j) { double[] tmprow = arrayU[j]; arrayU[j] = arrayU[pivotrow]; arrayU[pivotrow] = tmprow; int k=pivot[j]; pivot[j]=pivot[pivotrow]; pivot[pivotrow]=k; // update parity pivot[numRows]=-pivot[numRows]; } // divide by pivot for(int i=j+1;i
Ads help maintain this website.