Visualisation 3D sur matlab

Discutez d'informatique ici !
houba
Messages: 3
Enregistré le: 23 Avr 2013, 08:32

visualisation 3D sur matlab

par houba » 23 Avr 2013, 08:44

bonjour à tous :happy3:

j'ai un petit problème concernant la visualisation 3d sur matlab
j'ai fais mon code en 2d mais je suis enfin bloqué lorsque j'ai essayer de la représenter en 3D:
je sais bien qu'il s'agit au préalable de calculer une matrice z dont les éléments sont les "altitudes" z correspondant aux points de la grille de mon surface. Cette matrice aura donc la dimension length(y)*length(x) (respectivement length(y) lignes, et length(x) colonnes).
j'ai utiliser 2 méthodes mais pas de résultats:
soit la méthode classique ne faisant pas intervenir les capacités de vectorisation
soit la méthode vectorisée faisant intervenir la fonction meshgrid
mais il m'affiche toujours la même erreur :

Code: Tout sélectionner
Error using surf (line 75)
Z must be a matrix, not a scalar or vector.

Error in reflectionlambda3d (line 107)
surf(X,Y,resR);


heeeeeppplll :mur:

voici le code en entier :

Code: Tout sélectionner
clear all;
lambda=0.3:0.0001:1;
lambda0=0.5;
%%%%%%%%%% structure du systeme: bragg %%%%%%%%%%%%
j_Iter=8;
    B1='BH';
    Bg1='H';
for e=1:j_Iter+1
   if e==j_Iter+1
   break
   end
    eval(sprintf('Bg%d=strcat(Bg%d,B%d )',e+1,e,1));
  end
%%%%%%%%%%%% indice de refraction du systeme multicouche%%%%%%%%%%%%%%%%%%%%%%

for kk=1:length(eval(sprintf('Bg%d',e)))

   if (eval(sprintf('Bg%d(%d)',e,kk))=='H')
       n(kk)=2.3;
   else
       n(kk)=1.45;
   end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

p=length(eval(sprintf('Bg%d',e)));% nombre des couches

%%%%%%%%%%%%%%%%%%%
    n(p+1)=1.5; %indice de refraction de substrat
    n0=1;%indice de refraction de l'air

    %%%%%%%%%%%%coefficient de distinction%%%%%%
    for m=1:p+1
        K(m)=0;
    end
    %%%%%%%%%%%%%indice de refraction%%%%%%
   N0=1;
%    %%%%%%%%%%%%%%%%%variation de theta0%%%%%%%%%%%%
   theta0=0;
    for tt=1:length(theta0)
    y(tt)=theta0(tt) ;
    end
    %%%%%%%%%%%%%%%%%%%indices complexes %%%%%%%%%%%%%%%%%
    for m=1:p+1
        N(m)=(n(m)-i*K(m));
    end
    %%%%%%%%%%%%%%calcul des theta%%%%%%%%%%
    for m=1:p+1
        if (m==1)
            theta(m)=asin((N0/N(m))*sin(y(tt)));
        else
             theta(m)=asin((N(m-1)/N(m))*sin(theta(m-1)));
        end
    end
    %%%%%%%%% variation de lambda0/lambda %%%%%%%
    for jj=1:length(lambda)
        x(jj)=(lambda0/lambda(jj));
 
   %%%%%%%%calcul des phi%%%%%%%%%%%
    phi0=0; phi(p+1)=0;
    %%%%%% calcul de phi %%%%%%%%%
    for m=1:p
        x0=lambda0/4;
        phi(m)=0.5*pi*x(jj)*(cos(theta(m)));
    end

%%%%%%% calcul les coefficient de Feresnel %%%%%%

for m=1:p+1
    if (m==1)
        numRp(m)=(N0*cos(theta(m))-N(m)*cos(y(tt)));
        numTp(m)=2*N0*cos(y(tt));
        denomRp(m)=(N0*cos(theta(m))+N(m)*cos(y(tt)));
        denomTp(m)=(N0*cos(theta(m))+N(m)*cos(y(tt)));
    else
        numRp(m)=(N(m-1)*cos(theta(m-1))-N(m)*cos(theta(m)));
        numTp(m)=2*N(m-1)*cos(theta(m-1));
        denomRp(m)=(N(m-1)*cos(theta(m-1))+N(m)*cos(theta(m)));
        denomTp(m)=(N(m-1)*cos(theta(m-1))+N(m)*cos(theta(m)));
    end
end

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  for m=1:p+1
      rp(m)=(numRp(m)/denomRp(m));
      tp(m)=(numTp(m)/denomTp(m));
  end

  %%%%%%%%%%%%%%%%%coefficient de matrice%%%%%%%%%%%%%%%%%%%

  for m=2:p+1
      if (m==2)
          PRp=[exp(-i*phi(m-1))/tp(m-1) rp(m-1)*exp(i*phi(m-1))/tp(m-1); rp(m-1)*exp(-i*phi(m-1))/tp(m-1) exp(i*phi(m-1))/tp(m-1)];
          CRp=[exp(-i*phi(m))/tp(m) rp(m)*exp(i*phi(m))/tp(m); rp(m)*exp(-i*phi(m))/tp(m) exp(i*phi(m))/tp(m)];
          sp=PRp*CRp;
      else
          CRp=[exp(-i*phi(m))/tp(m) rp(m)*exp(i*phi(m))/tp(m); rp(m)*exp(-i*phi(m))/tp(m) exp(i*phi(m))/tp(m)];
          sp=sp*CRp;
      end
  end
%%%%%%%%%% Reflexion  %%%%%%%%%
resR(jj,tt)=1/abs(sp(1,1)/sp(2,1))^2;
x=0.5:1.6;
y=0:1;
[X Y]=meshgrid(x,y)
surf(X,Y,resR);
    end
ylabel('R','FontSize', 15,'color','Black')
xlabel('\lambda0/\lambda', 'fontsize', 15, 'color','Black')



Mathusalem
Membre Irrationnel
Messages: 1837
Enregistré le: 14 Sep 2008, 03:41

par Mathusalem » 23 Avr 2013, 22:14

premierement, il faut que tu sortes meshgrid et surf de la boucle sur jj. A ce stade, resR n'est qu'un scalaire puisque tu ne l'as pas rempli.

Ensuite, resR n'est pas touché par la boucle sur tt ce qui semble une erreur de ton code.
De plus, il faudrait que tu crées au préalable la matrice resR. Finalement, x et y n'ont pas la taille que tu penses qu'ils devraient avoir avec ton meshgrid.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite