Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Determinant {
  4.  
  5. private double[][] det = null;
  6. private int size = 0;
  7.  
  8. public Determinant( int n ) {
  9. det = new double[n][n];
  10. size = n;
  11. }
  12.  
  13. public Determinant( double[][] n ) {
  14. det = n;
  15. size = n.length;
  16. }
  17.  
  18. public void setElementAt( int i, int j, double element ) {
  19. if( i > size || j > size ) {
  20. throw new IndexOutOfBoundsException( "i, j out of bounds" ) ;
  21. }
  22. det[i][j] = element;
  23. }
  24.  
  25. public double evaluate() {
  26. return evaluateRecursive( det );
  27. }
  28.  
  29. private double evaluateRecursive( double[][] minor ) {
  30. if( minor.length == 2 ) {
  31. return minor[0][0]*minor[1][1] - minor[0][1]*minor[1][0];
  32. }
  33. else {
  34. double result = 0;
  35. for( int i=0; i<minor.length; i++ ) {
  36. result += ( minor[0][i] *
  37. Math.pow( -1, i ) *
  38. evaluateRecursive( getMinor( minor, 0, i ) ) );
  39. }
  40. return result;
  41. }
  42. }
  43.  
  44. private double[][] getMinor( double[][] det, int i, int j ) {
  45. int len = det.length;
  46. double[][] minor = new double[len-1][len-1];
  47. boolean encounteredColumn = false;
  48. boolean encounteredRow = false;
  49. for( int ii=0; ii<len; ii++ ) {
  50. if( ii == i ) {
  51. encounteredRow = true;
  52. continue;
  53. }
  54. for( int jj=0; jj<len; jj++ ) {
  55. if( jj == j ) {
  56. encounteredColumn = true;
  57. continue;
  58. }
  59. int cpRowIndex = ii;
  60. int cpColIndex = jj;
  61. if( encounteredRow ) cpRowIndex--;
  62. if( encounteredColumn ) cpColIndex--;
  63. minor[cpRowIndex][cpColIndex] = det[ii][jj];
  64. }
  65. encounteredColumn = false;
  66. }
  67. return minor;
  68. }
  69.  
  70. public static void main( String args[] ) {
  71. Scanner sc = new Scanner( System.in );
  72. System.out.println( "Enter size" );
  73. int n = sc.nextInt();
  74. Determinant det = new Determinant( n );
  75. System.out.println( "Enter elements" );
  76. for( int i=0; i<n; i++ ) {
  77. for( int j=0; j<n; j++ ) {
  78. det.setElementAt( i, j, sc.nextDouble() );
  79. }
  80. }
  81. System.out.println( "Result = " + det.evaluate() );
  82. sc.close();
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement