Python光学仿真理解Jones矩阵学习

目录
  • Jones向量
  • Jones矩阵
  • Jones矩阵的表示

Jones向量

假设光波沿z轴传播,那么其三个方向的电场分量可以表示为

Jones矩阵

能够保证二维列向量形状不变的运算有无穷多种,但最符合我们直觉的一定是 2 × 2矩阵。好在这种矩阵已经可以提供足够多的运算,从而满足我们描述偏振变化的需求。

光在通过波片之后,会在不同方向产生差异性的相位延迟,对于与x轴角度为 Ψ,相位差为 Φ 的波片,其Jones矩阵为

Jones矩阵的表示

为了对Jones矩阵所对应的偏振状态进行绘制,我们需要进一步理解Jones矩阵中每个值所对应的物理概念。如果将Jones矩阵写成虚数形式,可以表示为

那么,对于任意Jones矩阵,我们可以很方便地绘制其对应的偏振图像。方便起见,我们只对1.064um光波在z轴方向传播5um这段距离进行采样,然后画出

def drawJones(J=[1,-2j]):
    J = np.array(J).reshape(2,1)
    # 设1.064um的光在z方向传播5um后,沿传播方向看去的振幅分布
    z = np.arange(0,5,0.01)
    k = 2*np.pi/1.064
    # 将J改写成x和y方向的振幅序列
    J = np.abs(J)*np.cos(k*z+np.angle(J))
    fig = plt.figure()
    ax1 = fig.add_subplot(121)
    ax1.plot(J[0],J[1])
    ax2 = fig.add_subplot(122,projection='3d')
    ax2.plot3D(z,J[0],J[1])
        plt.show()
if __name__ == "__main__":
    drawJones()

其图像为

现在光路中引入 λ / 4波片,令其旋转一周,观察一下线偏振光会有怎样的变化,设波片与x轴所成夹角为 Ψ,则其对应的Jones矩阵为

代码为

def drawQuaterPlate():
    quater = lambda psi : np.array(
        [[1-np.cos(2*psi),-1j*np.sin(2*psi)],
         [-1j*np.sin(2*psi),1+np.cos(2*psi)]])
        z = np.arange(0,5,0.01)
    k = 2*np.pi/1.064
    # 初始光波为x方向线偏振光
    J0 = np.array([1,0]).reshape(2,1)
    fig = plt.figure()
    ax = fig.add_subplot(111,xlim=(-2,2),ylim=(-2,2))
    ax.grid()
    line, = ax.plot([],[],lw=0.2)
    time_text = ax.text(0.1,0.9,'',transform=ax.transAxes)
    thetas = np.linspace(0,np.pi*2,80)
    def init():
        line.set_data([],[])
        time_text.set_text("")
        return line, time_text
    def animate(theta):
        J = quater(theta)@J0    #经过波片后的Jones矩阵
        arrJ = np.abs(J)*np.cos(k*z+np.angle(J)) #采样后的振幅
        line.set_data(arrJ[0],arrJ[1])
        time_text.set_text("angle:"+str(theta))
        return line, time_text
    ani = animation.FuncAnimation(fig, animate, thetas,
        interval=100, init_func=init)
    ani.save('polor.gif',writer='imagemagick')
    plt.show()

最终得到偏振情况与波片角度的关系

可见,当角度合适的时候, λ / 4波片会将线偏振光变为圆偏振光。

以上就是Python光学仿真理解Jones矩阵学习的详细内容,更多关于Python光学仿真Jones矩阵的资料请关注我们其它相关文章!

(0)

