[Matlab] Croiser deux ensembles de valeur

Helene -  
Timmydu26 Messages postés 85 Statut Membre -
Bonjour,
.
Je suis sous Matlab R_2014b.
J'ai deux ensembles de valeurs : a [10;20;10] et b [30;30]
Je cherche à associer ces deux vecteurs pour obtenir c=[10;30;20;30;10].
J'ai essayé en vecteurs mais vu ce que j'attends ce n'est pas logique (en plus de pas marcher), j'ai essayé en matrice associé à une boucle for mais cela ne fonctionne pas.
.
.
Il se trouve que dans mon programme, le nombres de valeurs dans a et b ne seront pas toujours de 3 et 2.
C'est pourquoi je cherche à faire une association qui prenne en compte ce détail.
.
.
Précisément je cherche à obtenir le résultat suivant :
Pour a de 1 à x
Pour b de 1 à y
Je veux c = [a(1);b(1);a(2);b(2);....;a(x);b(x)]
.
Sachant que j'aurais toujours x = y+1

Merci d'avance pour votre aide. :)

1 réponse

  1. Timmydu26 Messages postés 85 Statut Membre 30
     
    suffit d'une boucle for a mon avis...

    % Initialisation des indices pour récuperer les valeurs des vecteurs A et B
    indice_a =1;
    indice_b =1;
    % Creation du vecteur qui contiendras les valeurs fusionnés
    resultat_fusion = zeros(size(A,1)+size(B,1))
    % Attention avec le size, c'est peut etre un 2 a la place du 1, ça dépend si tu as déclarer tes vecteurs en ligne ou en colonne...
    % Fusion des vecteurs
    for i = 1:(size(A,1)+size(B,1))
    if (indice_b > indice_a)
    resultat_fusion(i) = B(indice_b);
    indice_b = indice_b + 1;
    else
    resultat_fusion(i) = A(indice_a);
    indice_a = indice_a + 1;
    end
    end

    Apres je n'ai pas Matlab sous la main pour tester mais l'algo me plait.
    tiens moi au courant si cela marche ou si tu as des questions.

    Cordialement.
    0
    1. Timmydu26 Messages postés 85 Statut Membre 30
       
      En relisant, il y a une petite erreur sur le if il faut inverser le signe > en < sinon ça ne marcheras pas ^^
      0
    2. Helene
       
      Bonjour,

      Merci pour votre solution. Je n'ai pas eu l'occasion de la tester, j'ai fini par trouver une solution. Certes pas élégante, mais fonctionnelle :

      k=1;
      for i = 1:ndemarrage -1
      trajet(k) = tdemarrage(i);
      k = k +1;
      trajet(k) = tpause(i);
      k = k +1;
      end
      trajet(k) = tdemarrage(ndemarrage);

      Je vais quand même essayé votre solution car elle ressemble à ce que j'avais en tête initialement.

      Merci beaucoup
      0
    3. Timmydu26 Messages postés 85 Statut Membre 30
       
      Ta solution est bien aussi! tu utilise moins de variables, elle est très bien.

      Cordialement.
      0