激光谐振腔稳定模式的Fox-Li迭代算法

本文介绍了使用C++编程实现激光谐振腔中的Fox-Li迭代算法,以模拟激光谐振腔自再现模式。内容包括理论基础、算法实现以及使用OpenGL进行3D模场分布图的绘制。此外,文章还讨论了如何通过后台线程避免阻塞UI,并提供了代码下载链接。
摘要由CSDN通过智能技术生成

这学期的激光课设,要求编程实现一个Fox-Li(福克斯-李)迭代算法,用于模拟激光谐振腔中的自再现模式。同时要求有友好的界面,和三维的模场分布图。

大学里面的课设嘛,一般都是用Matlab做,不过这次我想好好弄一弄,想要用C++写(计算速度快),想要有真正的3D图像(用OpenGL),当然,也许我只是想装B。


一、理论基础

激光谐振腔中的模式分部,往往没有解析解,因此只能通过数值计算的方式研究其分部。Fox-Li迭代算法是最常用的方法,其本质是菲涅耳衍射积分:



对当前源光场u做积分,得到下一个反射镜上的光场,再将该光场作为源光场再积分,得到再下一个反射镜上的光场,以此类推,如此反复,直到光场u的分布趋于稳定。

对于上面的积分,用Matlab的话是轻而易举的,但我既然选择了使用C++,就有必要对上面的积分进行一些变换了,方便代码的编写。

很显然的,我们需要将上式的实部和虚部分开,由于u(x,y)本身是一个复场,因此我们设:


将积分离散化后,变为求和,即下式:


其中u0为下一平面的光场分部。

再将上式的实部与虚部合并在一起,并令左边实部等于右边实部,左边虚部等于右边虚部,可得:


使用以上两式,就可以分别计算光场的实部和虚部,其中在以上各式中:


为简单起见,我只考虑了不同形状的平面腔,因此:

,L为谐振腔的腔长。

在实现上述算法时,一定要注意归一化,即每迭代完一次后,需将所有点的幅值均除以最大值,否则每次迭代都会使幅值减小,最终整个光场就什么也没有了。当然也可以对相位进行归一化,每个相位都减去最小值,由于是否对相位归一化对计算没有影响,所以不是必须的。


二、程序编写

为了获得真正的3D分布图,需要使用OpenGL,这里我选择熟悉的Openframeworks作为开发框架。不管其他的,先把Fox-Li迭代算法写出来才行啊!

void testApp::FoxLiIntegral()
{
	vector<ofVec4f> src_field;
	src
  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值