Multiplication de 2 matrices

Signaler
Messages postés
476
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
2 juin 2012
-
Messages postés
5
Date d'inscription
samedi 18 décembre 2010
Statut
Membre
Dernière intervention
15 décembre 2011
-
Bonjour tout le monde

J'ai un probleme avec un algo pour la multiplication de 2 matrices.

Voici le code

Je ne m'ai que la fonction qui fais le calcul.

int multipli_matrice(int m1[a][b], int m2[c][d])
{
 int i,j,k;     
int m3[4][4];
puts("Multiplication de M1 par M2\n");





    for(i=0;i<4;i++)
    {
   
    puts("\n");
         for(j=0;j<4;j++)
         {



         for(k=0;k<4;k++)
         {
         m3[i][j]+=m1[i][k]* m2[k][j];
         }
         }
         }





puts("Resultat M3\n");





         for(i=0;i<4;i++)
         {
        
         puts("\n");               
              for(j=0;j<4;j++)
              {
               printf(" %d",m3[i][j]);   
                  
              }           



              }
 return m3[i][j];
}








 Voici ce qu'il affiche





calcul matriciel



Voici la matrice M1





 22 69 79



 47 35 80



 99 75 21



 15 45 35



Voici la matrice M2





 6 66 42 79



 12 9 1 12



 52 65 41 96



Multiplication de M1 par M2



Resultat M3





 2013333596 10452 4151473 12361



 2013277465 4153696 2306510 2013343894



 2945 2013420787 6280 2013516642



 -934662623 1491182894 151146694 144309605




Ce resultat est faut.

Je ne voix pas ce qu'il faut changer.

A+

6 réponses

Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
4
salut

for(j=0;j<4;j++)
{
m3[i][j] = 0;
for(k=0;k<4;k++)
{
m3[i][j]+=m1[i][k]* m2[k][j];
}
}
}
si tu ne précises pas:

les variables et tableaux alloués dans la pile (variables temporaires) ne sont pas initialisés

les variables globales le sont (avec des 0)
Messages postés
476
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
2 juin 2012
1
Bonjour tout le monde

C'est presque résolut, mais j'ai encore un probleme.

Voici le code.

#include <stdio.h>
#include <stdlib.h>



#define a 4
#define b 3
#define c 3
#define d 4






int multipli_matrice(int m1[a][b], int m2[c][d])
{
 int i,j,k;     
int m3[4][4];
puts("Multiplication de M1 par M2\n");





    for(i=0;i<4;i++)
    {
   
  
         for(j=0;j<4;j++)
         {
          m3[i][j]=0;
         for(k=0;k<4;k++)
         {
         m3[i][j]+=m1[i][k]* m2[k][j];
         }
         }
         }





puts("Resultat M3\n");





         for(i=0;i<4;i++)
         {
        
         puts("\n");               
              for(j=0;j<4;j++)
              {
               printf(" %d",m3[i][j]);   
                  
              }           



              }
 return m3[i][j];
}



void entre_donnee_mat()
{
   
    int mu[a][b];
   
   
    int md[c][d];
   
   
    int i,j,l,m,v,w;    int partSize   (10 RAND_MAX) ?        1 : 1 + (RAND_MAX - 10)/(10+1);
   int maxUsefull = partSize * 10 + (partSize-1);
   int draw;
   srand(time(NULL));





     for(i=0;i<a;i++)
     {
         
         for(j=0;j<b;j++)
         {           draw draw (int)(10.00*(double)rand()/(double)RAND_MAX); 
           mu[i][j]= draw;
             
         }              
     }
    
     for(l=0;l<c;l++)
     {
          for(m=0;m<d;m++)
          {               draw draw (int)(10.00*(double)rand()/(double)RAND_MAX);
               md[l][m]= draw;
              
               }
              
               }
    
     puts("Voici la matrice M1\n");
    
     for(v=0;v<4;v++)
     {
    
     puts("\n");
         
          for(w=0;w<3;w++)
               {
               printf(" %d",mu[v][w]);
    
     }
     }
    
     puts("\n");
         
     puts("Voici la matrice M2\n");
    
     for(v=0;v<3;v++)
     {
    
     puts("\n");
         
          for(w=0;w<4;w++)
               {
               printf(" %d",md[v][w]);
    
     }
     }



     puts("\n");
         
     multipli_matrice( mu, md);
}




Voici ce qu'il affiche.

Voici la matrice M1




 



 9 8 1



 8 3 3



 2 8 8



 3 6 6



Voici la matrice M2




 



 0 9 2 6



 4 7 4 7



 9 9 7 7



Multiplication de M1 par M2



Resultat M3




 



 113 210 65 181



 57 136 51 106



 131 170 95 148



 941452550 -1072027589 2013480256 -1072027610


La deernier lignes de m3 pose probleme, j'ignore d'où vient l'erreur.

Voyez vous une erreur?

Cordialement

A bientôt
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bas tu fais des boucles de 0 à 3:

for(i=0;i<4;i++)
    {
         for(j=0;j<4;j++)

Alors que tes matrices m1 et m2 ne sont pas 4x4.
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
1
Salut,

Luthor a raison, tu fais n'importe quoi là:p
-Puis return m3[i][j] ca fait pas du tout ce qu'il veut, ca retourne deja qu'une seule valeur au lieu de toute la matrice, et y'a des chances que ca soit une valeur en dehors de la matrice
-Donc si tu veux retourner la matrice, faut l'allouer dynamiquement, pas statiquement, et retourner un int **
@++
Messages postés
116
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
14 juin 2012

Et oui tu avais deja ta réponse, mais de la multiplicatin de M2 par M1 : une matrice 4*3
Essaies avec deux matrices 4.4 mais méfies toi A*B != B*A....
Messages postés
5
Date d'inscription
samedi 18 décembre 2010
Statut
Membre
Dernière intervention
15 décembre 2011

salut
a la place de m3[i][k]=m1[i][j],m2[j][k];
tu mais m3[i][k]=m1[i][j],m2[j][k]+m3[i][k];

devplloper