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 :

vecteurs et interpolation


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut vecteurs et interpolation
    bonjour a vous,

    j'ai un vecteur , P1, associé a un vecteur temps T1 tel que T1 a 760000 valeurs environ
    je souhaiterais construire un vecteur P2 qui serais associé au vecteur temps T2 tel que T2=1:0.1:3380

    plus concretement j'aimerais construire mon vecteur P2 avec les valeurs de P1 en en prenant une a chaque interval de temps defini

    T2 comprenant 33800 valeurs il faudrai que je remplisse P2(que je veux avec un nombre de valeurs egale a celles de T2) en prenant une valeur de P1 toute les 760000/33800 (environ 22.5) (exact?)

    j'ai essaye de mettre dans une boucle for : P2(i) = P1(22.5*i)
    mais sans succes

    on ma sugerre la fonction interp1 dans une boucle for, mais je ne vois pas trop comment

    pouvez-vous m'aider?

    merci

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Je ne vois pas bien l'intérêt d'une boucle ici.

    Avec INTERP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P2 = interp1(T1,P1,T2, 'linear');
    Duf

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par nibelhung Voir le message

    j'ai essaye de mettre dans une boucle for : P2(i) = P1(22.5*i)
    mais sans succes
    Si tu ne nous montres pas le code, on ne pourra pas te le corriger...

    Sinon, peut-être sans boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P2 = interp1(T1,P1,T2);
    non?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    merci de vos reponses rapides

    la solution que vous proposez marche en soi (enfin ca compile)
    mais je ne suis pas vraiment familié avec la fonction interp1 et je ne suis pas sur du resultat que cela doit avoir.

    en faisant un plot de (P2,T2) la courbe doit elle avoir la meme forme que (P1,T1)? car dans mon cas non....
    le vecteur P2 affiche la meme valeur tout le temps...

    je ne peux malheureusement pas vous envoyer mon code car il s'agit d'une application industrielle

    merci

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Quelles sont les bornes de T1? (min et Max)

    les donnes sont reparties de façon reguliere dans T1?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    T1: 0 a 3380659 avec un pas variable
    total des valeurs :760116

    remplacer 'linear' par 'cubic' ne change rien

    par contre en remplacant par 'spline' je m'approche du model initial

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Tu as T1 qui varie de 0 a 3380659, et T2 de 1 à 3380, c'est bien ce que tu souhaites faire? (une interpolation sur un intervalle beaucoup plus petit que l'intervalle initial?)

    Dans ce cas, pour les comparer, il faut tracer les valeur de P1 pour lesquelles T1 est entre 1 et 3380 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    plot(T1(T1>=1 & T1<=3380),P1(T1>=1 & T1<=3380))
    hold on
    plot(T2,P2,'r')

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    c'est vrai que ce n'est peut etre pas tres clair sur mon premier post

    ce que je voudrais faire, c'est remplir P2 avec 33800 valeurs (1:0.1:3380)
    et donc prendre ces 33800 valeurs sur P1(qui est un jeu de valeurs non reguliere allant de 0 a 432.78, avec un total de valeurs de 760116)

    donc en gros prendre 33800 valeurs dans les 760116 a interval regulier

    je ne veux pas tronquer T1 de 1 a 3380 , mais prendre 33800 valeurs de P1 et les afficher sur T2 (1:0.1:3380)

    je ne sais pas si je suis vraiment clair (desole dans ce cas la)

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je t'avoue que plus ça va plus je suis perdu

    On va reprendre du début :
    Pour tes données, est-ce que P1 dépend de T1 (c'est à dire que si on trace ces données, on aura T1 en abscisse et P1 en ordonnée)
    ou bien est-ce l'inverse : T1 dépend de P1 (c'est à dire que si on trace ces données, on aura P1 en abscisse et T1 en ordonnée)
    ?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    j'ai trouve la solution (et donc mon erreur)

    deja pour repondre a ta question, T1 en abscisse et P1 en ordonne

    le but etait de condense un jeu de valeur trop grand (P1, mesures effectuées suivant le vecteur temps T1, tel que 1:3380000 (760000 valeurs), il s'agit de milliseconde) sur un vecteur P2, en fonction d'un vecteur temps T2 (tel que 1:0.1:3380, ici c'est des secondes)

    en faisant P2=interp1(T1,P1,T2, 'spline') je ne savais pas que cela tronquai les valeurs de (P1,T1) entre 1:3380, ce qui me donnai des resultats bizarres
    vu que cela restait des millisecondes, donc j'avais juste la premiere partie de la courbe

    il fallait donc que je garde le meme referentiel de temps, a savoir des millisecondes, donc il fallait ecrire : P2=interp1(T1,P1,T2*1000, 'spline')

    je vous remercie quand meme pour votre bonne volonte
    et j'espere (meme si j'en doute lol) avoir ete un peu plus clair

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Nan c'est tout de suite plus clair... mais on pouvait difficilement deviner qu'il y avait un changement d'échelle entre les 2

    D'ou l'intérêt de donner un maximum d'information dès le départ.

Discussions similaires

  1. Interpolation de 2 vecteurs
    Par Acoustics dans le forum Fortran
    Réponses: 2
    Dernier message: 22/05/2015, 13h19
  2. interpolation sur vecteur x non monotone
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 6
    Dernier message: 16/01/2015, 16h10
  3. [Débutant] Interpolation de vecteurs de tailles différentes
    Par cleindorie dans le forum MATLAB
    Réponses: 10
    Dernier message: 24/09/2014, 23h27
  4. Réponses: 10
    Dernier message: 19/08/2009, 13h02
  5. matrices * vecteur
    Par delire8 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 07/09/2002, 15h15

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