本帖最后由 一模 于 2021-10-23 23:16 编辑
我感觉是因为函数表达式里的r是一个值,而程序里的R1,Z都是矩阵,所以会造成矩阵纬度不匹配的问题,楼上的大佬说得对,可以用for循环解决,我改了一下程序。
clear
lamda=6328e-10;
R=0.01;
n=1.5;
fai=pi/180;
k=2*pi/lamda;
i=sqrt(-1);
r1=linspace(-0.5,0.5);
z=linspace(0,1000);
% [R1,Z]=meshgrid(r1,z);
% E2=@(r) besselj(0,k.*r.*R1./Z).*exp(i*k.*(r^2+R1.^2)/2/Z).*exp(-i*k.*(n-1).*fai.*r).*r;
% E2=@(r) besselj(0,k.*r.*0.5./1).*exp(i*k*(r.^2+0.5^2)/2/1);
% E3=integral(E2,0,R);
E3=zeros(length(r1),length(z));
for m=1:length(r1)
for n=1:length(z)
% E2=@(r) besselj(0,k.*r.*r1(m)./z(n)).*exp(i*k*(r.^2+r1(m).^2)/2/z(n))
E2=@(r) besselj(0,k.*r.*r1(m)./z(n)).*exp(i*k*(r.^2+r1(m).^2)/2/z(n)).*exp(-i*k.*(n-1).*fai.*r).*r;
E3(m,n)=abs(integral(E2,0,R));
end
end
mesh(E3)
因为我的电脑太慢了,所以直接假设透过率函数为1进行了测试,跑通了,不知道是不是题主想要的。for循环的效率比较低,如果题主有更高效率的方法,我们可以继续交流一下