Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > MATLAB
MATLAB Forum d'entraide sur MATLAB. Avant de poster : FAQs MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 17h17   #21
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 589
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 589
Points : 936
Points : 936
Tu trouveras surement ton bonheur avec
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 19h32   #22
clement2406
Invité de passage
 
Homme Clement
Étudiant
Inscription : janvier 2013
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Clement
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2013
Messages : 17
Points : 0
Points : 0
Oui merci, j'avais effectivement trouvé cette fonction.

Seulement maintenant, vu que j'ai une superposition de courbes, quand je met que je veux que ce soit x=[0,8] ( j'ai directement un log10(R) donc c'est normalement un 10^8) les valeurs se superpose... enfin ça me fait n'importe quoi...

Je suis presque au bout, c'est juste une histoire de "réglage" je pense (du moins j'éspère...).

Une âme charitable peut il faire tourner mon programme pour voir les réglages à faire ? J'avoue que je suis un peu à bout après une après-midi entière sur Matlab...

Mon programme est le suivant :

Code :
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
%Paramètres
Rs=logspace(3,8,10);
K=10^(-5);
resultats = zeros(3,length(Rs)*length(1:10:10^3));   %Préallocation mémoire

%Calculs de la partie turbulentes
simID=1;
for j=1:length(Rs)
    R=Rs(j);
    for i=1:10:10^2
        resultats(1,simID)=log10(R);
        resultats(2,simID)=iter3(0.03,i*K,R,0.001);
        simID = simID +1;
    end
end

%Affichage
plotyy(resultats(1,:),K,resultats(2,:),'*');
hold on
matricelam();          % Partie laminaire 
R2=10:60:2000;
T2=matricelam();
plot(log10(R2),T2);

hold on
axis([0 10 0 1]);
text(40,2600,'Epsilon/D varie de 10^-^5 à 10^-^1'); 
xlabel('Re Reynolds');
ylabel('Lambda');
text(1050,0.8,'\epsilon/D');
title('Abaque Lambda en fonction de Re et Epsilon/D');
echo on;
% cliquer un point pour avoir ses coordonnées
echo off;
[xc,yc] = ginput(1);  % attend 1pt de cliquage
text('String',['Re=' num2str(xc,3) ', Lambda=' num2str(yc,4) ],...
      'Position',[4,0.003],...
      'HorizontalAlignment','left'); % 

grid;
avec :

Code :
1
2
3
4
5
6
7
8
9
10
function [L] = iter3(x,K,R,ep)
if (R>=10 & R<=10^8) & (K>=10^(-5) & K<=10^(-1))
    L=0;
    while x-L>=ep
    L=(-2*log10((K/(3.71))+(2.51/(R*x^(1/2)))))^(-2);
    x=L; 
    end
else disp('The Colebrook equation is valid for Reynolds numbers 10<=R<=10^(8) & K must be 10^(-5)<=K<=10^(-1)');
end
end
et :

Code :
1
2
3
4
5
6
7
8
9
function [M]=matricelam(~)
R=10;
j=1;
i=1;
while j*R<2000  
    M(i)=64/(j*R);
    i=i+1;
    j=j*1.17;
end
Et je dois obtenir à peu prés cela :
http://www.ac-nancy-metz.fr/enseign/.../colebrook.gif

sauf que toute les courbes je les laisse en pointillés pour l'instant.
clement2406 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 23h28   #23
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 589
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 589
Points : 936
Points : 936
Je ne vois pas ce que tu veux faire avec ton plotyy?
Code :
1
2
>>doc plotyy
plotyy(X1,Y1,X2,Y2) plots X1 versus Y1 with y-axis labeling on the left and plots X2 versus Y2 with y-axis labeling on the right.
Tu veux bien en abscisse le R et en ordonné le résultat du calcul donné par iter3 ? Pourquoi un simple plot ne suffit pas?
D'après l'image que tu nous donnes, je mettrais :
__________________
Bientôt 10 ans sur DVP!
Matlab 7.9.1.705 R2009b SP1 | XP SP3
Pas de question technique par MP, Merci
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 15h24   #24
clement2406
Invité de passage
 
