[Matlab] Croiser deux ensembles de valeur [Fermé]

Signaler
-
Messages postés
80
Date d'inscription
mercredi 29 avril 2015
Statut
Membre
Dernière intervention
17 juin 2016
-
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

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

Cordialement.