相关推荐

  • python的常见矩阵运算(小结)

    python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入numpy的包. 1.numpy的导入和使用 from numpy import *;#导入numpy的库函数 import numpy as np; #这个方式使用numpy的函数时,需要以np.开头. 2.矩阵的创建 由一维或二维数据创建矩阵 from numpy import *; a1=array([1,2,3]); a1=mat(a1); 创建常见的矩阵 data1=mat(zeros((3,3)));

  • Python光学仿真从Maxwell方程组到波动方程矢量算法理解学习

    Maxwell方程组是十九世纪最伟大的公式,代表了传统物理学人对公式美学的孜孜追求,也影响了无数后来者的物理美学品味. 回顾历史,当1864年,Maxwell发出那篇著名的<电磁场的动力学理论>时,实则列出了二十个公式,以总结前人的物理学成果,我们将分量公式合并为矢量,可以得到八个式子,即 以上符号分别表示 二十年后,Heaviside对这二十个公式进行重新编排,得到了我们熟悉的形式,并将其命名为麦克斯韦方程组: 对上式中左侧两个旋度公式再取旋度,得到 其中, ∇ E = 0,所以可得到波动方

  • Python numpy中矩阵的基本用法汇总

    Python矩阵的基本用法 mat()函数将目标数据的类型转化成矩阵(matrix) 1,mat()函数和array()函数的区别 Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素,虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价. 直接看一个例子: import numpy as np a = np.mat('1 3;5 7')

  • Python光学仿真学习衍射算法初步理解

    对衍射最经典的解释是Huygens-Fresnel原理,Huygens认为波阵面上每一点都会成为新的波源,这些子波源的相互干涉就形成了衍射.这显然是一种离散的观点,仿佛是专门为程序员准备的一样. 假设一束光打在一个方形孔上,这个方形孔被细分成 n×n个网格,那么每个网格都相当于是一个小孔,而这些小孔的互相干涉,即为衍射.随着网格不断被细分,最终可以逼近真实的衍射情形.那么,假设矩孔处为等相位面,其网格坐标为  (i,j),到衍射屏距离为 d d d,那么对于衍射屏上任意一点P(x,y),其光强为

  • jQuery呼吸轮播图制作原理详解

    本文实例为大家分享了jQuery呼吸轮播图制作原理的具体过程,供大家参考,具体内容如下 轮播图:carousel 呼吸轮播图变种布局重点:所有的图片摞一起. jquery选择元素的能力非常好,但是我们习惯将用到的元素,提前保存到变量.通常我们使用id选中元素.一般我们以$box. 左右按钮防流氓的策略:当图片运动时,不进行任何操作.is() 小圆点的防流氓的策略:立即响应新事件.stop(true) 注意:使用代码时将图片更换,以及需要引入jquery库. 举例: <!DOCTYPE html>

  • Python光学仿真之对光的干涉理解学习

    光的干涉 干涉即两束光在叠加过程中出现的强度周期性变化情况,其最简单的案例即为杨氏双缝干涉. 如图所示,光从 S S S点发出,通过两个狭缝 S 1 , S 2 S_1,S_2 S1​,S2​,最终汇聚在右侧的干涉屏上,在不同位置处将会产生不同的相位差. import numpy as np import matplotlib.pyplot as plt #两束光叠加 waveAdd = lambda I1,I2,theta : I1+I2+2*np.sqrt(I1*I2)*np.cos(the

  • Python光学仿真理解Jones矩阵学习

    目录 Jones向量 Jones矩阵 Jones矩阵的表示 Jones向量 假设光波沿z轴传播,那么其三个方向的电场分量可以表示为 Jones矩阵 能够保证二维列向量形状不变的运算有无穷多种,但最符合我们直觉的一定是 2 × 2矩阵.好在这种矩阵已经可以提供足够多的运算,从而满足我们描述偏振变化的需求. 光在通过波片之后,会在不同方向产生差异性的相位延迟,对于与x轴角度为 Ψ,相位差为 Φ 的波片,其Jones矩阵为 Jones矩阵的表示 为了对Jones矩阵所对应的偏振状态进行绘制,我们需要进

  • python光学仿真相速度和群速度计算理解学习

    目录 波动模型 相速度 群速度 从编程的角度来说,波动光学在某些情况下可以简单地理解为在光线模型的基础上,引入一个相位项. 波动模型 一般来说,三个特征可以确定空间中的波场:频率.振幅和相位,故光波场可表示为: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D z = np.arange(15,200)*10 #单位为nm x = np.arange(15,200)

  • Python光学仿真光的偏振编程理解学习

    目录 光的偏振 光的偏振 由于光波是横波,所以对于任意一个光波,其振幅方向与传播方向在一个固定的平面内.换言之,一束光波可以存在振幅方向不同的一群光波,对于其中一个光波而言,其振幅方向即为偏振方向. 可以画出其示意图 #偏振光演示 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D as axd def polarShow(): z = np.arange(0,5,0

  • Python光学仿真学习处理高斯光束分布图像

    目录 通过python处理光斑图像 1 相关包与图像读取 2 图像截取 3显示强度 4数据拟合 问题 通过python处理光斑图像 1 相关包与图像读取 首先需要科学计算必备包numpy和画图包matplotlib.pyplot,我们通过后者进行图像数据的读取. plt.imread读取图片之后为数据格式为numpy数组,可以通过成员函数astype将整型数据变成浮点型,有利于后期处理. plt.imshow将img的数据加载到窗口,plt.show()显示绘图窗口,默认显示为伪彩图. pyth

  • python光学仿真学习wxpython创建手速测试程序

    滚动条是什么大家自然都是知道的,可以非常直观地显示数据的变化,或者可以非常方便地改变某些数值. 此前在介绍按钮.静态文本.输入文本这三个控件时,相对来说比较乏味,所以这次我们采用需求引导的模式.假如想编写一个软件用来检测打字速度,同时能够非常直观地通过滚动条来显示出来,应该怎么写? 我们大致需要三个控件,文本输入控件用来输入文字:静态文本控件用于显示速度:滚动条用来动态地显示速度.同时,还需要知道系统的时间,总之,代码如下 import wx import time #时间模块 class te

  • Python光学仿真学习Gauss高斯光束在空间中的分布

    目录 Gauss光束强度的表达式为 如图所示 左上图和左下图表示激光传输过程中的其束腰半径的变化情况:右图则表示高斯光束某一横截面处激光的能量分布. 绘制代码如下 import matplotlib.pyplot as plt import numpy as np def setLabel(ax,*args): ax.set_xlabel(args[0]) ax.set_ylabel(args[1]) if len(args)==3: ax.set_zlabel(args[2]) def dra

  • python光学仿真实现光线追迹之空间关系

    目录 空间关系 相交判定 射线排序 线弧关系 点弧关系 空间关系 变化始于相遇,所以交点是一切的核心. 相交判定 首先考察一束光线能否打在某个平面镜上.光线被抽象成了一个列表[a,b,c],平面镜则被抽象成为由两个点构成的线段[(x1,y1),(x2,y2)].两条直线的交点问题属于初等数学范畴,需要先将线段转换成直线的形式,然后再求交点.但是两条直线的交点可能落在线段的外面,从而不具有判定的意义. 如果我们的光学系统中有大量的光学元件,那么如果有一种方法可以快速判断光线是否与光学元件有交点,将

随机推荐