Automated plot using values from an initial graph

1 visualización (últimos 30 días)
AdomPadom
AdomPadom el 24 de Feb. de 2023
Comentada: AdomPadom el 24 de Feb. de 2023
I am trying to plot a graph using the the central minima values that are generated from an intial plot.
The attached images and code demonstrate what I am trying to achieve.
clear all;
%PARAMETERS
n1 = 3.43; n2 = 2.97; n0 = 1; n3 = 3.6;
c = 767e-9; l = 0e-9; u = 3000e-9;
figure;
CHARTS = tiledlayout('flow');
nexttile; grid on; grid minor; hold on
xlabel('Wavelength'); ylabel('Angle'); zlabel('Intensity')
zlim ([0 100]);
xlim ([700 800]);
for iRange = 80:-10:0
np = 20000; s = (u-l)/np;
Wavelength = zeros(1,np);
Intensity = zeros(1,np);
index = 1;
%WAVELENGTH RANGE
for range = l:s:u
incd = iRange*(pi/180);
a1 = asin((n0*sin(incd))/n1);
a2 = asin((n1*sin(a1))/n2);
a21 = asin((n2*sin(a2))/n1);
%WAVEVECTOR
k = 2*pi/range;
%THICKNESS
l1 = c/(4*n1);
l2 = c/(4*n2);
%MATRICES
A = [1 1;n0*cos(a1) -n0*cos(a1)];
B = [1 1;n1*cos(a21) -n1*cos(a21)];
C = [1 1;n2*cos(a2) -n2*cos(a2)];
D = [1 1;n3 -n3];
%PROPAGATION
X1 = [exp(1i*k*l1*n1*cos(a21)) 0;0 exp(-1i*k*l1*n1*cos(a21))];
X2 = [exp(1i*k*l2*n2*cos(a2)) 0;0 exp(-1i*k*l2*n2*cos(a2))];
%LAYER
L = X1*(B\C)*X2*(C\B);
M = (A\B)*(L^18)*X2*(L^21)*(B\D);
%REFLECTANCE
E1 = M(2,1)/M(1,1);
E2 = 100*(abs(E1)^2);
Intensity(index) = E2;
Wavelength(index) = range/1e-9;
index = index+1;
end
[Wv,In] = meshgrid(Wavelength,incd);
plot3(Wv,In,Intensity','linewidth',1)
view(-5,60); rotate3d('on');
end

Respuesta aceptada

Simon Chan
Simon Chan el 24 de Feb. de 2023
Focus on the range of wavelength from 700 to 800 and find the position where abrupt change happens.
%PARAMETERS
n1 = 3.43; n2 = 2.97; n0 = 1; n3 = 3.6;
c = 767e-9; l = 0e-9; u = 3000e-9;
f = figure;
f.Visible = 'off'; % Just make it invisible here
CHARTS = tiledlayout('flow');
nexttile; grid on; grid minor; hold on
xlabel('Wavelength'); ylabel('Angle'); zlabel('Intensity')
zlim ([0 100]);
xlim ([700 800]);
WvMin = []; % Initialize WvMin to store the value of minimum wavelength
iRange = 80:-10:0; % Set iRange here
for z=1:length(iRange)
np = 20000; s = (u-l)/np;
Wavelength = zeros(1,np);
Intensity = zeros(1,np);
index = 1;
%WAVELENGTH RANGE
for range = l:s:u
incd = iRange(z)*(pi/180);
a1 = asin((n0*sin(incd))/n1);
a2 = asin((n1*sin(a1))/n2);
a21 = asin((n2*sin(a2))/n1);
%WAVEVECTOR
k = 2*pi/range;
%THICKNESS
l1 = c/(4*n1);
l2 = c/(4*n2);
%MATRICES
A = [1 1;n0*cos(a1) -n0*cos(a1)];
B = [1 1;n1*cos(a21) -n1*cos(a21)];
C = [1 1;n2*cos(a2) -n2*cos(a2)];
D = [1 1;n3 -n3];
%PROPAGATION
X1 = [exp(1i*k*l1*n1*cos(a21)) 0;0 exp(-1i*k*l1*n1*cos(a21))];
X2 = [exp(1i*k*l2*n2*cos(a2)) 0;0 exp(-1i*k*l2*n2*cos(a2))];
%LAYER
L = X1*(B\C)*X2*(C\B);
M = (A\B)*(L^18)*X2*(L^21)*(B\D);
%REFLECTANCE
E1 = M(2,1)/M(1,1);
E2 = 100*(abs(E1)^2);
Intensity(index) = E2;
Wavelength(index) = range/1e-9;
index = index+1;
end
[Wv,In] = meshgrid(Wavelength,incd);
plot3(Wv,In,Intensity','linewidth',1)
view(-5,60); rotate3d('on');
minWv = 700; % Focus on wavelength from 700 to 800
maxWv = 800;
rangelamda = Wv>700 & Wv<800; % Index for wavelength from 700 to 800
rangeWv = Wv(rangelamda); % Range of wavelength
rangeIntensity = Intensity(Wv>700 & Wv<800); % Intensity for this range of wavelength
[~,idxMin] = max(gradient(rangeIntensity)); % Find the index of having maximum gradient change
WvMin = [WvMin rangeWv(idxMin-1)]; % Store the minimum value for each iRange
end
figure(2)
plot(iRange,WvMin,'b-*');
grid on;
  3 comentarios
Simon Chan
Simon Chan el 24 de Feb. de 2023
Could you restart MATLAB and try once more? And what is the error message?
AdomPadom
AdomPadom el 24 de Feb. de 2023
Apologies - the restart fixed it.
Thank you!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Line Plots en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by