IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Recupérer des valeurs calculées dans une boucle


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut Recupérer des valeurs calculées dans une boucle
    Salut tous
    j'ai un petit programme qui calcul l'erreur t=max(abs(b-u)) où:

    b:c'est un vecteur donné de taille (n)
    et u: c'est vecteur de taille (n) à calculer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     t[];
      k=1;
     
    for i = 1:n
        for j = 1:n
     
            u = c(i,j) * m(j+1) ;
     
     
     
    %j'obtien un vecteur ude taille (n) aussi
     
    %t(k): l'erreur  que je la stocke  à chaque itération
     
        t(k) = Max (abs(b-u));
     
         k=k+1;
     
        end 
    end
    à la fin j'obtien mon vecteur t(k)

    Ma question est ,maintenat si je veux ploter plot(b,u) qui corespond à t(2) ou t(5) ou... par exemple .
    je ne sais pas comment je peux recupérer le 'u' qui corespond à
    t(voulu).
    pour 'b' y a pas de prblème comme c'est toujours le meme

    Aidez moi SVP:
    Merci d'avance .

  2. #2
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Par défaut
    Hello,

    voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        [t(k), iu] = Max (abs(b-u));
        tu(k) = u(iu);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Par défaut
    D'après ce que j'ai compris, il faut garder en mémoire n² vecteurs u et n² valeurs t(k). Tu peux utiliser une cell-array :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    M = cell(n*n,2);
    t[];
    k=1;
    for i = 1:n
    	for j = 1:n
    		u = c(i,j) * m(j+1) ;
    		M{(i-1)*n+j,1} = u;
    		t(k) = Max (abs(b-u));
    		M{(i-1)*n+j,2} = t(k);
         		k=k+1;
        	end 
    end

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Un tableau de cellules ne parait pas nécessaire puisqu'il veut juste stocker 1 vecteur (t) et un tableau de vecteurs (u)
    Par contre il est vrai que k peut être déduit directement de i et j comme le montre sandrillon.
    Pourquoi ne fais-tu pas pour u la même chose que pour t ?
    Sinon ceci :
    est soit une faute de frappe, soit ne veux rien dire.
    Et Max pourquoi est-il avec une majuscule ? C'est une fonction à toi ?
    Si oui c'est dangereux car trop proche du nom de la fonction MATLAB, sinon il faut enlever la majuscule.

    Donc je dirais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %pré-allocations :
    t = zeros(1,n*n);
    u=zeros(n,n*n);%a voir pour le sens lignes/colonnes peut-être mettre zeros(n*n,n) et changer aussi en-dessous dans ce cas
    for i = 1:n
    	for j = 1:n
    		idx = (i-1)*n+j;
    		u(:,idx) = c(i,j) * m(j+1) ;
    		t(idx) = Max (abs(b-u(:,idx)));
        	end 
    end

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Salut
    Merci pour vos réponse ,mais franchement j'ai rien pigé peut etre j'ai mal exprimé parce que l'indice de U n'est pas lié directement avec l'indice de ma boucle (c'est ce que vous avez compris)
    voila je reformule mon problème en propre:

    ce code sert à trouver une valeur "t" pour chaque ("lo" et "la" et "U" calculés) et le stocker dans un vecteur t(H)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    t=[];
    H=1;
     
    for i=1:(xx-1)
        for j=2:(yy-1)
     
            XX=xx/i;
            YY=yy/j;
     
            lo =xx/XX;
            la =yy/YY;
     
            % ICI JUSTE POUR MONTRER QUE "lo" et "la" SONT UTILISE APRES COMME DES
            % INDICE DANS D'AUTRES CALCUL
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            r=[];
            k=1;
            for  i = 1:lo ;
                for j = 0:la ;
     
                    r(k)=C(end-j+i);
                    k=k+1;
     
                end
            end
             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            A=r*2;
            U=(A*r);
     
            %JE STOCK A CHAQUE FOI "t" DANS MON VECTEUR "t(H)"
            t(H)= max(b-U)
     
            H=H+1;
     
     
        end
    end
    Vous voyez bien ici que à la fin de la boucle j'obtien mon vecteur t(H)=[t(1)t(2)...t(?)]
    c'est bien ce que je cherche

    b: c'est un vecteur donné il a la meme taille de U

    Maintenat ma question est la suivante:

    comme à chaque fois je stock "t" dans t(H),je souhaite aussi stocker pour chaque "t" trouvé, le vecteur U et aussi (lo et la)corespondant
    pour que en c'est jamais j'appel un 't' quelconque "t(5) par exemple " j'ai facilement et directement le U et (la et lo)corespondant (càd calculés dans la meme itération)
    Voila j'espere que j'ai été plus claire maintenat.

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Remarque préalable : je sais que ce n'est qu'un exemple mais tu utilises les compteurs i et j dans 2 boucles imbriquées : MATLAB ne va pas aimer.

    Bon dans un 1er temps pour faire simple utilise les tableaux de cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            U{H}=(A*r);
     
            t(H)= max(b-U{H})
    Pour H donné U{H} correspondra à t(H).

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    il m'affiche ce message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
    est c'est normal
    la taille de vecteur U est différente à la taille de t(H)??

  8. #8
    Membre éprouvé
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Par défaut
    Pour voir la dimension des 2 variables fais ca en command window:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>whos U
    >>whos t(H)

  9. #9
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Le message c'est bien, la ligne à laquelle il est associé c'est beaucoup mieux

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Le message c'est bien, la ligne à laquelle il est associé c'est beaucoup mieux
    je suis désolé mais j'ai rien compris

  11. #11
    Membre éprouvé
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Par défaut
    Citation Envoyé par Medoou Voir le message
    je suis désolé mais j'ai rien compris
    L'erreur veux dire que la taille de A et B doit etre le meme ca veut dire ton message d'erreur.

    In an assignment A(I) = B, the number of elements in B and
    I must be the same.
    Donc en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>whos(A)
    >>whos(B)
    >>size(A)
    >>size(B)
    La taille doit etre la meme c'est la source de ton erreur ca veut dire caro

  12. #12
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Non ce que veut dire Caro-Line c'est qu'avec le message que tu as donné on ne sait pas de quelle ligne vient l'erreur.
    Je souhaiterais donc, dans le but de t'aider, que tu nous dise quelle ligne de ton code provoque le message d'erreur.

    Sans cela nous ne pouvaons t'aider.

    Enfin sinon va toujours voir la qui parle de cette erreur :
    In an assignment A(I) = B, the number of elements in B and I must be the same.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    apparament c'est pas claire pour toi, essaye de regarder un peux avant.

    mes vecteurs U et t(H) ils ont bien la taille que je cherche ,ici ya pas de probleme ,

    Moi je cherche une méthode pour stocker U et lo et la à chaque fois que je stock t dans t(H) c'est tous
    C'est pas un problème de taille ou de whos ...???

    la question: n'existe-t-il pas une autre méthode pour faire ça .
    et si la taille de mes vecteur ça vous interesse?????????????????????? .
    alors U--> (1,2)
    t--->(1,10)

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    ça sert à rien de vérifier la taille de deux vecteurs c'est tout à fait différente

    U: c'est un vecteur qui a exactement la taille de ''b''
    t(H): c'est juste un vecteur dans lequel je stock mes t donc sa taille ça dépend de nombre d'itération .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/08/2013, 18h36
  2. insérer des valeurs à partir d'une boucle automatique
    Par buhrne dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/12/2007, 16h52
  3. Affichage des valeurs disponibles dans une zone de liste déroulante
    Par azerty dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/06/2007, 12h29
  4. Réponses: 5
    Dernier message: 30/05/2007, 18h08
  5. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo