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 sur vecteur x non monotone


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut interpolation sur vecteur x non monotone
    salut tous,

    j'ai une question peut être un peu bête mais je me lance :
    -> comment programmer une interpolation (linéaire) dans le cas où l'axe des x n'est pas croissant ?

    imaginons que j'ai une double hystérésis expérimentale (deux "sorte de cercle" sur un axe x/y) avec 64 points et que je simule la même chose mais avec 567 points,
    -> si je veux regarder aux points expérimentaux "x" la valeur de ma simulation j'ai besoin de faire une interpolation.
    -> Et si après je veux faire l'inverse avoir la valeur des expériences aux positions où les x ont été calculé ?

    c'est pas hyper facile je trouve dans le cas où x n'est pas monotone ? surtout que je peux avoir plusieurs boucles..

    sauriez vous comment faire ça proprement pour que ça marche à coup sûr ?

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonsoir,
    Je suis pas sur de comprendre:
    - Si ton argument est réel, tu peux réordonner x par ordre croissant
    - Si tu interpole une fonction sur le plan (x,y), plus de problèmes non plus

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    en fait je me rends compte que je n'ai pas été précis :

    1-j'ai des résultats expérimentaux qui sont données par les vecteurs "x" et "y":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x=[0 1 2 3 4    5  6  5 4.5  3.5   2   1   0  -2  -1.5 -0.5 0 1 2.5 3.5 5  6];
    y=[0 1 2 3 3.3 3.5 4  2   1  -0.5 -1 -1.5 -2 -2.5 -1.3   0  1 2  3  3.5 4  4.4];
    2-ensuite j'ai un programme extérieur (sur lequel je n'ai pas le controle) qui me donne des résultats mais pas pour les mêmes abscisses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xx=[0 0.5 1.5 2.5 3 3.5 4.5 5 5.5 6 5.7 4.7 4.5 4 3.5 3 1.5 1 0.5 -1 -2 -1.7 -1.5 -1 -0.5 -0.25 0.5 1 1.5 3 3.5 4 5.5 6];
    yy=[0 0.5 1.5 2.5 3 3.1 3.4 3.5 3.7 4 3 1.5 1 0 -0.5 -0.7 -1.2 -1.5 -1.7 -2.2 -2.5 -2 -1.3 -0.9 0   0.2 1.5 2 2.5 3.2 3.5 3.7 4.2 4.4];
    ce que je voudrais c'est estimer les valeur numériques "yy" aux points d'abscisses expérimentaux "x" afin de comparer les résultats numériques aux points expérimentaux

    Dans la majorité des cas j'ai plus de résultats numériques que expérimentaux mais il peut être possible également que j'en ai moins comme ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xxx=[0 3.3 4.1  5   4  0 -1 -1.1 -0.4 3   5.5 6];
    yyy=[0 3.3 3.33 3.5 0 -2 -2 -1.1 0.8 3.3 4.3 4.3];
    Je galère pas mal pour interpoler ce type de truc

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    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 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    d'abord ta première demande (interpolation) : impossible
    la notion d'interpolation n'a pas de sens sur une fonction pouvant prendre deux valeurs différence pour le même paramètre d'entrée !
    de plus les fonction d'interpolation sous matlab nécessitent que les données soit classées de façon croissante (mais boin c'est pas vraiment un pb ca)

    sinon pour en revenir à ton problème : vérifier que ton process suit bien l'hystérésis attendu
    je te conseille une approche graphique (simple et efficace)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     figure
    plot(x,y,'b-');hold on
    plot(xx,yy,'r.')
    résultat : c'est pas mal, mais pas parfait
    Nom : Capture.JPG
Affichages : 863
Taille : 46,5 Ko

    après si tu veux quantifier un peu mieux, il faut calculer les distances entre la courbe de référence et les points

    Fabien

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    salut Fab,

    en fait tu as bien saisi ce que je veux faire. J'ai la courbe rouge qui est des données expérimentales et j'ai la courbe bleu qui est une simulation et ce que je veux faire c'est calculer pour chaque point expérimental la distance avec la courbe numérique correspondante et minimiser cet écart (avec fminsearch).

    Le soucis est que je dois être capable de comparer mes points expérimentaux et numériques aux mêmes abscisses et c'est cette étape qui me pose problème. -> Je suis d'accord avec toi pour dire que je ne peux pas faire une interpolation au sens classique dans ces conditions
    -> mais par contre je dois pouvoir trouver une solution qui me permet de faire une sorte "d'interpolation maison" par couple de point (en regardant la vitesse moyenne entre deux point exp et en appliquant ce rapport ...Etc)

    Je vais réfléchir à comment faire ceci manuellement mais en tout cas tu me confirmes bien qu'avec les fonction matlab préprogrammées on ne peut pas faire ceci ?

  6. #6
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    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 882
    Points : 3 432
    Points
    3 432
    Par défaut
    en effet les fonctions telles que interp et fminsearch attendent une fonction (c'est à dire qu'a un x correspond un y : y = f(x)), ce que tu n'as pas
    et ce n'est pas un problème de monotonie, mais simplement que dans ton cas, à un x correspond plusieurs y possibles

    cependant de manière général, la notion d’hystérésis est déterministe, mais pas en fonction de x seulement : il lui faut également la précédente valeur de x (xprec)
    bref, tu dois pouvoir écrire ton hystérésis sous la forme d'une fonction y = f(x,xprec) ) soit Y = F(X, [X0 X(1:end-1]) = F(X) ou X et Y sont des vecteurs rangé dans l'ordre d'apparition temporel

    et là, lorsque tu aura réussi à le faire, tu devrais pouvoir utiliser les fonctions interp1, fminsearch et cie, calculer une distance euclidienne et tout ce que tu veux

    Fabien

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci pour ton aide.

    En fait j'ai dis une hystérésis car ça parle un peu près à tout le monde et ma courbe à "une tronche" qui ressemble un peu a ça mais en fait c'est un système beaucoup plus complexe (comportement d'un matériau un peu particulier-->je ne rentre pas dans les détails car ça peut être très compliqué et long).

    Pour avoir la courbe bleu j'utilise un logiciel externe sur lequel je n'ai pas "la main" je peux juste modifier les paramètres d'entrée et il me donne une courbe résultats (avec des x non nécessairement uniques) et je dois me débrouiller avec ça. Je pense que je peux arriver à faire un algo en regardant quelles sont les points expérimentaux qui encadre un point numérique et faire des interpolations de proche en proche jusqu'à ce que j'ai parcouru tous les points expérimentaux. Je vais tester ça

    merci en tout cas pour ton aide

    ps: aussi, les points que j'ai donné c'est à titre d'exemple car en réalité j'ai des courbes beaucoup discrétisés avec beaucoup plus de boucles mais si j'arrive à faire ce que je veux sur cet exemple simple je pense que sur le cas complexe ça fonctionnera

Discussions similaires

  1. Byte de sortie sur port parallele non maitrisé
    Par BECHE dans le forum Web & réseau
    Réponses: 15
    Dernier message: 10/03/2006, 23h06
  2. Interpolation sur une polyline avec tangentes
    Par Pedro dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 12/01/2006, 23h10
  3. [FLASH 8] Interpolations sur textes dynamiques
    Par hedgehog dans le forum Flash
    Réponses: 3
    Dernier message: 16/11/2005, 13h12
  4. select sur premier caractère non alphabétique
    Par blasted dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/10/2005, 11h58
  5. Afficher une texture "pleine" sur un support non c
    Par Mastero dans le forum DirectX
    Réponses: 20
    Dernier message: 27/01/2005, 13h28

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