Multiplication de 2 matrices

developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 - 2 mai 2007 à 22:15
guendouzbachir Messages postés 5 Date d'inscription samedi 18 décembre 2010 Statut Membre Dernière intervention 15 décembre 2011 - 19 déc. 2010 à 10:05
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

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
2 mai 2007 à 22:47
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)
0
developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 1
3 mai 2007 à 08:25
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
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
3 mai 2007 à 11:52
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.
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
3 mai 2007 à 12:34
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 **
@++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
HSylvio Messages postés 116 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 14 juin 2012
8 juin 2007 à 15:10
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....
0
guendouzbachir Messages postés 5 Date d'inscription samedi 18 décembre 2010 Statut Membre Dernière intervention 15 décembre 2011
19 déc. 2010 à 10:05
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
0
Rejoignez-nous