edutecnica

Esercizio 5        

Creare un programma per calcolare il determinante di una matrice quadrata di ordine n≤m=9. La matrice deve essere caricata da tastiera.


Dall'algebra delle matrici possiamo ricordare che

       

poi ci sono i determinanti di ordine 3:



E' dato dagli elementi della prima riga cambiati di segno alternativamente che moltiplicano ciascuno i propri minori.
Il minore di un elemento è il determinante della matrice costituita dagli elementi quando si cancellano riga e colonna dell'elemento considerato.
In modo del tutto analogo, per una matrice di ordine 4 avremo:


e così via per gli ordini superiori; ovviamente la massima matrice allocabile è di 9x9.
Nel caso in cui l'ordine sia inferiore, verrà usata soltanto una porzione nxn, della matrice massima.


import java.util.Scanner;
class detMatrice{
static final int m=9;// ordine della matrice
public static void main (String args []) {
Scanner in=new Scanner(System.in);
double M[][]= new double[m][m];
int no,r,c;
do{
     System.out.print("ordine:");
     no=in.nextInt();
}while(no > 9 || no < 1);

for(r=0;r < no;r++)//caricamento
     for(c=0;c < no;c++){
          System.out.print("riga:"+(r+1)+" col:"+(c+1)+"=");
          M[r][c]=in.nextDouble();
}//fine caricamento
System.out.print("det:"+(int)det(no,M));
in.close();
}//fine__main

static double det(int n, double T[][]){
int i,j,ic,jc,c=0;
double determinante=0;
double t[][]= new double[m][m];
if(n==1) return T[0][0];
if(n==2) return (T[0][0]*T[1][1] - T[0][1]*T[1][0]);
for(c=0; c < n; c++){//matrice dei minori
     ic=0;
     for(i=1; i < n; i++){
          jc=0;
          for(j=0; j < n; j++){
               if(j == c) continue;
               t[ic][jc] = T[i][j];
               jc++;
     }//fine for j
     ic++;
     }//fine for i
determinante+= Math.pow(-1, c) * T[0][c] * det(n-1,t);
}//fine for c
return determinante;
}//fine det
}// fine classe

La maggior parte del lavoro viene effettuato dalla funzione det che riceve la matrice T e il suo ordine n.
Il ciclo for(c=0..) individua il minori e li rinvia con la chiamata det(n-1,t) ricorsivamente alla stessa funzione det, fino all'individuazione dei minori di ordine 2 che vengono calcolati e restituiti alla stessa det.
L'operatore pow(-1, c) serve solo per cambiare segno alternativamente agli elementi della prima riga T[0][c].