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

Algorithmes et structures de données Discussion :

Problème: produit matriciel


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut Problème: produit matriciel
    Je suis en train de créer un petit programme java qui effectue des opérations sur les matrices (calcul de déterminant,, calcul de la matrice inverse, somme de deux matrices, produit de deux matrices et résolution de systèmes linéaires). Je calle à la partie "Produit matriciel", je n'ai aucune idée de comment je vais m'y prendre. J'ai la 1ere matrice et la deuxième matrice (qui sont soit entrées soit générées). A partir de ces deux là, j'aimerai effectuer le produit matriciel. Il y a trop de paramètres (les lignes et colonnes de chacune d'entre elles) et je m'y perds. Mes matrices sont carrées de genre 2x2 ou 3x3 en fonction du choix de l'utilisateur. J'ai beau essayer, je n'y arrive pas. Pourriez-vous m'aider? Un grand merci d'avance.

    P.S.: J'ai reposté ici suite au conseil de VitamineC

    J'en profite pour poster mon code actuel.

    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
     
    //Sous fonction: calcule le produit de deux matrices
     	static double[][] produitMatrices (double matrice1[][], double matrice2 [][], int taille){
     		double produit[][];//création du tableau produit
     		produit=new double[taille][taille];//paramètres du tableau produit
     		int l,c, k;//variable de ligne, colonne et k
     
           	for( l=0 ; l<taille ; l++){
            	for ( c=0 ; c<taille ; c++){
            		// calcule de la case (M1.M2)[i][j]
            		produit[l][c] = 0 ;
            		for(k=0;k<taille;k++){
            			produit[l][c] = produit[l][c] + matrice1[l][k] * matrice2[k][c];
                	}
                }
            }
            return produit;
        }
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonsoir
    Quel est le problème exactement ?
    J'ai ressorti mes formules de calcul matriciel le calcul me semble juste.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    Effectivement, ta formule pour calculer le produit matriciel est excellente. Il ne devrait pas y avoir d'erreur d'algorithme dans ton code. J'ai moi aussi ressorti mes notes sur le produit de deux matrices et c'est exactement ce que tu as marqué.

    Si tu as un problème avec cette formule, soit plus précis, parce que je n'en voit pas !

  4. #4
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Quand je fais tourner le programme, il ne m'affiche pas tout les résultats.

    Voici un exemple de résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Matrice1:
     10    1     0
    -15    0    17
      6  -12    11
     
    Matrice2:
    -11    11   -18
      4     -5    18
      9    -18    -4
     
    Résultat:
     
    -15  -72
    Je ne vois pas d'où vient le problème.

    En tout cas, merci d'avance pour votre coup de pouce
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  5. #5
    Membre habitué Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Points : 155
    Points
    155
    Par défaut
    A mon avis ce n'est pas un problème d'algorithme comme ta formule est bonne, peut-être un problème avec ta façon d'utiliser la mémoire dynamiquement, mais je ne fais pas de Java donc je ne peux pas t'aider.
    " Tout homme est digne d'un parapluie." Stavroguine dans Les Démons de Dostoïevski.

  6. #6
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    ouais, c'est probablement ça, mais je ne trouve toujours pas de quelle ligne de code, ce problème vient. J'ai fait un peu du même type avec la partie qui traite la somme et ça marche impec. Je ne comprends vraiment pas, j'ai beau me relire et refaire des tests, il manque à chaque fois des éléments et ce sont pas toujours les mêmes...
    Merci d'avance si vous trouvez la solution. Je peux vous copier coller le reste necessaire du programme, mais c'est assez long avec toutes mes sous fonctions,...
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    Taille vaut quoi lorsque tu exécutes ta fonction ?

    Et voici un algo que je te proposes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Fonction AFoisB(A, B, m, p, n)
       Pour i <- 1 à m
          Pour j <- 1 à n
             C[i,j] <- 0
             Pour k <- 1 à p
                C[i,j] <- C[i,j] + A[i,k] * B[k,j]
             Fin Pour
          Fin Pour
       Fin Pour
       Retourner C
    Fin Fonction
    A = Matrice de taille m X p
    B = Matrice de taille p X n

    Voilà. Tu peux essayer cette algo en Java pour voir...

  8. #8
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Taille = 2 ou 3 en fonction de l'utilisateur, ce sont des matrices carrées.

    Je vais tester ton algorithme, je te tiens au jus. Merci d'avance
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  9. #9
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Ton algorithme fonctionne pour tout les types de matrices, pour la fonction produit, je me suis limité au matrices carrées, mais pour la partie résolution de système, j'en aurai besoin. UN grand merci
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    Et est-ce que ta matrice C est complète?

  11. #11
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Je viens de faire plusieurs tests, elle n'est toujours pas complète, je comprends pas, le raisonnement est bon mais il n'affiche pas tout les éléments de la matrice.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    Dans ce cas, es-tu certain que tu fais afficher ta matrice comme il faut?

  13. #13
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    J'utilise la même méthode que quand je fais l'affichage de la somme des matrices, du résultat de l'inverse,... donc logiquement, comme ça marche avec les autres fonctions, pourquoi pas celle-ci
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  14. #14
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Salut,


    Tu pourrais essayer de faire une fontion avec des matrices de taille fixée pour vérifier.

  15. #15
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Bonjour,
    C'est-à-dire? Pour le moment je fais mes tests avec des matrices carrées 2x2 ou 3x3.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 69
    Points : 61
    Points
    61
    Par défaut
    tu peux donner le code pour l'affichage :
    j'ai tester ton code et il marche tres bien .
    donc je pense que c'est lors de l'affichage que tu dois avoir une erreur .[/code]

  17. #17
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Voici:

    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
    31
    32
    33
    34
    35
    36
     
    //Sous fonction: aligne et écrit la matrice
     	static void ecrireMatrice(double[][] matrice, int taille){
     		int l,c;//variables de ligne et colonne
     
     		for (l=0; l<taille; l++){
     			for (c=0; c<taille; c++){
     
     				//Arrondis les différents éléments de la matrice à 3 chiffres après la virgule.
     				NumberFormat formatter = NumberFormat.getNumberInstance();
     				formatter.setMaximumFractionDigits(3);
     				String mat=formatter.format(matrice[l][c]);
     
     				//Affiche en fonction du nombre de caractères de l'élément
     				if ((matrice[l][c]> -99.9 && matrice[l][c]<=-10.0)|| (matrice[l][c]>= 10.0 && matrice[l][c]<99.9)){
     					if(matrice[l][c]<0){
     						System.out.print(mat+"   ");
     					}
     					if(matrice[l][c]>0){
     						System.out.print(" "+mat+"   ");
     					}
     				}
     
     				if (matrice[l][c]> -9.9 && matrice[l][c]<= 9.9){
     					if(matrice[l][c]<0){
     						System.out.print(" "+mat+"   ");
     					}
     					if(matrice[l][c]>=0){
     						System.out.print("  "+mat+"   ");
     					}
     				}
     			}
     			System.out.print("\n");
     		}
     		System.out.println("\n");
     	}
    Merci d'avance
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 69
    Points : 61
    Points
    61
    Par défaut
    Le probleme viens de la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      if ( ( matrice[l][c] > - 99.9 && matrice[l][c] <= -10.0 ) || (matrice[l][c] >= 10.0 && matrice[l][c] < 99.9 ) ) {
    dans tes conditions if tu ne prends pas en comptes les nombres superieurs à 99.9 et les nombre inferieurs à -99.9

    donc au lieu d'avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    -106.0 105.0 -162.0 
     
    318.0 -471.0 202.0 
     
    -15.0 -72.0 -368.0
    tu te retrouves avec
    qui sont les seuls nombre compris entre -99.9 et 99.9

    tu ne prends egalement pas en compte les nombre compris entre 9.9 et 10.0

    ça doit marcher avec ça mais si le fait que matrice[l][c] <|99.9| alors rajoute des conditions
    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
    31
    32
    33
    34
    35
     
    static void ecrireMatrice(double[][] matrice, int taille){ 
           int l,c;//variables de ligne et colonne 
     
           for (l=0; l<taille; l++){ 
              for (c=0; c<taille; c++){ 
     
                 //Arrondis les différents éléments de la matrice à 3 chiffres après la virgule. 
                 NumberFormat formatter = NumberFormat.getNumberInstance(); 
                 formatter.setMaximumFractionDigits(3); 
                 String mat=formatter.format(matrice[l][c]); 
     
                 //Affiche en fonction du nombre de caractères de l'élément 
                 if ( ( matrice[l][c] <= -10.0 ) || (matrice[l][c] >= 10.0  ) ) { 
                    if(matrice[l][c]<0){ 
                       System.out.print( mat + "   " ); 
                    } 
                    if(matrice[l][c]>0){ 
                       System.out.print(" "+mat+"   "); 
                    } 
                 }
     
                 if (matrice[l][c]> -10.0 && matrice[l][c]<= 10.0){ 
                    if(matrice[l][c]<0){ 
                       System.out.print(" "+mat+"   "); 
                    } 
                    if(matrice[l][c]>=0){ 
                       System.out.print("  "+mat+"   "); 
                    } 
                 } 
              } 
              System.out.print("\n"); 
           } 
           System.out.println("\n"); 
        }

  19. #19
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Merci beaucoup, ça marche Je n'y avais pas pensé, je génerai mes matrice de -20 à 20, pour les sommes, ça ne posait évidemment pas de problèmes mais pour les produits, c'est une autre affaire. Un grand merci
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 69
    Points : 61
    Points
    61
    Par défaut
    de rien oubli pas le tag resolu a +

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

Discussions similaires

  1. fonction Produit Matriciel non booleen
    Par roman.nedellec dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2007, 10h35
  2. Réponses: 268
    Dernier message: 07/11/2007, 11h11
  3. Problème formule matricielle
    Par Gerard6969 dans le forum Excel
    Réponses: 2
    Dernier message: 18/09/2007, 08h47
  4. [Débutant] Difficulté avec un produit matriciel
    Par david_Montreal dans le forum MATLAB
    Réponses: 6
    Dernier message: 13/07/2007, 22h06
  5. Produit matriciel booléen en VB pour Excel
    Par v4np13 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/11/2006, 12h39

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