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

Prolog Discussion :

Matrix multiplication help


Sujet :

Prolog

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Matrix multiplication help
    Hello

    I'm beginner in Prolog and I need some help. I need a code to multiply two matrices NxM. For example:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 ?- multiply([[1,0,2],[-1,3,1]],[[3,2,1],[1,1,0]],W).
    and result Please help

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Hello

    Je suis débutant en Prolog et j'ai besoin d'aide. J'ai besoin d'un code pour multiplier deux matrices N X M.
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Sorry, you must speak in french !

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    Désolé, il faut parler en Français

    Ne serait-ce pas plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 ?- multiply([[1,0,2],[-1,3,1]],[[3, 1], [2, 1], [1,0]],W).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 ?- multiply([[1,0,2],[-1,3,1]],[[3, 1], [2, 1], [1,0]],W).
    Ainsi, les dimensions sont appropriées. Quelqu'un peut-il aider?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Vous pouvez faire ainsi, c'est une multiplication générale de matrices (N,M)
    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
    multiply(M1, M2, R) :-
    	% Mise en colonne des valeurs de la matrice 2
    	% e.g. : de la liste
    	% [[3, 1], [2, 1], [1,0]]   
    	%
    	% on extrait les deux listes
    	%
    	% [[3, 2, 1], [1, 1, 0]]
    	extract_colum(M2, LC),
    	% multiplication effective
    	multiply1(M1, LC, R).
     
    extract_colum(M, LC) :-
    	M= [H | _],
    	length(H, L),
    	extract(M, 0, L, [], LC).
     
    extract(_, N, N, L1, L) :- 
    	!,
    	reverse(L1, L).
     
    extract(M, N, Max, L, LF) :-
    	% on extrait l'élément de rang N de la liste M
    	maplist(nth0(N), M, L1),
    	N1 is N+1,
    	extract(M, N1, Max, [L1 | L], LF).
     
     
     
    multiply1(M1, M2, R) :-
    	maplist(multiply2(M2), M1, R).
     
    multiply2(M1, C, R) :-
    	maplist(multiply3(C), M1, R).
     
    multiply3(Co, Ro, R) :-
    	maplist(mult, Co, Ro, LR),
    	sumlist(LR, R).
     
    mult(A, B, R) :-
    	R is A * B.
    C'est un code SWI-Prolog.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre aide Trap D. Il travaille magnifiquement.Salut.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2014, 19h27
  2. [Help Plz) Extractions multiples dans un fichier Excel , listing imprimantes
    Par stanyslassz dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 19/03/2014, 19h58
  3. Question a propos de multiplication matrix/vector
    Par agatte dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/12/2011, 19h34
  4. Count multiple help
    Par lerorodu51 dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/08/2011, 16h14
  5. Pb Sélection multiple - Please Help
    Par abennis dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/07/2007, 14h57

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