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 :

fonction définie sur une sphère


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 34
    Points : 32
    Points
    32
    Par défaut fonction définie sur une sphère
    Bonjour à tous,

    Je souhaiterais représenter la fonction définie en coordonnées sphériques :

    f(theta, phi) = cos(2*theta) - sin(3*phi)

    à la surface d'une sphère de rayon unité.

    Je sais représenter cette fonction dans le plan (theta,phi) et je sais aussi dessiner une sphère de rayon unité mais j'ignore comment représenter ma fonction à la surface de cette sphère

    Quelqu'un peut-il me donner un coup de main pour y arriver ?

    Je vous remercie

    Antoine

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Si tu sais dessiner une sphère de rayon unité, tu sais générer les valeurs correspondantes... donc il te suffit de passer ces valeurs à la fonction.

    Reste plus qu'à les représenter à l'aide de la fonction surf. Cette dernière fonction acceptant des coordonnées cartésiennes, il te faudra passer par sph2cart.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 34
    Points : 32
    Points
    32
    Par défaut fonction définie sur une sphère
    Bonjour,

    merci pour ta réponse. Voici comment je procède

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    clear all
    % On récupère les coordonnées cartésiennes d'une sphère de rayon 1
    [X1,Y1,Z1] = sphere(20);
    % On passe en coordonnées sphériques
    [THETA,PHI,R] = cart2sph(X1,Y1,Z1);
    % On fabrique la fonction F1(THETA,PHI) 
    F1 = cos(2*THETA) - sin(3*PHI);
    % On repasse en coordonnées cartésiennes pour utiliser "surf"
    [X2,Y2,F2] = sph2cart(THETA,PHI,F1);
    % On représente la fonction F1(THETA,PHI) sur la sphère de rayon 1
    surf(X2,Y2,F2)
    Malheureusement le résultat obtenu n'est pas celui attendu. J'obtiens en effet la représentation d'une surface "lobée" F2(X2,Y2) et non ma fonction sur une sphère de rayon 1 (voir pièce-jointe).

    As-tu une idée pour arriver à résoudre ce problème ?

    Cordialement

    Sébastien
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Là comme tu le dis, tu traces la troisième coordonnée en fonction des deux autres F2 = Z(X,Y), et non F2 = F(X,Y,Z)


  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Super merci pour ton aide !

    Je mets ici le code que je viens d'écrire pour représenter les harmoniques sphériques à la surface d'une sphère de rayon unité. Il faut utiliser la fonction harmonic.m (harmonic(L,M) génère l'harmonique sphérique Y_LM)

    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
     
    %=======================================================================
    % Cette fonction plotte les harmoniques sphériques à la
    % surface d'une sphère de rayon unité.
    % REMARQUE : par rapport au cas standard : THETA <--> PHI
    % et PHI (avant correction) est défini par rapport au vecteur rho(x,y) 
    % qui est le projeté du vecteur r(x,y,z) dans le plan x-y. 
    % Après correction (PHI = pi/2 - PHI), PHI est défini par rapport à l'axe z
    % (voir la doc matlab "cart2sph")
    % INPUT : L = 0,1,2,... et M = 0,1,...,L
    % OUTPUT : X,Y,Z et THETA,PHI,Ymn
    %=======================================================================
    function [X,Y,Z,THETA,PHI,Ymn]=harmonic(L,M)
     
    [X,Y,Z] = sphere(100,100);
    [THETA,PHI,R] = cart2sph(X,Y,Z);
     
    PHI = pi/2 - PHI;
     
    Lmn=legendre(L,cos(PHI));
     
    if L~=0
      Lmn=squeeze(Lmn(M+1,:,:));
    end
     
    a1=((2*L+1)/(4*pi));
    a2=factorial(L-M)/factorial(L+M);
    C=sqrt(a1*a2);
     
    Ymn=C*Lmn.*exp(1i*M*THETA);
     
    axis off; hold on;
    axes('position',[0.0499 0 0.2666 1]); 
    surf(X,Y,Z,real(Ymn)); 
    shading interp
    axis equal; 
     
    axes('position',[0.3666 0 0.2666 1]); 
    surf(X,Y,Z,imag(Ymn)); 
    shading interp
    axis equal; 
     
    axes('position',[0.6833 0 0.2666 1]); 
    surf(X,Y,Z,abs(Ymn).^2); 
    shading interp
    axis equal; 
     
    axes('position',[0 0.9 1 0.1]); axis off;
    t(1)=text(0.50,0.25,'HARMONIQUES SPHERIQUES','HorizontalAlignment','Center');
    axes('position',[0 0 1 0.1]); axis off;
    t(2)=text(0.20,1.5,['Real(Y^',num2str(M),'_',num2str(L),')'],'HorizontalAlignment','Center');
    t(3)=text(0.50,1.5,['Imag(Y^',num2str(M),'_',num2str(L),')'],'HorizontalAlignment','Center');
    t(4)=text(0.80,1.5,['|Y^',num2str(M),'_',num2str(L),'|^2'],'HorizontalAlignment','Center');
     
    return
    Sébastien

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

Discussions similaires

  1. Comment lancer une fonction présente sur une autre page ?
    Par mappy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/12/2006, 14h44
  2. fonction MAX sur une date
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 08/09/2006, 14h59
  3. [XSL]appliquer la fonction substring sur une valeur récupéré
    Par totoranky dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 22/02/2006, 17h21
  4. Réponses: 3
    Dernier message: 22/12/2005, 11h20
  5. probleme de texture sur une sphère
    Par sebpp dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/04/2005, 19h46

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