|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
Bonjour à tous,
Tout d'abord, veuillez m'excuser si je ne poste pas dans la zone approprié, mais j'arrive tout juste sur le forum. Voila mon problème, je souhaite tracer un abaque à partir de la formule de Colebrooke en mécanique du fluide. Mais le programme de tourne pas, et je dois avoir terminé ce programme avant la fin des vacances, seulement je bloque complétement... J'implore donc votre aide. Voici mon programme actuel : Code :
avec iter3 qui est le programme suivant : Code :
Un très grand merci aux personnes qui m'aideront et me permettront de corriger mon problème. Cordialement, Clement |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Inscription : novembre 2006 Messages : 15 088 ![]() |
Remplace
Code :
Code :
text(10.0,x(find(R==10)),['\leftarrow' num2str(i*K) ],'HorizontalAlignment','left') Sinon pour le reste, vu le nombre d'itérations à effectuer, je doute que ton code sois très rapide
__________________
J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) |
||
|
00
|
|
|
#3 |
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
Merci beaucoup pour tas réponse Dut, je vais tester cela tout de suite.
Oui j'en conviens, mon programme est lent, mais pour l'instant je veux avoir un programme fonctionnel avant de l'optimiser au mieux. Je ne suis pas encore très bon en programmation, je préfère procéder par étapes... Si d'autres personnes décèlent d'autres erreurs je vous serais reconnaissant de m'en faire part. Merci encore Dut. Bonne journée. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Inscription : novembre 2006 Messages : 15 088 ![]() |
Dans la fonction iter3, si la première condition n'est pas remplie, la variable de sortie L n'existera pas, donc la variable x dans le code principale sera vide et cela fera planté l'exécution.
As-tu réellement besoin de tracer l'abaque en temps réel ? Tu devrais d'abord faire le calcul de toutes les valeurs en les stockant dans une matrice puis faire l'affichage une seule fois, non ?
__________________
J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) |
|
00
|
|
|
#5 |
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
Non effectivement, je n'ai pas besoin de tracer l'abaque en temps réel.
Le stockage des valeurs dans une matrices était mon idée initial, mais j'ai rencontré des erreurs plutôt nombreuses lorsque j'ai essayé de faire ça, j'ai donc abandonné pour cette méthode plus "intuitive" pour ma part. J'avais effectivement décelé le problème avec L et x dont tu parles, mais je n'arrive pas du tout à le résoudre, d'où mon poste sur ce forum. A vrai dire, on nous a "lâcher" dans ce projet sous Matlab en ayant à peine les bases sous ce logiciel. Travaillant sous Maple avant, ce logiciel travaillant avec une méthode matricielle me trouble un peu. Quel est le programme pour stocker chacune de mes valeurs dans une matrice ? Mais surtout que le stockage soit tel que le traçage de l'abaque ce fasse aisément par le logiciel, il me semble que mon problème était sur ce point. Je te remercie de ton aide Dut. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
J'ai lu attentivement ton tuto Dut concernant les matrices sous Matlab, ce qui ma permis de mieux cerner la mise en place de matrice, mais je ne parviens toujours pas à saisir comment je pourrais faire.
Car il faudrait tout d'abord mettre chacune de mes valeurs de lambda (de iter3 donc) dans une matrice (ce que je ne parviens déjà pas à faire..), seulement lambda dépend de 2 variables (R le nombre de Reynolds et K). Dans mon programme initial, pour faciliter la lecture de l'abaque, j'ai pensé me contenter de 10 valeurs de K environ (un pas pour K tel que il varie 10 fois dans intervalle donné, comme j'ai voulu faire dans mon programme initial), et faire varier R d'un pas de 10 ou moins. Pour cette méthode, je vais donc avoir 10 matrices (une pour chaque valeurs de K) et je vais devoir tracer sur un même graphique chaque courbes correspondant à chaque valeurs de K. C'est bien cela ? Sauf que je n'arrive pas la première étapes... Je ne vois pas comment faire varier R n-fois et K 10 fois pour obtenir les 10 matrices; et encore moins les utiliser par la suite. Quelqu'un pourrait-il m'aider ? ![]() Je vois très bien la procédure à suivre, mais ne pas pouvoir l'appliquer car je ne manipule pas assez bien le logiciel est quelque chose de très frustrant... Cordialement, Clément |
|
|
00
|
|
|
#7 | ||
![]() ![]() ![]() Inscription : novembre 2006 Messages : 15 088 ![]() |
Sort de ton problème réel et prends un exemple plus simple :
Code :
__________________
J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) |
||
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
C'est effectivement ce que j'ai essayé de faire, avec une boucle while.
Voila où j'en suis : Code :
Mais ça ne marche pas. Je dois surement rajouter une boucle mais je ne vois pas bien où, vu que ma condition d’arrêt ne porte que sur R. |
||
|
|
00
|
|
|
#9 | ||
![]() ![]() ![]() Inscription : novembre 2006 Messages : 15 088 ![]() |
Je ne comprends pas pourquoi la fonction iter3 devrait renvoyer autre chose qu'un scalaire.
Pourquoi ne pas simplement faire quelque chose comme ceci dans ton script principal ? Code :
__________________
J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) |
||
|
00
|
|
|
#10 | ||
![]() ![]() Jérôme Inscription : septembre 2009 Messages : 5 167 ![]() |
Un retour sur le tutoriel :
III-A. Indexage classique (ligne,colonne) Citation:
__________________
Débutant en MATLAB ? Vous voulez faire une Interface Graphique ? Les Tutoriels et la FAQ sont là pour vous aider ![]() Une erreur ? "Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).Citation:
|
||
|
|
00
|
|
|
#11 | ||||
![]() ![]() Florent Ing. Aérospatiale Inscription : juin 2003 Messages : 572 ![]() |
Je te propose ce bout de code, qui n'optimise certes pas le calcul mais qui évite les 1000 appels à la fonction plot.
Code :
renverra la première valeur de x (mais x est un tableau d'une seule valeur!) lors du premier passage de la boucle j, puis renverra [] au second passage, ce qui fera planter la ligne Code :
text(10.0,x(find(R==10)),['\leftarrow' num2str(i*K) ],'HorizontalAlignment','left'); Code :
|
||||
|
|
00
|
|
|
#12 | ||||
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
Dut : Effectivement Dut, tu as raison... Merci pour ton script suggéré. Seulement maintenant, j'ai une question : quel format pour ma matrice ? Devrait-je mettre mes résultats dans une matrice colonne, carré ou quelconque pour tracé la courbe affiliée ? Je comptais mettre mes résultats dans une matrice colonne unique, est-ce une erreur ?
EDIT : Ce programme fonctionne dorénavant. C'est maintenant à partir de la matrice obtenue que je n'arrive pas à tracer ma courbe correct. Code :
Mais j'ai du mal à définir R car il doit être de même dimension que M. winjerome : Merci, j'avais effectivement omis cela, c'est une bête erreur de ma part. Comme vous le voyez, je débute encore dans Matlab, veuillez donc m'excusez pour les erreurs grossières que je fais... FLB : Merci beaucoup. Je vais essayer de me pencher sur le code que m'as fournis. Même si j’avoue ne pas tout saisir étant encore inexpérimenté... EDIT : J’obtiens bien des tracés correct en rajoutant l’échelle logarithmique, merci beaucoup FLB. Seulement, comment faire pour relier chacun des points construit et affiché les flèches ? Car je ne comprend pas, les commandes m'ont l'air correct, mais l'affichage des flèches et des légendes ne fonctionne pas.. Code :
J'ai d'ailleurs oublié de le préciser, mais mon objectif final est d'obtenir ceci sous Matlab : http://www.ac-nancy-metz.fr/enseign/.../colebrook.gif |
||||
|
|
00
|
|
|
#13 | ||
![]() ![]() Florent Ing. Aérospatiale Inscription : juin 2003 Messages : 572 ![]() |
il y a 2 coquilles dans mon code, il faut corriger par :
Code :
Et j'ai oublié un détail en copiant collant mon code : Code :
legendes = cellfun(@num2str,num2cell(resultats(3,:)),'UniformOutput',false); |
||
|
|
00
|
|
|
#14 | ||
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
D'accord, je ne les avais pas vue...
Non, une seule flèche par courbe pour indiquer le K différent sur chaque courbes. C'est ce que faisait la partie suivante dans mon programme initial : Code :
Et quelle est la commande pour relier les points entre eux ? Merci. |
||
|
|
00
|
|
|
#15 |
![]() ![]() Florent Ing. Aérospatiale Inscription : juin 2003 Messages : 572 ![]() |
Tel que tu l'as programmé pour l'instant tu traces 10000 flèches...
du coup tu vas vouloir plutot marquer un truc comme : Code :
text(resultats(1,indices_des_resultats_où_R_vaut_10^8_cest_a_dire_999_1999_etc),10^8,legendes,'HorizontalAlignment','left'); Pour le dessin des courbes, regarde la fonction En particulier les linestyles, qui permettent de choisir de tracer des points '.', des lignes '-' (par défaut), des lignes en pointillées etc. Il te faudra ainsi faire un plot pour chaque courbe, avec un "hold on" entre chaque. |
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
Mais comment faire un plot pour chaque courbe vu qu'elles sont calculées au fur et a mesure ?
![]() J'ai essayé de mettre un : Code :
plot(resultats(1,:),resultats(2,:),'--r','MarkerSize',10) |
|
|
00
|
|
|
#17 | |
![]() ![]() Jérôme Inscription : septembre 2009 Messages : 5 167 ![]() |
__________________
Débutant en MATLAB ? Vous voulez faire une Interface Graphique ? Les Tutoriels et la FAQ sont là pour vous aider ![]() Une erreur ? "Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).Citation:
|
|
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
Merci Winjerome
Je n'arrive à appliquer cela à mon programme actuel... Tant pis je vais rester avec des points je pense. |
|
|
00
|
|
|
#19 | ||
![]() ![]() Florent Ing. Aérospatiale Inscription : juin 2003 Messages : 572 ![]() |
Tous les calculs sont fait, il faut que tu récupères chaque série de point qui composent une courbe et que tu la traces, par exemple :
Code :
|
||
|
|
00
|
|
|
#20 | ||
|
Invité de passage
![]() Clement Étudiant Inscription : janvier 2013 Messages : 17 ![]() |
J'aurais une autre petite question : comment fait on pour adapter l'échelle ?
Voici mon programme pour l'instant : Code :
J'ai rajouté la partie laminaire de la courbe, donc la droite à gauche du graphique sur la photo de l'abaque (http://www.ac-nancy-metz.fr/enseign/.../colebrook.gif) Sauf que comme vous le voyez, les courbes calculées avant sont dans un intervalle proche de 0, tandis que la droite ,elle, est dans un intervalle beaucoup plus grand. Je voudrais juste avoir le petit bout de courbe de la partie proche de 0 d'affichée. Je ne trouve pas la commande adéquate. |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com