[Matlab] Croiser deux ensembles de valeur

Fermé
Helene - 21 janv. 2016 à 12:34
Timmydu26 Messages postés 80 Date d'inscription mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 - 1 févr. 2016 à 11:36
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

Timmydu26 Messages postés 80 Date d'inscription mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 30
22 janv. 2016 à 11:57
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
Timmydu26 Messages postés 80 Date d'inscription mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 30
22 janv. 2016 à 14:08
En relisant, il y a une petite erreur sur le if il faut inverser le signe > en < sinon ça ne marcheras pas ^^
0
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
Timmydu26 Messages postés 80 Date d'inscription mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 30
1 févr. 2016 à 11:36
Ta solution est bien aussi! tu utilise moins de variables, elle est très bien.

Cordialement.
0