 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
laure12345
Inscrit le: 17 Fév 2011 Messages: 9
|
Posté le: 17 Fév 2011 15:48 Sujet du message: Algorithme de Dijkstra |
|
|
Bonjours à tous!
Je suis étudiente, et nouvelle en maple (d'ou mon niveau pitoyable!!).
Je dois étudier l'algorithme de Dijkstra, et votre TP m'a beaucoup aidé, mais j'ai cependant des questions. Tout d'abord concernant la 1ere programation (construction de la matrice): je n'ai pas très bien compris la fonction evalm (.=ou?) et pourquoi matrix(n,n,1)? et ensuite je ne comprends pas bien non plus pour la boucle "for arc in G[2] do M[arc[1],arc[2]]:=arc[3];". Voilà, si quelqu'un pourrait m'aider (parce que même avec l'aide maple...), merci d'avance!! (J'aurais d'autre questions pour la 2e prog plus compliquée, mais chaque chose en son temps!)  |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 18 Fév 2011 7:25 Sujet du message: |
|
|
Bonjour,
evalm est la fonction d'évaluation matricielle.
matrix(n,n,1) remplit une matrice n x n avec des 1, que je multiplie ensuite par infinity pour avoir une matrice initiale remplie d'infinis.
G[2] est la liste des arcs pondérés [x, y, δ(x,y)].
Donc la boucle
for arc in G[2] do M[arc[1], arc[2]] := arc[3] end do
permet de placer dans la matrice la distance δ(x,y) en ligne x et colonne y.
Par exemple: si arc = [1, 2, 10] (premier arc de G[2]), on aura M[1,2]=10, donc cela place un 10 en ligne 1 et colonne 2 de M.
A bientôt. |
|
Revenir en haut de page |
|
 |
laure12345
Inscrit le: 17 Fév 2011 Messages: 9
|
Posté le: 19 Fév 2011 12:04 Sujet du message: |
|
|
Merci beaucoup!!
Alors pour la 2e programmation, je me pose plusieurs questions:
-dans l'initialisation, pourquoi au lieu décrire n:=linalg[rowdim](M), je ne peux pas écrire n:=linalg[columndim](M) qui selon moi reviendrai au même vu que la matrice est carrée, mais maple refuse?
-pour sortir de la boucle, dans la construction de c, pourquoi break fi et non break if?
-et je n'ai pas bien compris y avec pred[k]:=dep, pred[k]:=y et la boucle if d[k]>d[y]+M[y,k] then d[k]:=d[y]+M[y,k]...
Voilà, merci d'avance!  |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 20 Fév 2011 9:21 Sujet du message: |
|
|
Bonjour,
n:=linalg[columndim](M) n'existe pas: il faudrait mettre n:=linalg[coldim](M) pour que cela fonctionne de la même façon.
fi ou end if indique la fin d'un bloc commençant par if
Je vous engage à relire le chapitre de cours sur la programmation sur ce site pour apprendre la syntaxe du langage.
Pour votre dernière question, vous consultez cette page http://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra qui vous explique l'algorithme de façon très détaillée sur un exemple.
A+ |
|
Revenir en haut de page |
|
 |
laure12345
Inscrit le: 17 Fév 2011 Messages: 9
|
Posté le: 22 Fév 2011 21:55 Sujet du message: |
|
|
Merci beaucoup. |
|
Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|