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 :

Retourner les valeurs d'un vecteur en fonction du weekend et jour semaine


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Retourner les valeurs d'un vecteur en fonction du weekend et jour semaine
    Bonjour à Tous,

    Petit soucis sur Matlab, si quelqu'un peu m'aider ce serait super !!! J'ai une matrice 2xn. Dans le première colonne j'ai des dates (en datenum) et dans la seconde colonne des prix sur une période (3 mois par exemple). Les dates représentent des relevés de prix chaque jour à chaque heure (soit 24 prix par jours). Je souhaiterai calculer :
    -la moyenne des prix (sur 3 mois) entre 8h du matin et 20h pour les jours de la semaine
    - la moyenne des prix (sur 3 mois) entre 8h du matin et 20h pour les weekend
    -la moyenne des prix (sur 3 mois) de 20h à 8h du matin pour les jours de la semaine
    -la moyenne des prix (sur 3 mois) de 20h à 8h du matin les weekend

    J'ai donc besoin de 4 valeurs en sortie.

    J'ai commencé à faire une petite fonction sur matlab via weekday mais je n'arrive pas à ce qu'il faut.


    Merci de votre aide
    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
     
    function[Y]=RepereJour(Date_Prix)
     
    %Date_Prix est ma matrice de date (colonel) et de prix(colone2)
    B=Date_Prix(:,1);
    C=weekday(B);
     
    if C==1 && C==7 % pour les weekends 
     
        D=Date_Prix(:,2);  
        Off_Peak_Jour=D(1:8);
        Off_Peak_Nuit=D(21:24);
        Off_Peak=[Off_Peak_Jour;Off_Peak_Nuit];
        Peak=D(9:21);
        Moy_Off_Peak=mean(Off_Peak);
        Moy_Peak=mean(Peak);  
        Y1=[Moy_Off_Peak;Moy_Peak];
     
    else  
        D=Date_Prix(:,2);  
        Off_Peak_Jour=D(1:8);
        Off_Peak_Nuit=D(21:24);
        Off_Peak=[Off_Peak_Jour;Off_Peak_Nuit];
        Peak=D(9:21);
        Moy_Off_Peak=mean(Off_Peak);
        Moy_Peak=mean(Peak); 
        Y2=[Moy_Off_Peak;Moy_Peak];
     
    end
    Y=[Y1 Y2];
     
    end

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    Un peu de code à étudier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    B = now+(0:15);
     
    C = weekday(B)
     
    C==1
     
    C==7
     
    C==1 & C==7
     
    C==1 && C==7
    Voila ce que cela renvoi :
    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
    C =
     
         1     2     3     4     5     6     7     1     2     3     4     5     6     7     1     2
     
     
    ans =
     
         1     0     0     0     0     0     0     1     0     0     0     0     0     0     1     0
     
     
    ans =
     
         0     0     0     0     0     0     1     0     0     0     0     0     0     1     0     0
     
     
    ans =
     
         0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     
    Operands to the || and && operators must be convertible to logical scalar values.
     
    Error in untitled (line 11)
    C==1 && C==7
    Il faudra donc utiliser une boucle for-end et changer la condition && pour résoudre cet exercice.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C=weekday(B); te renvoie un vecteur d'autant de données que B, et vérifier if C==1 && C==7 revient à vérifier : si tous les jours sont des samedis ET des dimanches.
    Déjà à la fois samedi et dimanche est impossible, et toi tu veux les données à la fois de la semaine et du week-end pour effectuer différents calculs et non pas l'une ou l'autre série de données. Ta structure de if/else/end actuelle n'est donc pas non plus bonne.

    On va commencer par séparer les données semaine / week-end :
    un jour de week-end est un samedi OU un dimanche => durant_week_end = C==1 | C==7;.
    durant_week_end est ici un vecteur logique de même taille que C avec des valeurs vraies "1" lorsque les jours correspondants sont des samedis ou dimanches, et "0" pour des jours de semaine.

    Il nous reste à déterminer si les données sont entre 8h du matin et 20h ou non. Nous pouvons procéder avec datevec qui va récupérer les heures comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [~, ~, ~, heures, ~, ~] = datevec( Date_Prix(:,1) );
    Puis de la même façon que durant_week_end, avoir un vecteur logique ayant des valeurs vraies pour des heures dans cet intervalle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entre_8h_20h = 8<=heures & heures<=20;
    Maintenant nous pouvons combiner ces deux vecteurs logiques pour avoir les données que nous voulons : ceci en utilisant l'indexage logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    D_week_end_entre_8h_20h = Date_Prix( durant_week_end &  entre_8h_20h, 2);
    D_semaine_entre_8h_20h  = Date_Prix(~durant_week_end &  entre_8h_20h, 2);
    D_week_end_entre_20h_8h = Date_Prix( durant_week_end & ~entre_8h_20h, 2);
    D_semaine_entre_20h_8h  = Date_Prix(~durant_week_end & ~entre_8h_20h, 2);
    Dernière modification par Invité ; 28/01/2015 à 16h11.

Discussions similaires

  1. Retourner les valeurs d'une JFrame avant sa destruction
    Par moomba dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 28/10/2013, 15h07
  2. Condition sur toutes les valeurs d'un vecteur
    Par Newenda dans le forum MATLAB
    Réponses: 2
    Dernier message: 11/06/2009, 16h50
  3. les valeurs d'un vecteur du Workspace
    Par berberat dans le forum Simulink
    Réponses: 1
    Dernier message: 26/05/2009, 21h11
  4. Réponses: 5
    Dernier message: 12/10/2007, 11h06
  5. [Système] Afficher les valeurs d'arguments d'une fonction
    Par EXPERMEGAS dans le forum Langage
    Réponses: 2
    Dernier message: 07/09/2007, 12h56

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