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 :

Intepolation de valeurs à partir d'une matrice initiale


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 202
    Points : 96
    Points
    96
    Par défaut Intepolation de valeurs à partir d'une matrice initiale
    Bonjour à tous,

    Ma requête va peut-être sembler simple, mais je bloque un peu sur la procédure...

    Voilà mon problème.
    J'ai une matrice de valeurs 'M' où un point donné correspond à une combinaison de 5 variables: pour une combinaison des variables 1, 2, ..., 5, j'ai une valeurs z.

    Dans le même temps, j'ai une autre matrice 'M2' qui correspond à la combinaison des 5 mêmes variables, mais dans ce cas, je n'ai pas la valeur z.
    Entre les 2 matrices, on ne retrouve pas les mêmes combinaisons des 5 variables

    Ce que je souhaite faire, c'est définir les valeurs de z dans M2 pour chaque combinaison de variables, en fonction de ce que je possède dans ma matrice 'M'.

    ... et je bloque...

    Je pensais à l'utilisation de la fonction interpn, mais je suis loin d'être sûr de moi... pourriez vous m'aider svp??

    merci d'avance!!
    Moi j'aime bien Matlab...mais j'ai pas l'impression que ça soit réciproque......

  2. #2
    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
    c'est ca, il faut utiliser interpn

    ca donne quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    zM2 = interpn(M(:,1),M(:,2),M(:,3),M(:,4),M(:,5),M(:,6),M2(:,1),M2(:,2),M2(:,3),M2(:,4),M2(:,5));
    M2 = [M2 zM2];
    ou en rouge les cominaisons de référence (M), en gras et rouge le z pour ces combinaisons et en verts les combinaisons souhaités ... et ca te sort tes z pour ces combinaisons

    après tu peux changer la méthode d'interpolation (ici linéaire) par spline, cubic ..., rajouter le parametre extrapval pour extrapoler si M2 n'est pas inclu strictement dans M (pour les 5 premiers paramètres)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 202
    Points : 96
    Points
    96
    Par défaut
    Merci de ta réponse rapide le fab!

    Par contre, je bloque sur un truc... je me demandais si cela fonctionnait aussi simplement que ça, ou s'il y avait la nécessité de transformer les input M(:,1) ,..., M(:,6), ..., M2(:,1) , ..., M2(:,5) qui sont actuellement sous forme de vecteur?

    Merci!
    Moi j'aime bien Matlab...mais j'ai pas l'impression que ça soit réciproque......

  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
    j'avais supposé que ta matrice M était composé de 6 colonnes, les 5 premières correspondant aux 5 paramètres et la 6eme à z
    maintenant si tu as des vecteurs distincts tu les mets directement
    bon là mon matlab est occupé, je peux donc pas tester, mais il me semble qu'il faille des vecteurs colonnes, donc si c'est pas le cas tu met

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 202
    Points : 96
    Points
    96
    Par défaut
    Tu as bien supposé, mais je crois que je me suis mal expliqué dans mon 2ème message.
    Quand j'essaie de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zM2 = interpn(M(:,1),M(:,2),M(:,3),M(:,4),M(:,5),M(:,6),M2(:,1),M2(:,2),M2(:,3),M2(:,4),M2(:,5));
    j'ai ce message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> interpn at 155
    Wrong number of input arguments or some dimension of V is less than 2.
    En regardant de plus près à l'utilisation de interpn, j'ai l'impression que l'application de la fonction nécessite un passage des variables en ngrid... ce qui ne m'arrange pas à cause du out of memory....
    Moi j'aime bien Matlab...mais j'ai pas l'impression que ça soit réciproque......

  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
    autant pour moi, en effet interpn demande des matrices et non des vecteurs
    (pas l'habitude de faire des interpolations à plus de 2 variables)
    -> ngrid

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 202
    Points : 96
    Points
    96
    Par défaut
    Merci de la confirmation le fab,
    Je rencontre donc le problème que je craignais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maximum variable size allowed by the program is exceeded.
    Je vais donc essayer de trouver une approche autre...

    Merci
    Moi j'aime bien Matlab...mais j'ai pas l'impression que ça soit réciproque......

  8. #8
    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
    juste pour info, tu as combien de lignes dans tes matrices ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 202
    Points : 96
    Points
    96
    Par défaut
    salut le fab!

    J'ai un peu plus de 200000 lignes dans ma matrice 'M'... et idem dans la matrice 'M2'...
    Moi j'aime bien Matlab...mais j'ai pas l'impression que ça soit réciproque......

  10. #10
    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
    peut être peux tu faire des interpolations sur une partie significative de M (et découper M2 puis la réassembler)
    tu perdra en précision, mais bon

    ou augmenter la ram (12 tera devraient suffirent )

    juste au cas ou, lance ton programme sur une session vierge de matlab (ie matlab qui vient d'être lancé, pas un clear all) avec aucun autre logiciel qui tourne ... tu peux aussi lancer matlab sans l'interface java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matlab -nojvm -nodesktop
    désolé pour ma mauvaise réponse du début, je n'utilise que interp1 et interp2 qui acceptent les vecteurs (ca aide)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 202
    Points : 96
    Points
    96
    Par défaut
    Salut le fab,

    Désolé pour ma réponse tardive et merci pour la tienne!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ou augmenter la ram (12 tera devraient suffirent )
    ... je vais en toucher 2 mots à mon labo, ils vont peut-être accepter l'investissement

    Sinon, j'essaie en passant sur une version "light" de ma matrice de base M. Pour l'instant les résultats sont bien, mais pas tops... je continue de bosser sur ce point...
    Merci de ton aide, je tiens au courant si j'arrive à trouver "la" solution ;-))
    Moi j'aime bien Matlab...mais j'ai pas l'impression que ça soit réciproque......

  12. #12
    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
    tiens un idée me viens :
    tu peux peut être découper M en zones géographiquement rapprochée, faire les interpolations sur ces zones pour les point de M2 également dans ces zones et réassembler M2

    par exemple tu filtres M pour ne prendre que les points à une certaine distance d'un point de M2 et tu fais l'interpolation du z de ce point de M2 avec ce sous ensemble de M
    normalement si tu gères bien tes distances tu devrais pas perdre en précision
    par contre en temps de calcul ...

    c'est très parlant en 2D et 3D, peut être un peu moins en 6D mais bon ... ca devrait marcher quand même

    Fab, bien content de se limiter à la 3D

Discussions similaires

  1. Extrapolation de données à partir d'une matrice
    Par Kcyril dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/04/2007, 09h52
  2. Réponses: 1
    Dernier message: 30/04/2006, 14h24
  3. Réponses: 1
    Dernier message: 19/01/2006, 19h36
  4. Map à partir d'une matrice
    Par Aldur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/08/2005, 20h45
  5. valeurs propres d'une matrice et vecteurs propres
    Par la_fantomas dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/05/2005, 15h35

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