Homme Clement
Étudiant
Inscription : janvier 2013
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Clement
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2013
Messages : 17
Points : 0
Points : 0
C'est bien ce que j'ai mis, mais les échelles se superposent avec celle d'origine (j'ai des valeurs l'une sur l'autre en abscisse, c'est donc illisible)

Peut être que je met pas la commande au bon endroit ?


Et le plotyy c'est pour créer l'abaque, vu que lambda est fonction de R et de K, je fais donc apparaitre un axe a droite qui est celui de K=epsilon/D, comme sur l'image en faite.
clement2406 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 16h01   #25
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 589
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 589
Points : 936
Points : 936
regarde bien ce que fait
Code :
plotyy(resultats(1,:),K,resultats(2,:),'*');
K n'est qu'une seule valeur!
Code :
plotyy(resultats(1,:),resultats(2,:),8*ones(size(K*[1:10:10^2])),K*[1:10:10^2],'*');
Va plus dans le sens de ce que tu veux faire?
Quand tu plotyy, il faut bien donner 2 séries de données X,Y, et que bien sur qu'elles soient de même taille.
__________________
Bientôt 10 ans sur DVP!
Matlab 7.9.1.705 R2009b SP1 | XP SP3
Pas de question technique par MP, Merci
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 16h33   #26
clement2406
Invité de passage
 
Homme Clement
Étudiant
Inscription : janvier 2013
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Clement
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2013
Messages : 17
Points : 0
Points : 0
Non, parce que je veux tracer lambda en fonction de K et de R.

Avec

Code :
plotyy(resultats(1,:),K,resultats(2,:),'*');
Il trace lambda en fonction de K et lambda en fonction de R. Du moins, c'est ce que je comprend avec la doc de plotyy, et le résultat que j’obtiens concorde plus ou moins avec ce que je veux obtenir. En effet mon axe de droite va de 0 à 0.1 .

En revanche, la ligne de code que tu me donne ne fonctionne pas et fais planter le programme.


Avec mon dernier programme, j'obtiens cela :

http://imageshack.us/f/703/abaque.jpg/


Comme vous le voyez, les valeurs de l'axe des abscisses se superposent... J'ai l’impression que les 2 courbes sont associées à 2 repères différents qui sont superposés...


D'ailleurs, j'ai une autre petite question : comment dans mon programme actuelle puis-je faire commencer l'affiche des points à partir de la valeur R=4000 (soit sur mon axe log10(4000)=3+log10(4)=3.6) ? Je dois bien mettre :

simplement n'est ce pas ? Un doute m’empare...

En tout cas, merci à vous ; à toi FLB principalement pour l'aide précieuse que tu me fournis et le temps que tu consacres à mon aide. Un grand merci.
clement2406 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 19h35   #27
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 589
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 589
Points : 936
Points : 936
J'ai pas de matlab sous la main pour voir ce que donne plotyy avec 3 arguments.
J'arrive pas à comprendre quels couples de points (x,y) tu veux faire apparaitre sur le graphe?
Je comprend que tu veux tracer les points (reynolds, iter3(reynolds)) mais quels autres? Peux etre peux tu le faire en 2 plots séparer pour que ca soit plus clair?
J'appuie bien sur le fait que K dans ton algo est un nombre, et pas un tableau de nombre. La liste des K est en fait K*[1:10:10^2]
On va y arriver
__________________
Bientôt 10 ans sur DVP!
Matlab 7.9.1.705 R2009b SP1 | XP SP3
Pas de question technique par MP, Merci
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 19h54   #28
clement2406
Invité de passage
 
Homme Clement
Étudiant
Inscription : janvier 2013
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Clement
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2013
Messages : 17
Points : 0
Points : 0
Et bien j'essaie de faire apparaitre des courbes Lambda=f(Re) pour des K différents.

Mon idée de départ était comme je l'avais expliqué de mettre une flèche sur chaque courbe afin d'indiquer le K en question. Sauf que vu que maintenant que mon programme trace les points après la boucle, je ne sais pas comment faire. (mon programme initial traçant les courbes l'une après l'autre et affichant une flèche sur chacune au fur et à mesure)

Et après j'ai voulu afficher un axe à droite (l'axe de variations de K) exactement comme sous l'abaque que j'ai fournit en liens. Après je conçoit que il n'y a pas vraiment de couple de points associés...

