How to normalize plot?

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

回答(1 个)

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 个评论

How to remove these blacks lines from the plot?
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 2023-5-4
编辑:Torsten 2023-5-4
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.
I need to plot I_numerical w.r.t x and y
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.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Contour Plots 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by