How to normalize the plot to one?
clc;clear all;close all;
syms x y
x0 = -.02:0.001:.02;lambda=532*10^-9;
y0 = -.02:0.001:.02;w0 = 0.002;
omegax=1;omegay=2;zr=pi*w0^2/lambda;
m = 2;
s=1;k=0.0002;Rx=zr;Ry=Rx;
[X0,Y0] = meshgrid(x0,y0);
f = @(x0,y0)sinh((omegax*x0+omegay*y0)/w0).*exp(-(x0.^2+y0.^2)/w0^2).*(x0+(1i*s.*y0)).^m.*exp((1i*k/2)*((x0^2/Rx)+(y0^2/Ry)));
I_numerical = real(abs(vpa(f)));
figure
fcontour(real(I_numerical), [-1 1 -1 1]*1E-2, 'Fill','on', 'MeshDensity',150)
colormap('hot');
colorbar('vert');
axis('equal')

Réponses (1)

Torsten
Torsten le 4 Mai 2023

0 votes

x0 = -.02:0.001:.02;lambda=532*10^-9;
y0 = -.02:0.001:.02;w0 = 0.002;
omegax=1;omegay=2;zr=pi*w0^2/lambda;
m = 2;
s=1;k=0.0002;Rx=zr;Ry=Rx;
[X0,Y0] = meshgrid(x0,y0);
f = @(x0,y0)sinh((omegax*x0+omegay*y0)/w0).*exp(-(x0.^2+y0.^2)/w0^2).*(x0+(1i*s.*y0)).^m.*exp((1i*k/2)*((x0^2/Rx)+(y0^2/Ry)));
Z0 = arrayfun(@(x,y)f(x,y),X0,Y0);
contourf(X0,Y0,real(abs(Z0))/max(real(abs(Z0(:)))))
colormap('hot');
colorbar('vert');
axis('equal')

6 commentaires