C'est vrai que K n'étant pas un tableau de nombre c'est plus complexe..

Au final, j'aimerais tracer chacune des courbes lambda=f(Re) pour K fixé, en indiquant le K en question à chacune des courbes.
clement2406 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 20h29   #29
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 589
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 589
Points : 936
Points : 936
Essaye :
Code :
1
2
3
4
5
6
7
8
figure;
for i=1:length(1:10:10^2)
    ids = i+[0:length(1:10:10^2):length(resultats(1,:))];
    plot(resultats(1,ids),resultats(2,ids));
    hold on
    valeurs_K = [1:10:10^2]*K;
    text(resultats(1,ids(end)),8,['\leftarrow' num2str(valeurs_K(i)) ],'HorizontalAlignment','left');
end
Tu vois l'idée?
__________________
Bientôt 10 ans sur DVP!
Matlab 7.9.1.705 R2009b SP1 | XP SP3
Pas de question technique par MP, Merci
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 21h38   #30
clement2406
Invité de passage
 
Homme Clement
Étudiant
Inscription : janvier 2013
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Clement
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2013
Messages : 17
Points : 0
Points : 0
Oui tu créer successivement chacune des courbes et tu affiches ensuite une flèche sur un point de chacune c'est ça ?


Mais je n'arrive pas à l'appliquer... Je suis dessus depuis une heure et je n'arrive pas à faire fonctionner ce code...


Code :
1
2
3
4
??? Index exceeds matrix dimensions.

Error in ==> Abaque_turbulent at 46
    plot(resultats(1,ids),resultats(2,ids));
clement2406 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 11h41   #31
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 589
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 589
Points : 936
Points : 936
Eh ouais sans Matlab pour vérifier je tape n'importe quoi
Code :
1
2
ids = i+[0:length(1:10:10^2):(length(resultats(1,:))-length(1:10:10^2))];
Faut bien choisir les indices!
__________________
Bientôt 10 ans sur DVP!
Matlab 7.9.1.705 R2009b SP1 | XP SP3
Pas de question technique par MP, Merci
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 23h27   #32
clement2406
Invité de passage
 
Homme Clement
Étudiant
Inscription : janvier 2013
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Clement
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2013
Messages : 17
Points : 0
Points : 0
Le graphique obtenue maintenant à partir de ton code est superbe, c'est exactement ce que je veux; sauf qu'il y a des traits "parasites" à partir de de l'origine dont je ne comprend pas bien l'origine (justement).

http://img442.imageshack.us/img442/111/abaque.jpg

Il me reste plus qu'a mettre les flèches indiquant les valeurs de K, ou un axe sur la droite.
clement2406 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 00h20   #33
Winjerome
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 5 195
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : septembre 2009
Messages : 5 195
Points : 12 732
Points : 12 732
Bonsoir,

Une autre solution sans boucle :
Code :
1
2
3
4
5
x = reshape(resultats(1,:) , 10,[]);
y = reshape(resultats(2,:) , 10,[]);
plot(x.' , y.' ,'-*')
valeurs_K = (1:10:10^2)*K;
text(x(:,10),y(:,10) ,num2str(valeurs_K(:), '\\leftarrow %.2e')) % 'HorizontalAlignment','left' par défaut normalement;
(*) J'ai mis 10 au lieu de end pour l'instant car les valeurs de x et y pour des indices de colonnes supérieurs sont toutes nulles (d'où les traits vers l'origine). Le calcul est sûrement à revoir.
__________________
Débutant en MATLAB ? Vous voulez faire une Interface Graphique ? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur ? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 18h44   #34
clement2406
Invité de passage
 
Homme Clement
Étudiant
Inscription : janvier 2013
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Clement
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2013
Messages : 17
Points : 0
Points : 0
Voilà, j'ai enfin terminé mon abaque

Mais je n'aurais clairement jamais réussis sans votre aide. Un très grand merci à vous FLB en particulier, Winjerome et Dut.

Encore merci, continué à aider ainsi les gens, c'est vraiment super de votre part.
clement2406 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h56.


 
 
 
 
Partenaires

Hébergement Web