matlab画图问题,已知光场分布函数作出3光强模拟图,求详细代码

matlab画图问题,已知光场分布函数作出3光强模拟图,求详细代码,第1张

对你的代码做了点修改,主要是把

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源程序,并讲讲原理、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10079358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存