对你的代码做了点修改,主要是把
r=linspace(0,R,10000);
M=besselj(0,(kryp)/zp)exp(ikrr/(2zp)-ik(n-1)gamar)r; L=trapz(r,M);
改成
L=quadl(@(r)besselj(0,(kryp)/zp)exp(ikrr/(2zp)-ik(n-1)gamar)r,0,R);
直接用积分函数quadl而不是用梯形法trapz,可以在保证精度的基础上大幅提高效率(根据我这里测试,应该至少能提高15倍以上)。
至于结果是否正确,我不敢保证。至少,我看到的程序和你贴出的公式不一样(比如,积分式子前面的从E0开始的那部分在哪里?)
对于光学的东西不是太懂,能做到的只是帮助你更容易地理解程序每一句话,希望对你有帮助
最好将下面的程序复制粘贴到matlab的编辑窗口中再阅读
clear % 清除matlab工作内存
lam=500e-9; %定义一个常数λ: 500乘以10的-9次方
a=1e-3;D=1; %定义常数a:10的-3次方;常数D=1
ym=3lamD/a; %定义ym
ny=51; %定义取点个数 ny=51
ys=linspace(-ym,ym,ny); %定义一个数组ys,从-ym到ym之间取ny个点
np=51; %定义取点个数 np=51
yp=linspace(0,a,np); %定义一个数组yp,从0到a之间取np个点
for i=1:ny %循环语句,一共循环51次
sinphi=ys(i)/D; %计算得到 sinΦ,
alpha=2piypsinphi/lam; % 计算得到 α=2Δ/λ=πypys/λD(由于yp是一个向量,这里得到的α也是一个向量,包含51个数)
sumcos=sum(cos(alpha)); % 计算得到 Σcosα
sumsin=sum(sin(alpha)); % 计算得到 Σsinα
B(i,:)=(sumcos^2+sumsin^2)/np^2; % 计算得到光强 I=I0(Σcosα)2+(Σsinα)2,并存储为矩阵B的第i行
end
N=255;
Br=(B/max(B))N; %计算得到光强分布矩阵
subplot(1,2,1) %将绘图区分成左右两部分,首先在左侧绘图区绘图
image(ym,ys,Br); %绘制光强分布图
colormap(gray(N)); %更改图像模式为灰度图像
subplot(1,2,2) %然后选择在右侧绘图区绘图
plot(B,ys); %绘制光强分布曲线
以上就是关于matlab画图问题,已知光场分布函数作出3光强模拟图,求详细代码全部的内容,包括:matlab画图问题,已知光场分布函数作出3光强模拟图,求详细代码、求详细解释一下这个matlab源程序,并讲讲原理、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)