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 :

Calcul de différences locales dans une matrice


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2006
    Messages : 70
    Points : 39
    Points
    39
    Par défaut Calcul de différences locales dans une matrice
    Bonjour, je suis confronté au problème suivant.

    J'ai une matrice 3-D A de taille (n,n,n), et je voudrais calculer la matrice B telle que :

    pour tout i,j,k dans [2,n-1],
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    B(i,j,k) = f(A(i,j,k) - A(i+1,j,k)) + f(A(i,j,k) - A(i-1,j,k))  +  f(A(i,j+1,k) - A(i-1,j,k)) +  f(A(i,j,k) - A(i,j-1,k)) + f(A(i,j,k) - A(i,j,k+1)) + f(A(i,j,k) - A(i,j,k-1))
    où f est une fonction de R dans R donnée. Si un point (i,j,k) est au bord, alors B(i,j,k) est la somme des différences entre A(i,j,k) et les valeurs aux points voisins de A, avec application de la fonction f (la même définition que celle donnée au dessus avec des termes qui sautent). Je voudrais faire ce calcul sans faire de boucle !

    Merci du coup de main

    merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par S4sha Voir le message
    Je voudrais faire ce calcul sans faire de boucle !
    Pourquoi ?

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    Il faut que la fonction f soit vectorisé ( accepte un vecteur/matrice en entrée).

    Sinon, le code devrait ressembler à ceci (sans boucle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ix = 2:n-1;
    B = f(A(ix,ix,ix) - A(ix+1,ix,ix)) + ...
    ++

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2006
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Dut je ne veux pas faire de boucle car A est de taille astronomique.

    Samourai ton calcul me plait bien. Sinon il y a la fonction "diff" qui est pas mal non plus

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 884
    Points
    52 884
    Par défaut
    La fonction CONVN pourrait peut être être également utile ici ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2006
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Oui ça peut servir, merci à vous deux !

  7. #7
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Je doute que l'opération peut être fait par convolution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %Avec DIFF le code deviendra très sympathique :D 
     
      B = f(-diff(A,1,1)) + ....
    ++

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2006
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Je préfère ta solution, car ça fait les différences à gauche et à droite en chaque points, alors qu'avec diff il n'y a qu'il seul sens je pense

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par mr_samurai Voir le message
    Je doute que l'opération peut être fait par convolution.
    Tu as raison, je n'avais pas remarqué que f s'appliquait aux termes deux à deux...

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

Discussions similaires

  1. Calcul des 0 et 1 dans une matrice
    Par M77ATTAR dans le forum Débuter
    Réponses: 6
    Dernier message: 25/07/2013, 18h34
  2. Réponses: 6
    Dernier message: 14/12/2010, 17h25
  3. [SSRS] [2K5] Probleme calcul dans une matrice
    Par boutinj dans le forum SSRS
    Réponses: 3
    Dernier message: 10/11/2010, 12h30
  4. [Débutant] calculer nombre des 1 dans une matrice
    Par angel_tn dans le forum Images
    Réponses: 3
    Dernier message: 02/05/2010, 07h33
  5. Réponses: 1
    Dernier message: 02/04/2008, 14h17

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