Salve a tutti,
sto facendo un programmino per calcolare le matrici.
main ():
void Prod_Matrix (double X[][3], double Y[][3], int r1, int c1, int r2, int c2);
int main() {
int i, j, r1=2, c1=3, r2=3, c2=3, c3=1;
double X [2][3] = {{1,1,2},
{0,1,-3}},
Y [3][3] = {{1,1,1},
{2,5,1},
{0,-2,1}};
printf ("La matrice X è:\n");
for (i=0; i<r1; i++)
for (j=0; j<c1; j++){
printf ("%f;",X[i][j]);
if (j==2)
printf (";\n");
}
printf ("La matrice Y è:\n");
for (i=0; i<r2; i++)
for (j=0; j<c2; j++){
printf ("%f;",Y[i][j]);
if (j==2)
printf (";\n");
}
Prod_Matrix (X, Y, 2, 3, 3, 3); //chiamo la funzione che moltiplica le matrici
return 0;
}
Questa è la funzione che calcola un semplice prodotto:
void Prod_Matrix (double a[][3], double b[][3], int r1, int c1, int r2, int c2)
{
int i, j, k;
double prod [2][3];
for (i=0; i < r1; i++)
for (j=0; j < c2; j++)
for (k=0; k < c1; k++)
prod[i][j] += a[i][k] * b[k][j];
printf ("Il prodotto tra le matrici è:\n");
for (i=0; i<2; i++)
for (j=0; j<3; j++){
printf ("%f;",prod[i][j]);
if (j==2)
printf (";\n");
}
}
I valori delle matrici li ho presi dall'esempio presente su wikipedia (in fondo).
https://it.wikipedia.org/wiki/Moltiplicazione_di_matrici
L'output è questo:
La matrice X è:
1.000000;1.000000;2.000000;;
0.000000;1.000000;-3.000000;;
La matrice Y è:
1.000000;1.000000;1.000000;;
2.000000;5.000000;1.000000;;
0.000000;-2.000000;1.000000;;
Il prodotto tra le matrici è:
3.000000;188787654703962990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000;208802811801130750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000;;
2.000000;11.000000;-2.000000;;
Come si può vedere dall'esempio di wikipedia 4 risultati su 6 sono corretti.
1)Perchè viene cosi?
2)Perchè se cambio il tipo di dato delle matrici da double a int mi viene tutti 0.
Sto usando Eclipse con builder CDT Internal Builder e toolchain MinGW GCC.
Grazie per l'aiuto.