salut
je vais réessayer maintenant
merci de votre patience
cordialement
salut
je vais réessayer maintenant
merci de votre patience
cordialement
Salut M.Dut
Je ne sais pas quoi dire, et ben parfait, ça marche enfin,
Matlab 7.0:
1.6592s
0.8410s
0.8312s
0.0872s
Matlab7.1:
1.9409s
0.9713s
0.9818s
0.0828s
Encore une fois, je ne sais pas quoi dire,gros merci M. , et je vous souhaite une bonne continuation et de réussite dans votre travail.
Je vais vous dire pourquoi ça n'as pas marche, j'ai copie le code directement, sans faire une fonction .m file pour être plus rapide, et quand j'ai crée la fonction, ça a marche, je comprend pas pourquoi cette difference??, je n'aurai jamais pense a ça; je m'excuse de ne pas le faire au début.
Autre petit conseil que je vous demande, vous avez vu les résultats mentionnes la haut, me conseillez vous de travailler avec MATLAB7.0? pourtant la version 7.1 est plus récente mais donne pas aussi bon résultat que la version 7.0.
Problème résolu alors
Salut M.Dut
Mais comme même je ne comprends pas pourquoi un exécutant le programme .m file(test.m) l'exécution se déroule plus rapidement qu'en copiant directement le code dans le window de matlab
merci
Salut
Merci pour votre information supplémentaire, et pour votre confirmation, j'ai compris grâce a vous que 100% le problème viens du mon programme, et maintenant ça marche a merveille.
merci
juste une question en laissant le micro auparavant 4 jours allume sans l'éteindre, est ce que ceci ça n'as pas de risque sur mon pc?
Bonjour
Je voudrai revenir au problème car si j'augmente N=10000 (ou au lieu de 4 variables on a 100 par exemple); l'algorithme ralenti d'une façon extravagante, donc est ce qu'il n'y pas moyen ou même une idée, pour améliorer le temps d'exécution.
merci pour votre contribution
cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 tic for i=1:N for j=i+1:N BBBB = exp(-((X(i,1)-X(j,1))^2 + ... (X(i,2)-X(j,2))^2 + ... (X(i,3)-X(j,3))^2 + ... (X(i,4)-X(j,4))^2)); end end toc
déjà ne pas faire calculer d'adresses inutiles...
Remplacer :
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for i=1:N for j=i+1:N BBBB = exp(-((X(i,1)-X(j,1))^2 + ... (X(i,2)-X(j,2))^2 + ... (X(i,3)-X(j,3))^2 + ... (X(i,4)-X(j,4))^2)); end end
tu économises déjà 4*N calculs d'adresse inutiles à chaque boucle i..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 for i=1:N X1 = X(i,1); X2 = X(i,2); X3 = X(i,3); X4 = X(i,4); for j=i+1:N BBBB = exp(-((X1-X(j,1))^2 + ... (X2-X(j,2))^2 + ... (X3-X(j,3))^2 + ... (X4-X(j,4))^2)); end end
D'autre part, tes expressions m'ont tout l'air symétriques...
Il y a donc quelque chose (sans doute à peu près la moitié) que tu n'as pas à calculer mais juste à trouver le bon indice pour le récupérer..
Salut!
Matlab est un logiciel magnifique, mais il ne faut pas le mettre à toutes les sauces. A mon avis, quand, comme toi, on est obligé de résoudre un problème aussi monstrueux que le tien, et qu'on a pas la possibilité d'en réduire la taille, il convient d'utiliser un outil mieux adapté parce que plus proche du hardware, c'est-à-dire le C ou le Fortran, voire même l'assembleur.
Jean-Marc Blanc
Bonjour Jean-Marc Blanc
Merci beaucoup, mais oui bien sur je sais qu'effectivement avec le C ou C++ c'est mieux adapte a mon problème, mais je doit utiliser matlab c'est exige de la part de mon directeur.
merci encore une fois, mais est ce qu'il n'y pas vraiment une autre astuce pour le rendre beaucoup plus rapide.
Cordialement
Merci Souviron34 pour ton idée concernant l'adressage qui n'était pas utile, mais il n' y pas une grande amélioration, pour l'astuce de la symétrie je l'ai utilise, elle est mentionee dans le code, j'ai commence a j=i+1.....
Encore si c'est j'ai 100 variable
comment je vais faire pour l'adressage, je doit écrire 100 fois?? mais est ce que vraiment y a pas de solution pour le rendre plus rapide. merci en attendant de votre précieuse réponse.
Cordialement
Salut!
Il n'est pas interdit de lui demander pourquoi. Comme professeur, j'ai toujours estimé que je devais être capable de justifier mes exigences; il en va de même pour les directeurs. C'est une question de respect pour les étudiants ou les subordonnés.mais je doit utiliser matlab c'est exige de la part de mon directeur.
Jean-Marc Blanc
Bonjour
Parce que le problème est que l'astuce dans Matlab pour rendre cet algorithme rapide existe, juste je ne sais pas comment
Merci
Je ne vois pas dut tout à quoi servent les modifications que tu as apportées...
Sinon, comme Jean-Marc, je pense que MATLAB atteint ses limites ici. La taille du problème empêche la vectorisation du code (risque de Out of Memory élevé)
Je ne vois que deux solutions :
- paralléliser le calcul (les termes à l'intérieur de l'exponentielle sont indépendants)
- passer par des fichiers MEX (C ou Fortan)
Mais j'ai l'impression que, depuis le début, tu ne nous montre pas la vraie boucle que tu as à dans ton programme, si ?
Bonjour M.Dut
T'as tout a fait raison, parce que ce n'etait pas indispensable d'ecrire tout le code puisque j'ai ecris juste ceux qui retarde le déroulement, saisi??.
Tu dit paralléliser le calcul (les termes à l'intérieur de l'exponentielle sont indépendants)? ça veut dire écrire une deuxième fonction pour calcul des exponentielle ou tu veut dire autre chose???
Merci en l'attente de ta réponse.
Cordialement
Salut!
Un marteau est un excellent outil pour planter des clous; une brouette est un excellent outil pour transporter du sable. Mais essaie de planter des clous avec une brouette ou de transporter du sable avec un marteau.mais je doit utiliser matlab c'est exige de la part de mon directeur
Si tu veux que ton travail avance, commence par montrer ce message à ton directeur.
Jean-Marc Blanc
Merci comme même. Je trouverai la solution, et je la posterai.
Cordialement
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager