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

Pascal Discussion :

Erreur produit matriciel


Sujet :

Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Erreur produit matriciel
    Bonjour,
    J'ai déjà consulté de nombreux topics pour savoir comment multiplier deux matrices de dimensions (m,n) et (n,p). Mais je préfère toujours faire par moi même. Or je n'arrive pas à résoudre mon problème. Je précise que le programme compile mais le résultat du produit n'est pas juste, pouvez-vous me donner des pistes afin de résoudre mon problème ? Voici la partie nécessaire de mon programme :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    writeln('Les deux matrices sont de dimensions (m,n) et (n,p)');
    write('m=');
    readln(m);
    write('n=');
    readln(n);
    write('p=');
    readln(p);
     
    writeln('entrer les valeurs de la matrice 1');
     
    for x:=1 to m do
    begin
     writeln('colonne ',x);
     for y:=1 to n do
     begin
    	writeln('ligne ',y);
    	readln(t1[x,y]);
     end;
    end;
     
    writeln('entrer les valeurs de la matrice 2');
    for x:=1 to n do
    begin
     writeln('colonne ',x);
     for y:=1 to p do
     begin
    	writeln('ligne ',y);
    	readln(t2[x,y]);
     end;
    end;
     
    for x:=1 to m do
    	for y:=1 to p do
    	begin
    		t3[x,y]:=0;
    		for k:=1 to n do
    			t3[x,y] := t3[x,k] + t1[k,y]*t2[y,x];
    	end;
     
    writeln('Résultat :');
    for x:=1 to m do
    begin
    	writeln('colonne ',x);
    	for y:=1 to p do
    	begin
    		writeln('ligne ',y);
    		writeln(t3[x,y]);
    	end;
    end;
    (ci-joint le programme complet)


    Je vous remercie d'avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Le problème lui-même a quelque chose de bizarre. D'où vient cette idée de calculer le produit de deux matrices de dimensions différentes ? Quelle drôle d'idée aussi de vouloir que la largeur de la seconde matrice soit égale à la hauteur de la première ?

    S'il y a une solution à ce problème, c'est (me semble-t-il) de déterminer la plus petite largeur, la plus petite hauteur, et de ne faire l'opération qu'à l'intérieur de ces limites, en procédant comme tu as fait pour l'addition et la soustraction.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    Crocosre a parfaitement raison : on ne peut multiplier deux matrices que si le nombre de colonnes de la première est égal au nombre de lignes de la seconde.
    C'est une nécessité qui résulte de la définition du produit des matrices.
    Voir à ce sujet un cours d'algèbre linéaire.

    L'erreur se situe ligne 38.

    Ce n'est pas t3[x,y] := t3[x,k] + t1[k,y]*t2[y,x];
    qu'il faut écrire, mais t3[x,y] := t3[x,y] + t1[x,k]*t2[k,y];

    La formule générale est :
    Formule mathématique

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Veuillez excusez mon temps de réponse, impossible de me connecter plus tôt !

    Merci pour votre aide, je comprends mieux maintenant pourquoi cela ne fonctionnait pas. Encore merci et à bientôt !

+ 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. [Débutant] Difficulté avec un produit matriciel
    Par david_Montreal dans le forum MATLAB
    Réponses: 6
    Dernier message: 13/07/2007, 22h06
  4. 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
  5. Problème: produit matriciel
    Par v4np13 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 17/05/2005, 17h23

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