Salve a tutti , ho un problema con questa classe e mi servirebbe un piccolo aiuto . Praticamente i metodi moltiplica, mul e minore mi danno come output [[D@1b6d3586 .Non capendo che cosa significa non so come modificare il programma , per cui qualcuno potrebbe spiegarmi a che cosa è dovuto questo strano output ??!!
public final class Matrici{
private Matrici(){}
private static double[][] copia( double[][] a ){
double[][] c=new double[a.length][a[0].length];
for( int i=0; i<a.length; i++ )
System.arraycopy( a[i], 0, c[i], 0, a[i].length );
return c;
}//copia
public static double[][] moltiplica( double[][] a, double[][] b ){
//ipotesi: matrici quadrate
if( a.length!=a[0].length ||b.length!=b[0].length || a.length!=b.length )
throw new IllegalArgumentException("Matrici incompatibili");
double[][] p=new double[a.length][a.length];
for( int i=0; i<a.length; i++ )
for( int j=0; j<a.length; j++ ){
//fai prodotto scalare tra riga i-esima di a
//e la colonna j-esima di b
double ps=0.0D;
for( int k=0; k<a.length; k++ )
ps=ps+a[i][k]*b[k][j];
p[i][j]=ps;
}
return p;
}//moltiplica
public static double[][] mul( double[][] a, double[][] b ){
//ipotesi: matrici rettangolari
if( a[0].length!=b.length )
throw new IllegalArgumentException("Matrici incompatibili");
double[][] p=new double[a.length][b[0].length];
for( int i=0; i<p.length; i++ )
for( int j=0; j<p[i].length; j++ ){
//fai prodotto scalare tra riga i-esima di a
//e la colonna j-esima di b
double ps=0.0D;
for( int k=0; k<a.length; k++ )
ps=ps+a[i][k]*b[k][j];
p[i][j]=ps;
}
return p;
}//mul
public static double[][] minore( double[][] a, int i, int j ){
if( i<0||i>=a.length||j<0||j>=a[0].length )
throw new IllegalArgumentException();
double[][] m=new double[a.length-1][a[0].length-1];
for( int r=0; r<a.length; r++ )
for( int c=0; c<a[0].length; c++ ){
if( r<i && c<j ) m[r][c]=a[r][c];
if( r<i && c>j ) m[r][c-1]=a[r][c];
if( r>i && c<j ) m[r-1][c]=a[r][c];
if( r>i && c>j ) m[r-1][c-1]=a[r][c];
}
return m;
}//minore
public static double det( double[][] a ){
//calcola il determinante di una matrice quadrata
//con la regola di Laplace
for( int i=0; i<a.length; i++ )
if( a.length!=a[i].length )
throw new IllegalArgumentException();
if( a.length==1 ) return a[0][0];
double d=0.0D;
//riga di sviluppo: la 0-esima
for( int j=0; j<a.length; j++ ){
int s=(j%2==0)?1:-1;
d=d+s*a[0][j]*det(minore(a,0,j));
}
return d;
}//det
public static void main( String[] args ){
double b[][]={{1,0,2,-1},{4,2,1,0},{-3,2,0,1},{0,-1,1,2}};
double a[][]={{2,1,-1,0},{1,2,2,-1},{0,2,-1,1},{1,-1,0,-1}};
System.out.println("det="+det(a));
System.out.println(moltiplica(a,b));
System.out.println(mul(a,b));
System.out.println(minore(a,1,3));
}
}//Matrici