IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

multiplication de deux matrices en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut multiplication de deux matrices en C
    salut j ai pas réussi a ecrire un programme qui fait la multiplication de deux matrices en C par exemple:
    x=(0 _1 4) y=(1 -1 3)
    (1 3 5) (-1 1 2)
    xy=(1 -1 14)
    (-2 2 29)
    en va bien sur utiliser un tableau de 2 dimension
    est ce que quelque un peut me donner la formule a utiliser ou le code en C
    j ai chercher sus web la formule j au trouver sa http://en.wikipedia.org/wiki/Matrix_multiplication
    mais j ai rien compris
    merci d avance.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Pour multiplier deux matrices, il faut que la hauteur de l'un soit égale à la largueur de l'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    |1| x |3 4| = |3 4|
    |2|           |6 8|
    L'exemple que tu donnes n'est pas une multiplication matricielle.

    Poste le code que tu as écrit même s'il ne fonctionne pas, nous essayerons de t'expliquer ce qui ne va pas.

  3. #3
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut
    j ai fait un programme qui est pas beaucoup différent que de celui que je cherche c est de matrice carré voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include<stdio.h>
    #include<stdlib.h>
    int t[3][3],i,j;
    main(){
     
           for(i=0;i<3;i++){
                for(j=0;j<3;j++){
                      printf("\nDonner un nombre: ");
                      scanf("%d",&t[i][j]);
                }
           }
     
           for(i=0;i<3;i++){
                t[i][i]=0;
           }
     
           printf("\n");
     
           for(i=0;i<3;i++){
                for(j=0;j<3;j++){
                      printf("%5d",t[i][j]);
                }
                printf("\n");
           }
     
           printf("\n");
     
           system("pause");
           return 0
    }
    que ce que je vais changer dans ce code pour avoir la multiplication de matrice que je cherche?

  4. #4
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    int * MultMat(int *a,int *b,int n)
    {
        int *ptr = malloc(sizeof(int)*n*n+1);
        int tmp,i,j,k=0;
     
        if(ptr ==NULL)
             return NULL;
     
        for(i=0;i<n;i++)
        {
           tmp = 0;
           for(j=0;j<n;j++)
               tmp+=*(a*j+i) * *(b*i+j);
           *(ptr+k) = tmp;
           k++;
        }
     
      return ptr;
    }
    et dans ton main tu utilise comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int main()
    {
       int *A = malloc(sizeof(int)*3*3+1);
       int *B = malloc(sizeof(int)*3*3+1);
     
        //.... apres avoir remplit les 2 matrices;
     
       int *R = MultMat(A,B,3);
     
       return 0;
    }

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    @komat
    Citation Envoyé par komat Voir le message
    j ai fait un programme qui est pas beaucoup différent que de celui que je cherche c est de matrice carré voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include<stdio.h>
    #include<stdlib.h>
    int t[3][3],i,j;
    main(){
     
           for(i=0;i<3;i++){
                for(j=0;j<3;j++){
                      printf("\nDonner un nombre: ");
                      scanf("%d",&t[i][j]);
                }
           }
     
           for(i=0;i<3;i++){
                t[i][i]=0;
           }
     
           printf("\n");
     
           for(i=0;i<3;i++){
                for(j=0;j<3;j++){
                      printf("%5d",t[i][j]);
                }
                printf("\n");
           }
     
           printf("\n");
     
           system("pause");
           return 0
    }
    que ce que je vais changer dans ce code pour avoir la multiplication de matrice que je cherche?
    Hum, ton code ne fait pas grand chose à part demander et afficher une matrice.

    Calcul de C = A x B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int A[3][3];
    int B[3][3];
    int C[3][3];
     
    for(i = 0; i < 3; ++i) {
        for(j = 0; j < 3; ++j) {
            C[i][j] = 0;
            for(k = 0; k < 3; ++k) {
                C[i][j] = C[i][j] + A[i][k] * B[k][j];
            }
        }
    }
    La boucle sur k permet de calculer chaque Cij (Cij = Somme(Aik * Bkj)) cf http://upload.wikimedia.org/math/4/2...c6c57039bc.png

    Les boucles sur i et j permettent de réaliser le calcul de tous les Cij

    PS : merci de penser à la balise CODE

    @lilington
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp+=*(a*j+i) * *(b*i+j);
    Tu es sur de toi ?

  6. #6
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut
    mabu ta oublier de declarer les compteur mais ton code sa marche pas:




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include<stdio.h>
    #include<stdlib.h>
    int main(){
        int A[3][3];
         int B[3][3];
          int C[3][3];
          int i,j,k;
     
      for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            C[i][j]=0;
            for(k=0;k<3;k++){
                C[i][j]=C[i][j]+A[i][k]*B[k][j];
            }
        }
    }
    system("pause");
    return 0;
    }
    il ya aucun faute de syntaxe mais le programme affiche rien

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par komat Voir le message
    mabu ta oublier de declarer les compteur mais ton code sa marche pas:

    il ya aucun faute de syntaxe mais le programme affiche rien
    As tu lu le code et essayé de le comprendre ?
    Ce code ne fait QUE le multiplication.

  8. #8
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    Citation Envoyé par mabu Voir le message
    @lilington

    Tu es sur de toi ?
    hehe, une petite erreure ca arrive. merci de me l'avoir rappeller.

  9. #9
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut
    quelle erreur vous êtes sur si il y a une erreurs sur mon code vous l dites

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. multiplication de deux matrices
    Par armand22 dans le forum Débuter
    Réponses: 7
    Dernier message: 05/02/2013, 20h48
  2. multiplication de deux matrice sous matlab
    Par khalil.ajmi dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/05/2010, 16h04
  3. multiplication de deux matrices
    Par ikuzar dans le forum Débuter
    Réponses: 2
    Dernier message: 19/10/2009, 14h38
  4. Calcul de la multiplication de deux matrices
    Par al_alias dans le forum Pascal
    Réponses: 2
    Dernier message: 30/05/2007, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo