Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- public class Determinant {
- private double[][] det = null;
- private int size = 0;
- public Determinant( int n ) {
- det = new double[n][n];
- size = n;
- }
- public Determinant( double[][] n ) {
- det = n;
- size = n.length;
- }
- public void setElementAt( int i, int j, double element ) {
- if( i > size || j > size ) {
- throw new IndexOutOfBoundsException( "i, j out of bounds" ) ;
- }
- det[i][j] = element;
- }
- public double evaluate() {
- return evaluateRecursive( det );
- }
- private double evaluateRecursive( double[][] minor ) {
- if( minor.length == 2 ) {
- return minor[0][0]*minor[1][1] - minor[0][1]*minor[1][0];
- }
- else {
- double result = 0;
- for( int i=0; i<minor.length; i++ ) {
- result += ( minor[0][i] *
- Math.pow( -1, i ) *
- evaluateRecursive( getMinor( minor, 0, i ) ) );
- }
- return result;
- }
- }
- private double[][] getMinor( double[][] det, int i, int j ) {
- int len = det.length;
- double[][] minor = new double[len-1][len-1];
- boolean encounteredColumn = false;
- boolean encounteredRow = false;
- for( int ii=0; ii<len; ii++ ) {
- if( ii == i ) {
- encounteredRow = true;
- continue;
- }
- for( int jj=0; jj<len; jj++ ) {
- if( jj == j ) {
- encounteredColumn = true;
- continue;
- }
- int cpRowIndex = ii;
- int cpColIndex = jj;
- if( encounteredRow ) cpRowIndex--;
- if( encounteredColumn ) cpColIndex--;
- minor[cpRowIndex][cpColIndex] = det[ii][jj];
- }
- encounteredColumn = false;
- }
- return minor;
- }
- public static void main( String args[] ) {
- Scanner sc = new Scanner( System.in );
- System.out.println( "Enter size" );
- int n = sc.nextInt();
- Determinant det = new Determinant( n );
- System.out.println( "Enter elements" );
- for( int i=0; i<n; i++ ) {
- for( int j=0; j<n; j++ ) {
- det.setElementAt( i, j, sc.nextDouble() );
- }
- }
- System.out.println( "Result = " + det.evaluate() );
- sc.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement