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 :

subdivision d'un vecteur en des sous-vecteurs selon une somme de poids


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Expert sécurité informatique
    Inscrit en
    Novembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 3
    Par défaut subdivision d'un vecteur en des sous-vecteurs selon une somme de poids
    Bonjour

    Je suis débutante avec MATLAB et je serai reconnaissante si vous pouvez m'aider

    J'ai un vecteur v=[1 4 5 2 3 6] et un vecteur de poids associé à ce vecteur v : p=[12 4 10 8 4 10], pour dire que l'élément 1 par exemple a un poids égal à 12 et ainsi de suite. On a aussi un grand poids P=24.

    Ma question ici comment peut on subdiviser le vecteur v en des sous vecteurs selon que la somme des poids des éléments qui les composent ne dépasse pas la valeur P.

    Pour notre exemple, on commence à faire la somme des poids des éléments 1 et 4, on la trouve =16 <=P, alors on peut ajouter le poids de l'élément suivant qui est le 5, alors la somme sera 26 >P --> on s'arrete ici et on forme le premier sous vecteur 1-4.

    Puis on recommence le même travail avec les éléments restants de v : 5-2-3-6--> p(5)+p(2)=10+8=18<=P, on ajoute alors l'élément 3, on trouve la somme 18+p(3)=22<=P, on essaye d'ajouter p(6)--> on trouve la somme 32>P. on annule dans ce cas le dernier ajout pour obtenir comme résultat final 3 sous-vecteurs: 1-4; 5-2-3 et 6.

    Merci beaucoup d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Par défaut
    Bonjour,

    Il y a de très nombreuses façon de faire. Je propose ici deux pistes de réflexion:
    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
    p = [3 4 4 1 1 6 11 9 2 5 8]; 
    p_limit = 17;
     
    % Première façon
    p_count = 0;
    for ip= 1 : numel(p)    
        p_count = p_count + p(ip); 
        if p_count > p_limit
            fprintf('Valeur depassée pour l''indice %i\n',ip)
            p_count = p(ip);
        end
    end
     
    % Deuxième façon (que je préfère)
    csP = cumsum(p); 
    for ip = 1 : ceil(sum(p)/p_limit)
        id = find(csP < ip * p_limit,1,'last'); 
        fprintf('Valeur depassée après l''indice %i\n',id)
    end
    Mes propositions ne résolvent le problème qu'à 90%, je te laisse faire 10% restants

Discussions similaires

  1. Ajouter des sous titres dans une combo box
    Par Djaiffe dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/05/2018, 16h55
  2. Réponses: 4
    Dernier message: 09/03/2008, 15h36
  3. [VB2002] Inclure des sous-repertoires dans une installation
    Par pape0 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/09/2007, 17h48
  4. Réponses: 6
    Dernier message: 25/10/2006, 21h00
  5. Supprimer des sous-dossiers selon des critères
    Par Dertron dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 18/01/2006, 14h33

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