// Big_inverse.java find inverse of |A| into |AI|, |A|*|AI|=|I| // |A| unmodified for possible reuse or testing import java.math.BigDecimal; public class Big_inverse { public Big_inverse(final BigDecimal A[][], BigDecimal AI[][]) { int n = A.length; int row[] = new int[n]; int col[] = new int[n]; BigDecimal temp[] = new BigDecimal[n]; int hold , I_pivot , J_pivot; BigDecimal pivot, abs_pivot; BigDecimal one = new BigDecimal("1.0"); BigDecimal zero = new BigDecimal("0.0"); if(A[0].length!=n || AI.length!=n || AI[0].length!=n) { System.out.println("Error in inverse, inconsistent array sizes."); } one = one.setScale(330,BigDecimal.ROUND_DOWN); for(int i=0; i0) { I_pivot = i ; J_pivot = j ; pivot = AI[row[i]][col[j]] ; } } } if((pivot.abs()).compareTo(new BigDecimal(1.0E-300)) <0) { System.out.println("Matrix is singular !"); return; } hold = row[k]; row[k]= row[I_pivot]; row[I_pivot] = hold ; hold = col[k]; col[k]= col[J_pivot]; col[J_pivot] = hold ; // reduce about pivot AI[row[k]][col[k]] = one.divide(pivot, BigDecimal.ROUND_DOWN); AI[row[k]][col[k]] = AI[row[k]][col[k]]. setScale(330,BigDecimal.ROUND_DOWN); for(int j=0; j