ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SymPy 光偏振建模:基于 Jones 与 Stokes 演算的偏振光学元件仿真指南

SymPy 光偏振建模:基于 Jones 与 Stokes 演算的偏振光学元件仿真指南 SymPy 光偏振建模基于 Jones 与 Stokes 演算的偏振光学元件仿真指南【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympySymPy 的physics.optics.polarization模块为光的偏振态建模提供了一套完整的符号计算工具它以 Jones 向量、Stokes 向量、Jones 矩阵与 Mueller 矩阵四种表示法为核心让研究者可以用符号表达式描述线偏振、圆偏振、椭圆偏振等任意偏振态并通过矩阵运算模拟线偏振片、半波片、四分之一波片、偏振分束器等元件对光束的作用。本文以 polarization.rst 所挂接的模块文档为主体结合 polarization.py 的实现源码与 test_polarization.py 的测试用例系统讲解每个 API 的参数含义、数学定义、标准偏振态速查与完整可运行的工程示例。读完本文你将能够用 SymPy 独立完成偏振态定义 → 元件矩阵构建 → 光路级联仿真 → 输出功率/偏振态分析的完整闭环。一、模块概览四种表示法与文件定位在 SymPy 的光学模块sympy/physics/optics/中polarization.py 专门负责偏振建模其模块文档明确列出四类核心数据结构Jones 向量2×1 复向量描述完全偏振光的振幅与相位Stokes 向量4×1 实向量可描述部分偏振光乃至完全非偏振光Jones 矩阵2×2 复矩阵表示线偏振片、波片等偏振元件的传输特性Mueller 矩阵4×4 实矩阵作用于 Stokes 向量的偏振元件表示。这一组 API 通过 sympy/physics/optics/init.py 对外统一导出__all__中列出了jones_vector、stokes_vector、jones_2_stokes、linear_polarizer、phase_retarder、half_wave_retarder、quarter_wave_retarder、transmissive_filter、reflective_filter、mueller_matrix、polarizing_beam_splitter共 11 个函数因此既可以按子模块导入也可以直接从sympy.physics.optics顶层导入# 方式一按子模块导入文档示例风格 from sympy.physics.optics.polarization import ( jones_vector, stokes_vector, jones_2_stokes, linear_polarizer, phase_retarder, half_wave_retarder, quarter_wave_retarder, transmissive_filter, reflective_filter, mueller_matrix, polarizing_beam_splitter) # 方式二从 optics 顶层导入与 __init__.py 的导出一致 from sympy.physics.optics import jones_vector, stokes_vector需要说明的是仓库中的 polarization.rst 采用 Sphinxautomodule指令从模块 docstring 自动生成文档页本文下述全部 API 说明、参数表与示例均直接取自该模块的 docstring并可用源码与测试逐一验证。二、Jones 向量jones_vector(psi, chi)2.1 参数与数学定义jones_vector(psi, chi)生成与某个偏振椭圆对应的 Jones 向量参数含义如下polarization.py参数类型含义psi数值或 SymPy Symbol偏振椭圆相对x轴的倾斜角tiltchi数值或 SymPy Symbol偏振椭圆长轴邻角circularity决定椭圆率返回值sympy.Matrix2×1 Jones 向量其实现为源码 L193-L194return Matrix([-I*sin(chi)*sin(psi) cos(chi)*cos(psi), I*sin(chi)*cos(psi) sin(psi)*cos(chi)])即$$J \begin{pmatrix} \cos\chi\cos\psi - i\sin\chi\sin\psi \ \sin\psi\cos\chi i\sin\chi\cos\psi \end{pmatrix}$$由于psi、chi可直接传入 Symbol用户拿到的是未经数值化的符号表达式可继续参与后续化简、求导或代入求值。通用的 Jones 向量打印如下 from sympy import symbols, pprint from sympy.physics.optics.polarization import jones_vector psi, chi symbols(psi, chi, realTrue) pprint(jones_vector(psi, chi), use_unicodeTrue) ⎡-ⅈ⋅sin(χ)⋅sin(ψ) cos(χ)⋅cos(ψ)⎤ ⎢ ⎥ ⎣ⅈ⋅sin(χ)⋅cos(ψ) sin(ψ)⋅cos(χ) ⎦2.2 标准偏振态速查模块 docstring 给出了六大标准偏振态它们是 Poincaré 球上的六个轴端点也是后续一切光路仿真的常用输入 from sympy import pi H jones_vector(0, 0) # 水平偏振 → (1, 0) V jones_vector(pi/2, 0) # 垂直偏振 → (0, 1) D jones_vector(pi/4, 0) # 对角偏振 → (√2/2, √2/2) A jones_vector(-pi/4, 0) # 反对角偏振 → (√2/2, -√2/2) R jones_vector(0, pi/4) # 右旋圆偏振 → (√2/2, i·√2/2) L jones_vector(0, -pi/4) # 左旋圆偏振 → (√2/2, -i·√2/2)对应矩阵形式汇总偏振态参数(psi, chi)Jones 向量水平偏振 H(0, 0)$\begin{pmatrix}1\0\end{pmatrix}$垂直偏振 V(π/2, 0)$\begin{pmatrix}0\1\end{pmatrix}$对角偏振 D(π/4, 0)$\tfrac{\sqrt2}{2}\begin{pmatrix}1\1\end{pmatrix}$反对角偏振 A(-π/4, 0)$\tfrac{\sqrt2}{2}\begin{pmatrix}1\-1\end{pmatrix}$右旋圆偏振 R(0, π/4)$\tfrac{\sqrt2}{2}\begin{pmatrix}1\i\end{pmatrix}$左旋圆偏振 L(0, -π/4)$\tfrac{\sqrt2}{2}\begin{pmatrix}1\-i\end{pmatrix}$这些断言在 test_polarization.py 中通过jones_vector(0, 0) Matrix([1, 0])、jones_vector(pi/2, 0) Matrix([0, 1])得到了直接验证。三、Stokes 向量stokes_vector(psi, chi, p1, I1)3.1 参数stokes_vector(psi, chi, p, I)生成与同一偏振椭圆对应的 4×1 Stokes 向量polarization.py参数默认值含义psi必填偏振椭圆相对x轴的倾斜角chi必填偏振椭圆长轴邻角p1偏振度degree of polarization0 表示完全非偏振I1光场强度intensity返回值—4×1 Stokes 向量 $(S_0, S_1, S_2, S_3)^T$3.2 数学定义源码 L316-L320 展示了四个分量的符号构造S0 I S1 I*p*cos(2*psi)*cos(2*chi) S2 I*p*sin(2*psi)*cos(2*chi) S3 I*p*sin(2*chi) return Matrix([S0, S1, S2, S3])即$$S \begin{pmatrix} I \ I p \cos 2\psi \cos 2\chi \ I p \sin 2\psi \cos 2\chi \ I p \sin 2\chi \end{pmatrix}$$S0是总光强S1/S2/S3分别对应 Poincaré 球上的三个坐标轴分量。注意I是模块内参数名若用户自定义的强度符号也叫I需自行处理命名冲突文档示例中使用I0作符号名实参仍传入I。3.3 标准偏振态与非偏振光 pprint(stokes_vector(0, 0), use_unicodeTrue) # 水平偏振 ⎡1⎤ ⎢1⎥ ⎢0⎥ ⎣0⎦完整速查表偏振态参数Stokes 向量 $(S_0,S_1,S_2,S_3)$水平偏振(0, 0)$(1, 1, 0, 0)$垂直偏振(pi/2, 0)$(1, -1, 0, 0)$对角偏振(pi/4, 0)$(1, 0, 1, 0)$反对角偏振(-pi/4, 0)$(1, 0, -1, 0)$右旋圆偏振(0, pi/4)$(1, 0, 0, 1)$左旋圆偏振(0, -pi/4)$(1, 0, 0, -1)$非偏振光(0, 0, 0)p0$(1, 0, 0, 0)$非偏振光是p0时的退化情形——此时S1S2S30只剩总强度分量。这一行为同样被测试用例覆盖test_polarization.py 断言了 H、V 两种偏振的 Stokes 形式。四、Jones 向量 → Stokes 向量jones_2_stokes(e)jones_2_stokes(e)将任意 2×1 Jones 向量e换算为 4×1 Stokes 向量polarization.py其实现直接给出了两种表示之间的代数对应ex, ey e return Matrix([Abs(ex)**2 Abs(ey)**2, Abs(ex)**2 - Abs(ey)**2, 2*re(ex*ey.conjugate()), -2*im(ex*ey.conjugate())])即$$S_0 |E_x|^2 |E_y|^2,\quad S_1 |E_x|^2 - |E_y|^2,\quad S_2 2,\mathrm{Re}(E_x E_y^),\quad S_3 -2,\mathrm{Im}(E_x E_y^)$$这是两个演算体系之间的桥在本模块中承担两个重要角色一是把 Jones 演算的结果转成 Stokes 形式观察如后文综合案例中的功率提取二是作为mueller_matrix推导的数学基础。文档示例将六大标准偏振态批量转换 from sympy.physics.optics.polarization import jones_2_stokes H jones_vector(0, 0) V jones_vector(pi/2, 0) D jones_vector(pi/4, 0) A jones_vector(-pi/4, 0) R jones_vector(0, pi/4) L jones_vector(0, -pi/4) pprint([jones_2_stokes(e) for e in [H, V, D, A, R, L]], use_unicodeTrue) ⎡⎡1⎤ ⎡1 ⎤ ⎡1⎤ ⎡1 ⎤ ⎡1⎤ ⎡1 ⎤⎤ ⎢⎢1⎥ ⎢-1⎥ ⎢0⎥ ⎢0 ⎥ ⎢0⎥ ⎢0 ⎥⎥ ⎢⎢0⎥, ⎢0 ⎥, ⎢1⎥ ⎢-1⎥ ⎢0⎥ ⎢0 ⎥⎥ ⎣⎣0⎦ ⎣0 ⎦ ⎣0⎦ ⎣0 ⎦ ⎣1⎦ ⎣-1⎦⎦输出结果与stokes_vector直接生成的标准态完全一致右旋圆偏振的S31、左旋为S3-1该等价关系在 test_polarization.py 中被逐项断言。五、偏振光学元件Jones 矩阵库模块用 2×2 Jones 矩阵表示各类偏振元件。将 Jones 向量左乘元件矩阵即可得到出射偏振态多元件级联时按光路顺序从右往左相乘。5.1 线偏振片linear_polarizer(theta0)theta为透振轴相对水平面的夹角polarization.pyM Matrix([[cos(theta)**2, sin(theta)*cos(theta)], [sin(theta)*cos(theta), sin(theta)**2]])即$$J_{LP}(\theta) \begin{pmatrix} \cos^2\theta \sin\theta\cos\theta \ \sin\theta\cos\theta \sin^2\theta \end{pmatrix}$$典型用例linear_polarizer(0)得到水平透振的偏振片 $\begin{pmatrix}10\00\end{pmatrix}$只保留水平分量测试中以Matrix([[1, 0], [0, 0]])断言test_polarization.py。5.2 相位延迟片phase_retarder(theta0, delta0)theta为快轴相对水平面的夹角delta为快慢轴之间的相位差polarization.pyR Matrix([[cos(theta)**2 exp(I*delta)*sin(theta)**2, (1-exp(I*delta))*cos(theta)*sin(theta)], [(1-exp(I*delta))*cos(theta)*sin(theta), sin(theta)**2 exp(I*delta)*cos(theta)**2]]) return R*exp(-I*delta/2)实现上函数先构造标准形式的延迟矩阵再整体乘以全局相位因子 $e^{-i\delta/2}$。当theta0时退化为对角矩阵$$R(0, \delta) \begin{pmatrix} e^{-i\delta/2} 0 \ 0 e^{i\delta/2} \end{pmatrix}$$该退化形式在测试中通过phase_retarder(0, delta) Matrix([[exp(-I*delta/2), 0], [0, exp(I*delta/2)]])精确断言test_polarization.py。5.3 半波片与四分之一波片这两个元件是phase_retarder的固定参数特例polarization.pydef half_wave_retarder(theta): A half-wave retarder Jones matrix at angle theta. return phase_retarder(theta, pi) def quarter_wave_retarder(theta): A quarter-wave retarder Jones matrix at angle theta. return phase_retarder(theta, pi/2)半波片delta pi可旋转偏振方向、将圆偏振的旋向取反四分之一波片delta pi/2可将线偏振转换为圆偏振或反之。theta0时的标准形式在测试中被验证test_polarization.py$$HWP(0) \begin{pmatrix} -i 0 \ 0 i \end{pmatrix},\qquad QWP(0) \begin{pmatrix} e^{-i\pi/4} 0 \ 0 i e^{-i\pi/4} \end{pmatrix}$$通用角度下half_wave_retarder(theta)的符号矩阵为 theta symbols(theta, realTrue) pprint(half_wave_retarder(theta), use_unicodeTrue) ⎡ ⎛ 2 2 ⎞ ⎤ ⎢-ⅈ⋅⎝- sin (θ) cos (θ)⎠ -2⋅ⅈ⋅sin(θ)⋅cos(θ) ⎥ ⎢ ⎥ ⎢ ⎛ 2 2 ⎞⎥ ⎣ -2⋅ⅈ⋅sin(θ)⋅cos(θ) -ⅈ⋅⎝sin (θ) - cos (θ)⎠⎦5.4 透射滤波片与反射滤波片transmissive_filter(T)polarization.py透射率为T的衰减器矩阵为 $\begin{pmatrix}\sqrt T 0 \ 0 \sqrt T\end{pmatrix}$。T1时为单位阵即无衰减测试 L47 断言reflective_filter(R)polarization.py反射率为R的反射滤波片矩阵为 $\begin{pmatrix}\sqrt R 0 \ 0 -\sqrt R\end{pmatrix}$其(2,2)元取负号——这正是反射过程引入 $\pi$ 相位跳变的符号体现。R1时得到 $\begin{pmatrix}10\0-1\end{pmatrix}$测试 L49 断言。 R symbols(R, realTrue) pprint(reflective_filter(R), use_unicodeTrue) ⎡√R 0 ⎤ ⎢ ⎥ ⎣0 -√R⎦六、Mueller 矩阵mueller_matrix(J)及其实现原理mueller_matrix(J)把任意 2×2 Jones 矩阵J转换为对应的 4×4 Mueller 矩阵polarization.py其实现揭示了两种演算体系间的深层联系A Matrix([[1, 0, 0, 1], [1, 0, 0, -1], [0, 1, 1, 0], [0, -I, I, 0]]) return simplify(A*TensorProduct(J, J.conjugate())*A.inv())即$$M A, (J \otimes J^*), A^{-1}$$其中 $A$ 是从偏振基矢到 Stokes 基矢的固定变换矩阵$\otimes$ 是 Kronecker 积源码中直接复用了sympy.physics.quantum的TensorProduct最终通过simplify得到最简的符号表达。正因为 Jones 矩阵可无损地升级为 Mueller 矩阵同一光学元件可以同时服务于完全偏振与部分偏振两种场景。文档示例给出三个典型元件的 Mueller 矩阵theta为符号变量时线偏振片$$M_{LP} \begin{pmatrix} \frac12 \frac{\cos 2\theta}{2} \frac{\sin 2\theta}{2} 0 \ \frac{\cos 2\theta}{2} \frac{\cos 4\theta}{4}\frac14 \frac{\sin 4\theta}{4} 0 \ \frac{\sin 2\theta}{2} \frac{\sin 4\theta}{4} \frac14-\frac{\cos 4\theta}{4} 0 \ 0 0 0 0 \end{pmatrix}$$半波片$$M_{HWP} \begin{pmatrix} 1 0 0 0 \ 0 8\sin^4\theta-8\sin^2\theta1 \sin 4\theta 0 \ 0 \sin 4\theta -8\sin^4\theta8\sin^2\theta-1 0 \ 0 0 0 -1 \end{pmatrix}$$四分之一波片$$M_{QWP} \begin{pmatrix} 1 0 0 0 \ 0 \frac{\cos 4\theta}{2}\frac12 \frac{\sin 4\theta}{2} -\sin 2\theta \ 0 \frac{\sin 4\theta}{2} \frac12-\frac{\cos 4\theta}{2} \cos 2\theta \ 0 \sin 2\theta -\cos 2\theta 0 \end{pmatrix}$$数值特例mueller_matrix(linear_polarizer(0))的结果 $\frac12\begin{pmatrix}1100\1100\0000\0000\end{pmatrix}$ 在 test_polarization.py 中被精确断言。七、偏振分束器polarizing_beam_splitter(...)偏振分束器PBS是模块中结构最复杂的元件。与前述 2×2 Jones 矩阵不同它返回一个4×4 矩阵作用对象是两个 Jones 向量拼接而成的 4×1 状态向量前两行存放入射/出射的一个端口分量后两行存放另一端口分量polarization.py。参数默认值含义Tp1P 偏振分量的透射率Rs1S 偏振分量的反射率Ts0S 偏振分量的透射率Rp0P 偏振分量的反射率phia0输出模式 a 中透射与反射分量之间的相位差phib0输出模式 b 中透射与反射分量之间的相位差通用形式来自 docstring 的 pprint 输出 Ts, Rs, Tp, Rp symbols(rTs, Rs, Tp, Rp, positiveTrue) phia, phib symbols(phi_a, phi_b, realTrue) pprint(polarizing_beam_splitter(Tp, Rs, Ts, Rp, phia, phib), use_unicodeFalse) [ ____ ____ ] [ \/ Tp 0 I*\/ Rp 0 ] [ ] [ ____ ____ I*phi_a] [ 0 \/ Ts 0 -I*\/ Rs *e ] [ ] [ ____ ____ ] [I*\/ Rp 0 \/ Tp 0 ] [ ] [ ____ I*phi_b ____ ] [ 0 -I*\/ Rs *e 0 \/ Ts ]对应矩阵$$M_{PBS} \begin{pmatrix} \sqrt{T_p} 0 i\sqrt{R_p} 0 \ 0 \sqrt{T_s} 0 -i\sqrt{R_s},e^{i\phi_a} \ i\sqrt{R_p} 0 \sqrt{T_p} 0 \ 0 -i\sqrt{R_s},e^{i\phi_b} 0 \sqrt{T_s} \end{pmatrix}$$理想的 PBS 取默认值TpRs1, TsRp0此时矩阵退化为$$M_{PBS}^{ideal} \begin{pmatrix} 1 0 0 0 \ 0 0 0 -i \ 0 0 1 0 \ 0 -i 0 0 \end{pmatrix}$$这一默认形式在 test_polarization.py 中被断言。注意其中的相位因子 $e^{i\phi_a}$、$e^{i\phi_b}$ 允许用户建模非理想分束器引入的端口间相位延迟而Tp/Rs/Ts/Rp的正值符号约定使其可表达任意分光比。八、综合案例半波片 偏振分束器的功率分配模块文档的核心示例演示了完整光路仿真一束任意偏振光先后经过半波片HWP与理想偏振分束器PBS计算两输出端口透射端口与反射端口的功率随初始偏振与波片角度的变化关系。 from sympy import symbols, pprint, zeros, simplify from sympy.physics.optics.polarization import ( ... jones_vector, stokes_vector, half_wave_retarder, ... polarizing_beam_splitter, jones_2_stokes) psi, chi, p, I0 symbols(psi, chi, p, I0, realTrue) # 1) 定义初始偏振态通用椭圆偏振的 Jones 向量 x0 jones_vector(psi, chi) # 2) 半波片旋转偏振方向 alpha symbols(alpha, realTrue) HWP half_wave_retarder(alpha) x1 simplify(HWP*x0) # 3) 将 Jones 向量放入 4×1 状态向量的前两行PBS 处理后取两个端口 PBS polarizing_beam_splitter() X1 zeros(4, 1) X1[:2, :] x1 X2 PBS*X1 transmitted_port X2[:2, :] reflected_port X2[2:, :] # 4) 用 Stokes 向量的 S0 分量总强度计算两端口功率 transmitted_power jones_2_stokes(transmitted_port)[0] reflected_power jones_2_stokes(reflected_port)[0] print(transmitted_power) cos(-2*alpha chi psi)**2/2 cos(2*alpha chi - psi)**2/2 print(reflected_power) sin(-2*alpha chi psi)**2/2 sin(2*alpha chi - psi)**2/2结果解读透射功率 $P_t \tfrac12\cos^2(2\alpha - \chi - \psi) \tfrac12\cos^2(2\alpha \chi - \psi)$反射功率 $P_r \tfrac12\sin^2(2\alpha - \chi - \psi) \tfrac12\sin^2(2\alpha \chi - \psi)$恒有 $P_t P_r 1$理想无损耗分束的能量守恒可通过simplify(transmitted_power reflected_power)验证。这个案例集中体现了本模块的工作流符号定义初始态 → 用元件矩阵做线性代数变换 → 用jones_2_stokes提取物理可观测量。整个过程不涉及任何数值逼近得到的是可直接做进一步符号分析的闭式表达式。九、测试与验证数值断言一览test_polarization.py 以 9 组断言对模块行为做了最小验证集可作为读者自查公式正确性的对照表断言验证内容jones_vector(0,0) Matrix([1,0])水平偏振 Jones 向量jones_vector(pi/2,0) Matrix([0,1])垂直偏振 Jones 向量stokes_vector(0,0) Matrix([1,1,0,0])水平偏振 Stokes 向量stokes_vector(pi/2,0) Matrix([1,-1,0,0])垂直偏振 Stokes 向量6 个标准态jones_2_stokes结果两种表示法的换算一致性linear_polarizer(0) [[1,0],[0,0]]水平偏振片phase_retarder(0,delta) diag(e^{-iδ/2}, e^{iδ/2})快轴水平的延迟片half_wave_retarder(0) [[-i,0],[0,i]]半波片特例quarter_wave_retarder(0) diag(e^{-iπ/4}, i e^{-iπ/4})四分之一波片特例transmissive_filter(1)、reflective_filter(1)无损耗滤波片mueller_matrix(linear_polarizer(0))Jones→Mueller 转换特例polarizing_beam_splitter()默认矩阵理想 PBS这些断言同时构成了模块 API 契约的一部分——任何对上述函数实现的修改都必须保持这些数学性质不变因而它们也是理解函数语义的最简洁参考。十、小结与使用建议sympy.physics.optics.polarization将经典的 Jones 演算与 Mueller 演算完整落地为 SymPy 符号 API其设计要点可概括为四种表示法覆盖全场景Jones 向量/矩阵适合完全偏振光的相干叠加分析Stokes 向量/Mueller 矩阵可延伸至部分偏振与非偏振光jones_2_stokes与mueller_matrix提供了两个体系之间的严格换算polarization.py 内两个转换函数实现即证据。元件库开箱即用偏振片、相位延迟片、半波片、四分之一波片、透射/反射滤波片、偏振分束器共 6 类元件均支持符号参数可直接拼装任意光路。符号输出可继续分析所有结果都是 SymPy 表达式可继续simplify、求导、代入数值或直接用于后续的物理量提取。实际使用建议仿真完全偏振光路时优先使用 Jones 演算矩阵更小、更快需要刻画偏振度或混合偏振光时先用mueller_matrix把元件升级为 Mueller 矩阵再作用于 Stokes 向量多元件级联时务必注意矩阵相乘顺序与光路方向相反。相关参考文档可继续查阅 optics 模块索引偏振子模块即其中的polarization.rst以及同目录下 gaussopt.rst、utils.rst 等其他光学子模块文档。【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表