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 :

Interpolation de vecteurs de tailles différentes [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 17
    Points
    17
    Par défaut Interpolation de vecteurs de tailles différentes
    Bonjour à tous,

    Je vous explique mon problème : je voudrais avoir des valeurs pour toutes les heures de la journée, or, je n'ai que les valeurs toutes les trois heures. Je voudrais donc interpoler.

    Notons le vecteur colonne X qui a 8 valeurs. La valeur d'indice 1 correspond à 00h, l'indice 2 à 3h etc...
    Si je veux avoir non plus 8 mais 24 valeurs pour X, comment faire ?

    J'ai créé un vecteur colonne Y de 24 valeurs, mais comment interpoler par pas de deux mon vecteur X ? A chaque fois cela ne fonctionne pas parce que X et Y ne sont pas de la même taille, ce que je comprends mais du coup je ne vois vraiment pas comment faire...

    Pouvez-vous m'aider s'il vous plaît ?
    Merci.

    Cleindorie

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 881
    Points : 3 429
    Points
    3 429
    Par défaut
    soit Y ton vecteur de 8 valeurs correspondant à X (8 valeur aussi)
    alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X24 = 0:23;
    Y24 = interp1(X,Y,X24);
    et ouala

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Alors j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X=valeurs(1:8); %ce sont mes 8 valeurs
    Y=Y; % un vecteur colonne qui va de 1 à 8
    X24 = 0:23;
    Y24 = interp1(X,Y,X24);
    J'ai le message d'erreur suivant :
    ??? Error using ==> interp1 at 261
    The values of X should be distinct.
    
    Error in ==> interpol at 4
    Y24 = interp1(X,Y,X24);
    Mes valeurs sont pourtant bien distinctes puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     X = 8,71
           3,67
          17,01
           83,61
          83,61
          157,60
          99,25
          46,69
    et (en colonne)

  4. #4
    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
    Citation Envoyé par cleindorie Voir le message
    Mes valeurs sont pourtant bien distinctes puisque
    Es-tu bien sûr ?
    Citation Envoyé par cleindorie Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     X = 8,71
           3,67
          17,01
           83,61
          83,61
          157,60
          99,25
          46,69
    Et je présume que la virgule n'est pas utilisée comme séparateur décimal dans MATLAB.
    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)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Bonjour DUT, merci pour ta réponse, mais en ce qui concerne la virgule, c'est juste quand j'ai fait le copier-coller, il y a eu un petit bugg sinon dans matlab j'ai bien des "."
    J'ai bien deux valeurs de X identiques, mais ces résultats viennent d'un calcul expérimental donc je ne peux pas les changer. En plus, là je fais un échantillon sur 8 valeurs pour en avoir 24, mais en tout normalement j'ai 1440 valeurs à interpoler, donc il est possible qu'il y ait des doublons...
    J'ai essayé d'écrire un algorithme pour interpoler différemment mais là je suis complètement paumée, je n'arrive absolument pas à faire cette interpolation...

  6. #6
    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
    Ton problème concerne donc la prise en compte des doublons.

    Reviens au phénomène physique que tu mesures. Pourquoi y a-t-il deux valeurs distinctes de Y pour une même valeur de X ?
    Ces deux valeurs sont-elles "justes" ? L'une est-elle meilleure que l'autre ? Ou bien serait-il possible de calculer une valeur moyenne ?
    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)

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Je ne peux pas enlever les doublons, ils sont au contraire importants pour moi. Si j'ai deux valeurs de Y pour une même valeur de X c'est parce que Y représente le temps, donc si X est constant dans le temps, c'est normal. Mes valeurs de X sont déjà des moyennes, je ne peux vraiment pas enlever les doublons. Mais c'est juste pour cela que je ne peux pas faire d'interpolation ? dans ce cas, est-il possible d'utiliser une lookup table ou quelque chose de similaire ?

  8. #8
    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
    Si Y représente le temps, il faut inverser X et Y, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    X = [8.71 3.67 17.01 83.61 83.61 157.60 99.25 46.69];
     
    Y = [1 2 3  4 5 6 7 8 ];
     
    Yi = linspace(1, 8, 24);
     
    Xi = interp1(Y, X, Yi);
     
    figure
    plot(Y, X, 'b-o');
    hold on
    plot(Yi, Xi, 'r*');
    Images attachées Images attachées  
    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)

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Je suis désolée de t'embêter encore un peu DUT, c'est presque ça, mais pas tout à fait.
    Je t'explique :

    Ce que tu m'as proposé fonctionne mais j'ai quelque peu modifié pour avoir ce que je veux, seulement je ne sais pas si c'est correct.
    J'ai mis ton code, ce qui me donnait 24 valeurs de Y allant de 1 à 8. Mais moi je voulais des valeurs allant de 1 à 24, donc si je remplaçais Yi = linspace(1, 8, 24) par Yi = linspace(1, 24, 24) j'avais tout bon pour Yi mais pas pour X forcément, puisqu'il ne pouvait interpoler après la huitième valeur.
    J'ai donc remplacé Yi par Yi=[1:1:24]', après avoir lancé le programme pour garder les valeurs trouvées de Xi.
    Cela me donne une figure correcte aussi, alors c'est un peu du bidouillage mais ça fonctionne.
    Qu'en penses-tu ?

  10. #10
    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
    J'ai l'impression que tu t'embrouilles.

    Le vecteur de temps Y n'est pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Y = [1 2 3  4 5 6 7 8 ];
    mais, une fois exprimé en heures toutes les 3 heures :

    Et tu souhaites obtenir les valeurs toutes les heures de la journée :

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xi = interp1(Y, X, Yi, 'linear', 'extrap');
    Bien entendu, si tu ajoute au vecteur Y la valeur à minuit du jour suivant, l'extrapolation devient inutile.
    Images attachées Images attachées  
    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)

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup DUT. Tu as raison, je m'étais embrouillée, merci encore pour ton aide.

    A bientôt sur le forum.

    Cleindorie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de vecteurs de taille différentes
    Par Tonton Ricardo dans le forum MATLAB
    Réponses: 11
    Dernier message: 05/08/2008, 10h52
  2. Correspondance entre deux vecteurs de taille différente
    Par MisterK dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 31/03/2008, 18h07
  3. Réponses: 2
    Dernier message: 05/02/2008, 12h47
  4. Réponses: 4
    Dernier message: 05/05/2007, 20h12
  5. Réponses: 1
    Dernier message: 29/03/2007, 20h17

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