Athira T Das
Athira T Das le 4 Mai 2023
How to remove these blacks lines from the plot?
Star Strider
Star Strider le 4 Mai 2023
Try this —
contourf(X0,Y0,real(abs(Z0))/max(real(abs(Z0(:)))), 'EdgeColor','none')
.
I tried this code for my function and showing some error
clc;clear all;close all;
z=100;
y=linspace(-.1,.1,500);x=y;
[X0,Y0] = meshgrid(x,y);
m =1;
lambda=532*10^(-9);
wo = 0.02;
Omega = 30;
k = (2.*pi)./(lambda);
Pho=0.05;sgm=1;
Gamma = ((1i.*k)./(2.*z)) + (1./(Pho.^2)) + (1./(wo.^2));
Gamma_star = subs(Gamma, 1i, -1i);
alpha = (Gamma_star) - 1./((Gamma.*Pho.^4));
C = (1./(4.*(lambda.^2).*(z.^2))).*((pi.^2)./(alpha.*Gamma)).*(1./(2.*1i.*sqrt(Gamma)).^m);
fx = ((Omega.^2)./(4.*Gamma)) + ((1i.*k.*x.*Omega)./(2.*z.*Gamma)) - ((k.^2.*x.^2)./(4.*z.^2.*Gamma));
fy = ((Omega.^2)./(4.*Gamma)) + ((1i.*k.*y.*Omega)./(2.*z.*Gamma)) - ((k.^2.*y.^2)./(4.*z.^2.*Gamma));
gx = ((Omega.^2)./(4.*Gamma)) - ((1i.*k.*x.*Omega)./(2.*z.*Gamma)) - ((k.^2.*x.^2)./(4.*z.^2.*Gamma));
gy = ((Omega.^2)./(4.*Gamma)) - ((1i.*k.*y.*Omega)./(2.*z.*Gamma)) - ((k.^2.*y.^2)./(4.*z.^2.*Gamma));
Bx_p = ((-1i.*k.*x)./(2.*z)) + ((1i.*k.*x)./(2.*z.*Gamma.*Pho.^2)) + (Omega)./(2.*Gamma.*Pho.^2) + (Omega./2);
Bx_n = ((-1i.*k.*x)./(2.*z)) + ((1i.*k.*x)./(2.*z.*Gamma.*Pho.^2)) + (Omega)./(2.*Gamma.*Pho.^2) - (Omega./2);
By_p = ((-1i.*k.*y)./(2.*z)) + ((1i.*k.*y)./(2.*z.*Gamma.*Pho.^2)) + (Omega)./(2.*Gamma.*Pho.^2) + (Omega./2);
By_n = ((-1i.*k.*y)./(2.*z)) + ((1i.*k.*y)./(2.*z.*Gamma.*Pho.^2)) + (Omega)./(2.*Gamma.*Pho.^2) - (Omega./2);
Kx_p = ((-1i.*k.*x)./(2.*z)) + ((1i.*k.*x)./(2.*z.*Gamma.*Pho.^2)) - (Omega)./(2.*Gamma.*Pho.^2) + (Omega./2);
Kx_n = ((-1i.*k.*x)./(2.*z)) + ((1i.*k.*x)./(2.*z.*Gamma.*Pho.^2)) - (Omega)./(2.*Gamma.*Pho.^2) - (Omega./2);
Ky_p = ((-1i.*k.*y)./(2.*z)) + ((1i.*k.*y)./(2.*z.*Gamma.*Pho.^2)) - (Omega)./(2.*Gamma.*Pho.^2) + (Omega./2);
Ky_n = ((-1i.*k.*y)./(2.*z)) + ((1i.*k.*y)./(2.*z.*Gamma.*Pho.^2)) - (Omega)./(2.*Gamma.*Pho.^2) - (Omega./2);
X = 0;
for l = 0:m
L = (((1i).*sgm).^(m-l)).*nchoosek(m,l);
sum_j = 0;
for j = 0:m
J= (((-1i).*sgm).^(m-j)).*nchoosek(m,j);
sum1 = 0.0;
for p = 0:1/2:l/2
faktor1_P = (((-1).^p).*factorial(l))./(gamma(p+1).*factorial(l-(2.*p))).*(((2.*1i)./(sqrt(Gamma))).^(l-(2.*p))).*exp(fx).*exp(fy);
for s1 = 0:l-2*p
faktor1_s1 = nchoosek((l-(2.*p)),s1).*((1./(Pho.^2)).^s1).*((((1i.*k.*x)./(2.*z))+(Omega./2)).^(l-(2.*p)-s1)).*(1./(((2.*1i.*sqrt(alpha))).^(j+s1)));
for q = 0:1/2:(m-l)/2
faktor1_Q = (((-1).^q).*factorial(m-l))./(gamma(q+1).*factorial(m-l-(2.*q))).*(((2.*1i)./(sqrt(Gamma))).^(m-l-(2.*q)));
sum_inner_1=0;
for s2 = 0:m-l-2*q
E1 = (exp(((Bx_p).^2)./alpha).*hermiteH(j+s1,((1i.*Bx_p)./(sqrt(alpha)))).*exp(((By_p).^2)./alpha).*hermiteH(m-j+s2,((1i.*By_p)./(sqrt(alpha))))) - (exp(((Bx_n).^2)./alpha).*hermiteH(j+s1,((1i.*Bx_n)./(sqrt(alpha)))).*exp(((By_n).^2)./alpha).*hermiteH(m-j+s2,((1i.*By_n)./(sqrt(alpha)))));
sum_inner_1 =sum_inner_1+ nchoosek((m-l-(2.*q)),s2).*((1./(Pho.^2)).^s2).*((((1i.*k.*y)./(2.*z))+(Omega./2)).^(m-l-(2.*q)-s2)).*(1./(((2.*1i.*sqrt(alpha))).^(m-j+s2))).*E1;
end
end
end
sum1 = sum1 + faktor1_P.*faktor1_s1.*faktor1_Q.*sum_inner_1;
end
sum_j= sum_j + J.*(sum1);
end
X = X + (L.*sum_j);
end
X = subs(real(C.*X));
I_numerical = real(abs(vpa(X)));
f = @(x,y) I_numerical;
Z0 = arrayfun(@(x1,y1)f(x1,y1),X0,Y0);
Error using arrayfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
contourf(X0,Y0,real(abs(Z0))/max(real(abs(Z0(:)))))
colormap('hot');
colorbar('vert');
axis('equal')
Torsten
Torsten le 4 Mai 2023
Modifié(e) : Torsten le 4 Mai 2023
I_numerical is an array of numerical values of size 1x500, not a function.
So setting
f = @(x,y) I_numerical;
makes no sense since f(x,y) will return this 1x500 array for each value pair (x,y).
I don't know against which independent variable(s) you intend I_numerical to plot.
Athira T Das
Athira T Das le 4 Mai 2023
I need to plot I_numerical w.r.t x and y
Torsten
Torsten le 4 Mai 2023
Then arrange your code such that I_numerical has size 500x500 since x has 500 elements and y has 500 elements.
At the moment, I_numerical has size 1x500.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Contour Plots dans Centre d'aide et File Exchange

Tags

Commenté :

le 4 Mai 2023

Community Treasure Hunt

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

Start Hunting!

Translated by