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].