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 :

code optimisé pour interpolation


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 code optimisé pour interpolation
    Salut tous,

    je cherche à écrit un bout de code mais de manière optimisé sur matlab car j'aurais à utiliser ce bout de code très souvant.

    Contexte :

    1°) j'ai deux vecteurs qui sont stocké dans mon code : A1 et A2, il ont la même taille car A1 représente des abscisses et A2 les ordonnées correspondantes.

    2°) j'ai un scalaire (par exemple = 37) qui est forcement compris entre les valeurs qui se trouvent dans le vecteur A2 et je veux connaitre le A1 correspondant.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    A1=[1 2 3 4 5];
    A2=[10 20 30 40 50];
     
    for i=1:1:5
    scalaire(i)=37;
    %je fais donc une interpolation linéaire entre 30 et 40 pour connaitre le A1 %correspondant à la valeur de 3.5 et prendre le plus près des données %donnues
    index=??
    if (abs(A1(index))-A1reel)
    ...
    end
    end

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    Salut tous,


    2°) j'ai un scalaire (par exemple = 3.7) qui est forcement compris entre les valeurs qui se trouvent dans le vecteur A2


    A2=[10 20 30 40 50];
    Tu veux dire A1?

    Si c'est le cas, il me faudrai savoir est-ce que A1 est forcément composé d'entier?
    Si oui:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    scalaire = 3.7
    int_scalaire =  floor(scalaire)
    low_index = find(A1 == int_scalaire ) #indice inferieur 
    interp = (scalaire-int_scalaire)*(A2(low_index+1)-A2(low_index)) + A2(low_index) #interpolation lineaire
    Je pense que la fonction find est suffisamment optimisé.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Salut 21did21,

    Ca n'est pas très clair ce que tu exposes...

    Tu parles d'un scalaire (3.7) qui est forcement compris entre les valeurs qui se trouvent dans le vecteur A2. Or sur ton exemple ton vecteur A2 va de 10 à 50....Ca ne serait plutôt un scalaire de A1 et tu veux connaitre ton A2 correspondant?

    De manière plus générale, je ne vois pas pourquoi tu veux faire une interpolation.
    D'après ce que tu dis, tu chercherais juste le rapport qui existe entre tes deux axes.

    suffit à connaitre ton A2 hypothétique.

    Ou alors tu cherches le A2 correspondant à l'ordonnée d'une courbe qui a pour abcisse A1 ?

  4. #4
    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 DE VOTRE AIDE

    je suis vraiment désolé, je viens d'éditer mon message :

    => ce n'est pas 3.7 mais 37 que je voulais marquer.


    comme je n'ai pas été clair je viens de faire un petit schema.

    => je veux calculer pour tout point de la courbe noir la distance Y2-A2 et savoir combien elle vaut.

    => je connais les ordonnées A2 et les abscisses A1 de la courbe noire et je connais les abscisses et les ordonnées de la courbe verte Y1 et Y2.

    => ce que je pensais faire c'est faire une boucle pour toutes les ordonnées de la courbe noir et voir a quelle ordonnées ça correspond sur la courbe verte et ensuite faire la différence des deux abscisses associées.

    ce qui pose probleme est que les composantes que j'ai à disposition pour la courbe verte ne tombe pas forcement sur les ordonnées de la courbe noire.
    -> d'où l'interpolation linéaire...

  5. #5
    Membre habitué
    Homme Profil pro
    étudiant ingénieur traitement images médicales
    Inscrit en
    Juin 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : étudiant ingénieur traitement images médicales
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 74
    Points : 131
    Points
    131
    Par défaut
    regarde du côté de la fonction spline . Tu y trouveras peut être ton bonheur

  6. #6
    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
    Citation Envoyé par tanguy4724 Voir le message
    regarde du côté de la fonction spline . Tu y trouveras peut être ton bonheur
    en fait je connais la fonction splines mais comment l'utiliser ici ? je ré interpole la courbe verte à chaque itération de ma boucle pour avoir une ordonnée qui tombe "pile" sur l'ordonnées que je souhaite ?

    => ça fait un peu lourd non ?

  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
    Bonjour,

    Qu'entends-tu par un peu lourd?
    Il suffit d'interpoler pour les valeurs qu'il te manque, de toute manière, je ne vois pas trop quel autre choix tu pourrais avoir...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    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, j'y suis arivé

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

Discussions similaires

  1. code optimisé pour emmêler deux vecteurs
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 5
    Dernier message: 06/07/2012, 21h03
  2. code Delphi pour créer des sources ODBC
    Par lassad dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/10/2005, 11h18
  3. Réponses: 3
    Dernier message: 06/09/2005, 10h27
  4. Réponses: 2
    Dernier message: 08/04/2004, 11h11
  5. [VB6] Code source pour modifier MsgBox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/02/2003, 15h13

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