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')
