Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

matlab



  1. #1
    luce

    matlab


    ------

    bonsoir,

    quelqu'un pourrait il m'aider pour un éditer un programme matlab.
    voila, en fait je dois rendre un programme mais j'ai une erreur ou plutot je n'arrive pas à incrémenter chaque valeur de Y dans une matrice.
    Si vous savez cmt, cela m'aiderait beaucoup.
    Voici le programme

    Merci

    %%%Programme permettant de visualiser l'évolution du pH en fonction d'une
    %%%variation de volume d'acide ou de base%%%
    function Y=ph2(Vamin,Vamax,Vbmin,Vbmax, Ca,Cb)
    Va= linspace (Vamin,Vamax,10)
    Vb= linspace(Vbmin,Vbmax,10)
    nva = length (Va)
    nvb = length (Vb)
    for i = (1:nva)
    for j = (1:nvb)
    %%%Calcul de la concentration en ions Na+ %%%
    Na=(Ca*Va)/(Va+Vb)
    %%%Calcul de la concentration en ions Cl- %%%%
    Cl=(Cb*Vb)/(Va+Vb)
    Kw=10^-14
    if(Na-Cl)>0
    H=Kw/(Na-Cl)
    end
    if(Na-Cl)<0
    H=abs(Na-Cl)
    end
    if(Na-Cl)==0
    H=10^-7
    end
    Y=-log10(H)
    Y = (n:m)
    end
    end
    end
    %%%Mise en page du graphique%%%
    graphe = input ('voulez vous le graphe de Va-Y (1) ou le graphe de Vb-Y (2) ? ')
    if (graphe== 1);
    plot(Va,Y)
    grid on
    xlabel ('volume d acide')
    ylabel ('pH')
    title ('Evolution du ph en fonction du volume d acide')
    else
    plot (Vb,Y)
    grid on
    xlabel ('volume de base')
    ylabel ('pH')
    title ('Evolution du ph en fonction du volume de base')
    end

    -----

  2. Publicité
  3. #2
    pat7111

    Re : matlab

    Citation Envoyé par luce
    incrémenter chaque valeur de Y dans une matrice.
    qu'entends-tu par là ? additioner le i eme élément avec les précédents ? ajouter quelque chose à chaque élément ?

    Citation Envoyé par luce
    Y = (n:m)
    Ca ne passe pas parce que n et m ne sont pas définis. En tout cas, si cette opération passait, son résultat écraserait celle de la ligne précédente.

    Que veux-tu faire ?

    Une remarque générale, matlab calcule vectoriellement. On peut en général éviter des doubles boucle for

    Peux-tu expliquer ton algo littéralement sans le formalisme Matlab
    Plutôt appliquer son intelligence à des conneries que sa connerie à des choses intelligentes...

  4. #3
    luce

    Re : matlab

    oui au fait, n et m ne sont pas bon, il faut les remplacer par i et j mais meme comme ca cela ne marchepas.

    en fait Y devrait etre calculer pour toute valeur de va et vb de position i et j
    mais apparament ca va pas
    je saispas pour quoi???

  5. #4
    sai

    Re : matlab

    bon, apres avoir fait tourner ta fonction, il s'avere que les valeur de Va, Vb, Na, Cl, Kw H et Y ne varient jamais.
    Le probleme vient sans doute de la.
    etant donné que Va et Vb sont des tableaux, j'imagine que les indices i et j sont la pour faire varier les valeurs de ces variables. donc autant les utiliser...
    Quand tu met Y= (i:j), tu est consciente que ca crée un tabelau rempli des valeurs entre i et j??

    Pour ma part, je ne sais pas si c'est bien ca, mais je verrai un truc dans ce gout la:
    %%%Programme permettant de visualiser l'évolution du pH en fonction d'une
    %%%variation de volume d'acide ou de base%%%
    function Y=ph2(Vamin,Vamax,Vbmin,Vbmax, Ca,Cb)
    Va= linspace (Vamin,Vamax,10)
    Vb= linspace(Vbmin,Vbmax,10)
    nva = length (Va);
    nvb = length (Vb);
    for i = (1:nva)
    for j = (1:nvb)
    %%%Calcul de la concentration en ions Na+ %%%
    Na=(Ca*Va(i))/(Va(i)+Vb(j));
    %%%Calcul de la concentration en ions Cl- %%%%
    Cl=(Cb*Vb(j))/(Va(i)+Vb(j));
    Kw=10^-14;
    if(Na-Cl)>0
    H=Kw/(Na-Cl);
    end
    if(Na-Cl)<0
    H=abs(Na-Cl);
    end
    if(Na-Cl)==0
    H=10^-7;
    end
    Y=-log10(H);
    X(i,j)=Y;
    end
    end
    end
    %%%Mise en page du graphique%%%
    graphe = input ('voulez vous le graphe de Va-Y (1) ou le graphe de Vb-Y (2) ? ');
    if (graphe== 1);
    plot(Va,X);
    grid on;
    xlabel ('volume d acide');
    ylabel ('pH');
    title ('Evolution du ph en fonction du volume d acide');
    else
    plot (Vb,X);
    grid on;
    xlabel ('volume de base');
    ylabel ('pH');
    title ('Evolution du ph en fonction du volume de base');
    end
    au final j'obtiens bien des courbes avec le pH qui augmente en fonction du volume d'acide. mais j'obtiens la meme pour le volume de base... d'ou probleme. donc faut encore bosser un peu!
    Lao Tseu a dit:" quand la riviere coule; les rochers se lavent" .... comprenne qui pourra!

  6. A voir en vidéo sur Futura
  7. #5
    robert et ses amis

    Re : matlab

    comme pat7111 l'a dit, on peut souvent se passer d'une boucle avec matlab quand on veut faire des opérations termes à termes sur des veteurs (ou matrices d'ailleur).
    je vais pas réécrire le prog à la sauce matlab, mais voilà un exemple...

    j'ai 2 vecteurs de même taille "A" et "B", je veux créér "C" de même taille tel que pour tout i, C(i)=A(i)/B(i). rien de plus simple avec matlab, j'écris uniquement "C=A./B".
    le point dans "./" est essentiel, c'est lui qui indique que la division est à faire terme à terme.

    de la même manière, la fonction "log" de matlab marche aussi pour les vecteurs (et pour les matrices) et rend un vecteur (ou matrice) de même taille et dont chaque composante est le log de la composante du vecteur d'entré.

    en clair, tu peux largement simplifier ton script.

  8. #6
    luce

    Re : matlab

    bonsoir,

    le problème est qu'il devrait calculer 10 valeurs de ph mais il en calcul beaucoup plus.
    de plus, les courbes me semblent totalement erroné.
    c'est ma première année avec matlab et comme je fais la passerrelle ingénieur industriel je n'ai pas eu le cour de deuxième d'ou beaucoup de retard et de lacunes.


    merci

  9. Publicité
  10. #7
    robert et ses amis

    Re : matlab

    bon, c'est pas pédagogique, mais voilà comment moi je taperais ton truc :
    %%%Programme permettant de visualiser l'évolution du pH en fonction d'une
    %%%variation de volume d'acide ou de base%%%
    function H=ph(Vamin,Vamax,Vbmin,Vbmax, Ca,Cb)
    Npt=10;
    Va= linspace (Vamin,Vamax,Npt);
    Vb= linspace(Vbmin,Vbmax,Npt);

    %%%Calcul de la concentration en ions Na+ %%%
    Na=(Ca*Va)./(Va+Vb);
    %%%Calcul de la concentration en ions Cl- %%%%
    Cl=(Cb*Vb)./(Va+Vb);
    Kw=10^-14;
    H=ones(size(Va))*1e-7;
    D=(Na-Cl);
    H(D>0)=Kw./D(D>0);
    H(D<0)=abs( D(D<0) );

    Y=-log10(H);

    %%%Mise en page du graphique%%%

    figure(1)
    plot(Va,Y)
    grid on
    xlabel ('volume d acide')
    ylabel ('pH')
    title ('Evolution du ph en fonction du volume d acide')

    figure(2)
    plot (Vb,Y)
    grid on
    xlabel ('volume de base')
    ylabel ('pH')
    title ('Evolution du ph en fonction du volume de base')
    (note qu'il n'y a aucune boucle d'écrite)

    si tu as la moindre question sur la syntaxe, n'hésite pas à demander...

  11. #8
    luce

    Re : matlab

    Bonsoir,

    merci j'ai presque tout compris, les seules non comprises sont;

    H = ones (size(Va))*1e-7
    figure (1), à quoi sert (1)

    voila à part cela, c'est ok

    encore merci
    a+

  12. #9
    robert et ses amis

    Re : matlab

    " H = ones (size(Va))*1e-7 " : ones(n,m) crées une matrice de 1 de dimension n*m ; size(Va) donne le couple (n,m) qui est la dimension de la matrice Va. ici, H est donc de même taille que Va et toutes ses composantes sont à 1e-7.

    " figure(1) " : ça "ouvre" une fenêtre graphique dans laquelle s'affichera le prochain "plot". si tu tapes plot sans ça une seule fois, tout se passe pareil. mais ici, avec figure(2) on ouvre une deuxième fenêtre graphique dans laquelle s'affiche le plot suivant (sinon ton 1er plot disparait). au final, tu as 2 fenêtres au lieu d'une, chacune avec un graphique, et donc pas de choix à faire à chaque exécution. rien de bien nécessaire en somme, mais c'est comme ça que je fais d'habitude

    et toujours avec matlab, ne pas hésiter à taper "help commande" pour en savoir plus...

Discussions similaires

  1. matlab
    Par piksou dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 05/07/2007, 13h13
  2. matlab
    Par toujoursreal dans le forum Technologies
    Réponses: 0
    Dernier message: 21/05/2007, 15h20
  3. Matlab
    Par kary-tao dans le forum Électronique
    Réponses: 0
    Dernier message: 19/01/2007, 19h53
  4. [MatLab] Sb2Sl => Matlab classique = pb intégration.
    Par Zangdar dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 03/08/2005, 21h02
  5. Matlab
    Par scoubidouc dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 22/07/2005, 09h45