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

Mathématiques Discussion :

Afficher la distribution de potentiels électriques sur une sphère


Sujet :

Mathématiques

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut Afficher la distribution de potentiels électriques sur une sphère
    bonjour

    Voila j’ai ce code qui calcule le potentiel électrique dans 128 point par la fonction direct_sphere qui me donne ce résultat (un vecteur de 128 point) et je veux afficher la distribution de potentielle électriques sur la sphère et je ne c pas comment faire

    voila un exemple de résultat :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    pot =
     
       -0.1114
       -0.0949
        0.1789
        0.0806
       -0.1342
       -0.0246
       -0.0424
        0.0796
        0.0632
        0.1746
        0.1199
        0.1469
        0.0824
        0.1302
        0.1573
       -0.0350
        0.1645
        0.1652
       -0.0531
       -0.0378
       -0.2045
       -0.0503
       -0.0023
       -0.1778
       -0.0673
        0.1659
        0.0355
        0.1187
        0.0854
       -0.0562
       -0.1354
       -0.1979
       -0.0786
        0.1286
       -0.0746
        0.0652
       -0.2000
        0.0695
       -0.1827
       -0.0960
       -0.1668
        0.0506
       -0.0228
        0.0491
        0.1237
       -0.0934
        0.1112
       -0.0557
        0.0462
       -0.0248
        0.0048
       -0.1037
        0.0143
        0.0940
        0.0884
       -0.0172
       -0.0221
        0.1291
       -0.1890
        0.0023
        0.0736
        0.0703
        0.1806
       -0.1689
        0.1159
        0.1964
       -0.0416
       -0.0538
       -0.1409
       -0.0615
        0.0420
        0.0806
        0.1327
       -0.0596
        0.1864
       -0.0121
        0.1230
       -0.0647
       -0.0460
        0.0801
        0.1900
       -0.0424
        0.1847
       -0.0706
        0.1109
       -0.0133
        0.0509
        0.0205
       -0.0653
       -0.0932
       -0.1426
       -0.1810
        0.0843
       -0.1610
        0.0130
       -0.0682
       -0.0402
       -0.0907
        0.2034
        0.0391
       -0.0746
        0.1051
       -0.0799
        0.1112
       -0.0224
       -0.0978
        0.0383
        0.0943
       -0.1834
        0.1091
       -0.0115
        0.0457
        0.0121
        0.0703
        0.1467
        0.1643
        0.1352
       -0.0359
        0.0942
       -0.0160
        0.1778
       -0.0867
        0.1016
       -0.0270
       -0.1984
       -0.0509
       -0.0575
        0.0254
    voila un exemple de code que j'ai utiliser :

    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
    % -- créer un ensemble d'électrodes, placées au hasard sur une sphère
    elec = [];
    elec.pnt = randn(128,3);
    radius = sqrt(sum(elec.pnt.^2,2));
    elec.pnt = elec.pnt ./ [radius radius radius];  %échelle à une sphère unité
    for i=1:128
       elec.label{i} = sprintf('%03d', i);
    end
    %--- calcule de potentielle electrique dans les point elec.pnt
    r = [0.88 0.92 1.00]; 
    c = [1 1/80 1]; 
    mom = [1 0 0]';
    pos = [0 0 0.5];
    pot = direct_sphere(elec.pnt,mom,pos,c,r);
    pot
    figure
    R1 = 1;
    N=40;
    [x1,y1,z1]=sphere(N);
    hold on
    s(1) = surf(R1*x1,R1*y1,R1*z1,'facecolor','r');
    set(s(1),'facealpha',.5,'edgecolor','non','facelighting','gouraud')
    light
    grid on
    axis equal tight
    view(3)
    for i=1:128
    hold on
    plot3(elec.pnt(i,1),elec.pnt(i,2),elec.pnt(i,3),'*','Color',[0 0 1])
    grid on
    view(3)
    end

  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 309
    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 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pot = reshape(pot,size(x1,1),[]);
    s(1) = surf(R1*x1,R1*y1,R1*z1,pot);

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    j'ai essaiyer celui que tu ma donner mai sa ma donner une figure vide !!

    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
    % -- créer un ensemble d'électrodes, placées au hasard sur une sphère
    elec = [];
    elec.pnt = randn(128,3);
    radius = sqrt(sum(elec.pnt.^2,2));
    elec.pnt = elec.pnt ./ [radius radius radius];  %échelle à une sphère unité
    for i=1:128
       elec.label{i} = sprintf('%03d', i);
    end
    %--- calcule de potentielle electrique dans les point elec.pnt
    r = [0.88 0.92 1.00]; 
    c = [1 1/80 1]; 
    mom = [1 0 0]';
    pos = [0 0 0.5];
    pot = direct_sphere(elec.pnt,mom,pos,c,r);
    figure
    R1 = 1;
    N=40;
    [x1,y1,z1]=sphere(N);
    hold on
    pot = reshape(pot,size(x1,1),[]);
    s(1) = surf(R1*x1,R1*y1,R1*z1,pot);
    set(s(1),'facealpha',.5,'edgecolor','non','facelighting','gouraud');
    light; grid on; axis equal tight;
    view(3)
    je ne ces plus quoit faire !!?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    Elle me ginaire cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Error in ==> ensembedelectrod at 20
    pot = reshape(pot,size(x1,1),[]);
     
    ??? Error using ==> reshape
    Product of known dimensions, 41, not divisible into total number of elements, 128.

  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 309
    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 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Tu pourrais nous montrer la fonction direct_sphere ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    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
    43
    44
    45
    function u=direct_sphere(x,q,p,sigmas,rk) 
    [n,m] = size(x);
    if m~=3,
      error('x should be a set of row 3D vectors.')  
    end
     
     q=q(:) ; p=p(:) ; % make vectors
    q = q';p = p';
    matp = ones(n,1)*p;
    matq = ones(n,1)*q;
     
    N=length(sigmas) ; % number of levels
     
    % calculate angles 
    alpha=om_vangle(matp,matq) ; cosgamma=cos(om_vangle(matp,x)) ;
    beta=om_vangle(cross(matp,matq),cross(matp,x)) ;
    relerr=1e-20 ; % keep adding terms as longer as the term to be added is greater
     
    n=1 ; sum=0 ; 
     
    while 1,
      term=(2*n+1)/n*(norm(p)/rk(N))^(n-1) ;
      % calculate matrix M
      M=eye(2)/(2*n+1)^(N-1) ;
      for k=1:N-1,
        rsigma=sigmas(k)/sigmas(k+1) ;
        rerk=(rk(N)/rk(k))^(2*n+1) ;
        M=M*[ n+(n+1)*rsigma (n+1)*(rsigma-1)*rerk ; ...
          n*(rsigma-1)/rerk (n+1)+n*rsigma ] ;
      end ;
      f=n/(n*M(2,2)+(1+n)*M(2,1)) ;
      P=legendre(n,cosgamma) ;
      % Attention! Matlab's definition of Legendre includes (-1)^m, unlike
      % the definition supposed for the following formula
      term=term*f*(n*cos(alpha).*P(1,:)'-cos(beta).*sin(alpha).*P(2,:)') ;
    %   disp(['Adding term n=' num2str(n) ' value=' num2str(term) ]) ;
      sum=sum+term ;
     
       if ((abs(term)<abs(sum)*relerr) & n>20)  | n>200,
        break ; 
      end ; 
      n=n+1 ;
    end ;
    u=sum*norm(q)/(4*pi*sigmas(N)*rk(N)^2) ;
    u=real(u) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function a=om_vangle(r,s)
    % Returns an angle between two 3D vectors r,s in a range 0-pi
    %
     
    mag=sqrt(dot(r,r,2).*dot(s,s,2)) ;
    mag = max(mag,1e-30);
    %if abs(mag)<1e-30, mag=1 ; end ; % avoid division by zero
    a=acos(dot(r,s,2)./mag) ;

  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 309
    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 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s(1) = surf(R1*x1,R1*y1,R1*z1);
    set(s(1),'facecolor','w','facealpha',.5,'edgecolor','k','facelighting','gouraud');
    scatter3(elec.pnt(:,1),elec.pnt(:,2),elec.pnt(:,3),60,pot+abs(min(pot)),'filled');

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    mai cette solution ne donne pas la distribution de potentielle dans tout la sphere ,(j'ai pas comprié ta solution)

  9. #9
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    qui me donne ce résultat (un vecteur de 128 point)
    Les valeurs du potentiel ne suffisent pas: il faut aussi les coordonnées des points correspondants.
    Jean-Marc Blanc

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    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 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    il faut aussi les coordonnées des points correspondants.
    Les coordonnées des 128 points sont générées aléatoirement sur la sphère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    elec.pnt = randn(128,3);
    radius = sqrt(sum(elec.pnt.^2,2));
    elec.pnt = elec.pnt ./ [radius radius radius];  %échelle à une sphère unité
    Le problème ici est de faire une interpolation sur la sphère à partir des 128 points calculé (si j'ai bien tout compris) => Interpolation biliniaire sur la surface d'une sphère

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    j'ai tout essayer mai ça marche pas, je ne c pas pourquoi j’ai un ensemble de valeur qui son calculer sur un certain nombre de point est j’ai comme résultat un vecteur de valeur je veux représenter la distribution de ces valeur sur les point dans une sphère ... un amis ma proposer de calculer la moyenne et la variance et de la représenté sous forme de gaussienne alors es que ça marche cette méthode.. Je suis vraiment perdu idée moi

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    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 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Je déplace ici même si cette discussion date un peu mais le problème n'est toujours pas résolu... et ce n'est pas un problème spécifique à MATLAB

    @roubas : peux-tu nous dire exactement ce que tu as essayé comme méthode d'interpolation ?

  13. #13
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par roubas Voir le message
    j’ai comme résultat un vecteur de valeur je veux représenter la distribution de ces valeur sur les point dans une sphère
    Tu veux dire quoi par "représenter la distribution" ? Avoir un image d'une sphère 3D avec des couleurs en fonction des valeurs de potentiel ?

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    oui c'est ça !! je veux avoir des resultat comme le montre cette image

    Images attachées Images attachées  

  15. #15
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par roubas Voir le message
    oui c'est ça !! je veux avoir des resultat comme le montre cette image
    Ok. Donc comme le dit Dut c'est du coté de l'interpolation qu'il faut regarder.

    un amis ma proposer de calculer la moyenne et la variance et de la représenté sous forme de gaussienne alors es que ça marche cette méthode..
    On peut commencer par des formules plus simples. Pour chaque point X de ta sphère, tu calcules toutes les distances (arc de cercle) entre ce point et les points Pi dont tu connais les valeurs. Ensuite tu calcules un poids correspondant à la distance (par exemple 1/d²), et tu utilises ce poids pour faire une moyenne pondérée des valeurs:

    valeur(X) = Somme ( 1/distance(X,Pi)² * valeur(Pi) ) / Somme ( 1/distance(X,Pi)² )

    Il faut penser a gérer les cas ou X est sur un point Pi (distance=0). Dans ce cas, on a évidement valeur(X)=valeur(Pi).

  16. #16
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    Vous savez, je n'ai pas bien compris votre réponse :

    moi j'ai un seul point a l'intérieur de cette sphère et j'ai calculer le potentiel généré par ce point a des emplacement situés sur surface la sphère ( ex : 128 emplacements ) qui m'a donné une valeur à chaque emplacement ( un vecteur ) et je veux plotter avec matlab cette distribution sur ma sphère et je ne sais pas comment le faire

    alors d'après votre réponse comment je doit plotter ces valeurs !!?

  17. #17
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Hum... tu veux afficher un sphère complète ou alors juste tes 128 points ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    merci pour ta réponce , mai tu c moi jai déja calculer le potentielle a chaque point sur la surface de la sphere je veux juste ploter cette distribution avec matlab pour avoir une résultat comme elle est affichez dans l'image présidante et je ne c pas comment le faire

    jai un point X situé a l'interieure de cette sphere et je calcule le potentielle pas une méthode sur des point sur la surface de cette sphère ( 128 points situer sur la surface de cette sphère ) qui donne un vecteur de potentielle de 128 point

    et je veux affichez cette distribution dans une figure sur ma sphere mai jai pas çu comment le faire avec matlab ( alors les calcule son déja fait, je veux juste les afficher )

    alors vous pouvez midi pour ça !!

  19. #19
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    qui donne un vecteur de potentielle
    Je t'ai déjà répondu précédemment:
    Le potentiel est, par définition, un scalaire; c'est le champ électrique E qui est un vecteur: E=-grad(V)
    Jean-Marc Blanc

  20. #20
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    oui moi aussi j'ai un scalaire et je veux bien afficher ce scalaire sous forme dune distribution sur une sphère 3d

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/08/2008, 12h49
  2. afficher le detail de la recherche sur une autre page
    Par super-java dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2007, 17h02
  3. Réponses: 7
    Dernier message: 23/03/2007, 10h41
  4. Afficher les données d'un champ sur une ligne
    Par white-angel dans le forum Access
    Réponses: 6
    Dernier message: 30/08/2006, 11h09

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