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 :

difficulté a comprendre une fonction


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut difficulté a comprendre une fonction
    bonjour , alors je veux un aide de vous part pour faire marcher et comprendre cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function [lf] = calcule(rd, pnt, cond);
     
    siz = size(rd);
    if any(siz==1)
      % positions are specified as a single vector
      Ndipoles = prod(siz)/3;
    elseif siz(2)==3
      % positions are specified as a Nx3 matrix -> reformat to a single vector
      Ndipoles = siz(1);
      rd = rd';
      rd = rd(:);
    else
      error('incorrect specification of dipole locations');
    end
     
    Npnt     = size(pnt,1);
    lf       = zeros(Npnt,3*Ndipoles);
    s1       = size(rd);
     
    if s1(1)>s1(2)
      % make sure that the dipole position is a row-vector
      rd = rd';
    end
     
    for i=1:Ndipoles
      r = pnt - ones(Npnt,1) * rd((1:3) + 3*(i-1));
      R = (4*pi*cond) * (sum(r' .^2 ) .^ 1.5)';
      if any(R)==0
        warning('dipole lies on boundary of volume model');
      end
      lf(:,(1:3) + 3*(i-1)) = r ./ [R R R];
    end
    jai essaiyer avec ces argument en entré mai ça na pas marcher :

    rd=[0 0.5 0.5]
    pnt=[0 0 1]
    cond=[0.33 0.0252 0.33]

    alors aider moi svp

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Où as-tu trouvé cette fonction ?
    Que sont censés représenter physiquement ces arguments ?
    Pourquoi as-tu testé avec ces valeurs là et qu'est-ce qui ne fonctionne pas quand tu le fais ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut
    Alors c’est une méthode qui calcule la méthode BEM ( Boundry element méthode ) qui calcule un potentielle électrique dans un maillage , les argument en entré ces
    - le point de maillage
    - le point de mesure de
    - la conductivité dans ces surfaces
    -
    Et on a trois surface, alors aider moi svp a exécuté cette fonction !!?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Et la réponse à la première question ?
    Citation Envoyé par Caro-Line Voir le message
    Où as-tu trouvé cette fonction ?

  5. #5
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Et les 3ème et 4ème questions ?
    Citation Envoyé par Caro-Line Voir le message
    Pourquoi as-tu tester avec ces valeurs là et qu'est-ce qui ne fonctionne pas quand tu le fais ?

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut
    je les trouver sur internet

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par roubas Voir le message
    je les trouver sur internet
    Et où exactement ?
    Sur quel site ?

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut
    je me rapelle pas .... !!!

  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 317
    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 317
    Par défaut
    Citation Envoyé par roubas Voir le message
    je me rapelle pas .... !!!
    C'est bien dommage...

    Bon sinon, c'est quoi le problème ?
    Le code ne fonctionne pas ? Il y a un message d'erreur qui apparait ?

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut
    alors voila la function :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    function [lf] = inf_medium(rd, pnt, cond);
     
    % INF_MEDIUM_LEADFIELD calculate the infinite medium leadfield
    % on positions pnt for dipole position R and conductivity cond
    %       
    % [lf] = inf_medium_leadfield(R, pnt, cond)
     
    rd=[0 0.5 0.5;0 0 0.5]
    pnt=[0 0 1; 1 1 1]
    cond=[0.3 0.0025 0.3]
    %----------------------------------------------------------------
    siz = size(rd);
    if any(siz==1)
      % positions are specified as a single vector
      Ndipoles = prod(siz)/3;
    elseif siz(2)==3
      % positions are specified as a Nx3 matrix -> reformat to a single vector
      Ndipoles = siz(1);
      rd = rd';
      rd = rd(:);
      rd
    else
      error('incorrect specification of dipole locations');
    end
    %---------------------------------------------------------------------
    Npnt     = size(pnt,1);
    lf       = zeros(Npnt,3*Ndipoles);
    s1       = size(rd);
     
    if s1(1)>s1(2)
      % assurez-vous que la position est un dipôle-vecteur ligne
      rd = rd';
    end
     
    for i=1:Ndipoles
      r = pnt - ones(Npnt,1) * rd((1:3) + 3*(i-1));
      R = (4*pi*cond) * (sum(r' .^2 ) .^ 1.5)';
      if any(R)==0
        warning('dipôle est situé sur la frontière du volume modèle');
      end
      lf(:,(1:3) + 3*(i-1)) = r ./ [R R R];
    end
    il me genair cette érreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> mtimes
    Inner matrix dimensions must agree.
     
    Error in ==> inf_medium_leadfield at 37
      R = (4*pi*cond) * (sum(r' .^2 ) .^ 1.5)';
    je ponce que la (cond) doit avoir une seul valeur et non vecteur, car la fonction doit etre integré dans une autre fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function [lf] = lead(pos, elc, vol)
     
    % [lf] = lead(pos, elc, vol)
    %
    % with the input arguments
    %   pos		position dipole (1x3 or Nx3)
    %   elc		position electrodes (optional, can be empty)
    %   vol		volume conductor model
    %
    % the volume conductor model is a structure and should have the fields
    %   vol.bnd	structure array with vertices and triangles of each boundary
    %   vol.cond	conductivity of all compartments
    %   vol.mat 	system matrix, which can include the electrode interpolation
    %   vol.tra 	transfer matrix for interpolation from vertices to electrodes
    %
    % the compartment boundaries are described by a structure array with
    %   vol.bnd(i).pnt
    %   vol.bnd(i).pnt
     
    ncmp = length(vol.cond);
    cond = vol.cond(vol.source);
    % concatenate the vertices of all compartment boundaries in a single Nx3 matrix
      pnt = [];
      for i=1:ncmp
        pnt = [pnt; vol.bnd(i).pnt];
      end
     
      lf = inf_medium(pos, pnt, cond);
    end

    Aider moi SVP , j'attendrai vous réponce avec impatience !!

  11. #11
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Il y a manifestement un problème de dimensions dans ton expression.
    A toi de regarder la dimension de chacun des éléments et de comprendre pourquoi cela ne fonctionne pas.

    Utilise par exemple le debuggueur (help debug) pour t'arrêter sur la ligne incriminée et regarde les valeurs de tes éléments avant que ça ne plante.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 123
    Par défaut
    Apparemment, tu as raison, il faut une unique valeur dans cond.
    En même tps, ça se comprend puisque il s'agit d'une conductivité de ton milieu. Si tu en définissait plusieurs, tu aurais un code bien plus compliqué, puisqu'il faudrait définir les zones correspondantes à ces conductivités.

    Donc au final :
    - rd, matrice de taille (nbre de dipole, 3) contenant sur chaque ligne les coordonnées 3d de tes dipôles
    - pnt, matrice de taille (nbre de points de mesure,3) contenant sur chaque ligne les coordonnées 3d de ces points
    - cond, scalaire, valeur unique de conductivité de ton milieu

    Le résultat est une matrice (nbre de points de mesures,3) contenant la valeur du champ sous forme d'un vecteur 3d.

    Bonne journée.

    PS : ton code, tu l'as peut être récupéré ici : https://svnserv.cbs.mpg.de/eeglab/br...um_leadfield.m

Discussions similaires

  1. [Débutant] Aide pour comprendre une fonction
    Par Vorens dans le forum VB.NET
    Réponses: 4
    Dernier message: 21/03/2012, 15h50
  2. des difficultés pour comprendre une requête
    Par johnny3 dans le forum Schéma
    Réponses: 5
    Dernier message: 10/08/2008, 19h43
  3. Réponses: 10
    Dernier message: 11/01/2007, 21h45
  4. Difficulté à "inverser" une fonction
    Par gorgonite dans le forum Prolog
    Réponses: 13
    Dernier message: 05/10/2006, 10h13

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