生成高斯光束转换成贝塞尔光束的代码
时间: 2023-07-10 18:36:17 浏览: 80
以下是将高斯光束转换为贝塞尔光束的 Python 代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义高斯光束函数
def gauss_beam(x, y, w0, z, wavelength):
k = 2 * np.pi / wavelength
zr = np.pi * w0 ** 2 / wavelength
wz = w0 * np.sqrt(1 + (z / zr) ** 2)
Rz = z * (1 + (zr / z) ** 2)
phase = k * (x ** 2 + y ** 2) / (2 * Rz) - np.arctan(z / zr)
w = w0 * np.sqrt(1 + ((z - z0) / zr) ** 2)
return np.exp(-((x ** 2 + y ** 2) / w ** 2)) * np.exp(-1j * phase)
# 定义贝塞尔光束函数
def bessel_beam(r, phi, z, zR, w0, wavelength):
k = 2 * np.pi / wavelength
Rz = z + zR ** 2 / z
w = w0 * np.sqrt(1 + (z / zR) ** 2)
phase = k * z + (k * r ** 2 / (2 * Rz)) - np.arctan(z / zR)
return np.exp(-r ** 2 / w ** 2) * np.exp(1j * phase)
# 定义参数
w0 = 10e-3
z0 = 0
zR = np.pi * w0 ** 2 / 633e-9
wavelength = 633e-9
x = np.linspace(-5*w0, 5*w0, 100)
y = np.linspace(-5*w0, 5*w0, 100)
X, Y = np.meshgrid(x, y)
# 生成高斯光束并显示
z = 0
gauss_beam_0 = gauss_beam(X, Y, w0, z, wavelength)
plt.imshow(np.real(gauss_beam_0), cmap='jet')
plt.title('Gaussian beam at z=0')
plt.show()
# 将高斯光束转换为贝塞尔光束并显示
bessel_beam_0 = np.zeros_like(gauss_beam_0)
for i in range(len(x)):
for j in range(len(y)):
r = np.sqrt(x[i] ** 2 + y[j] ** 2)
phi = np.arctan2(y[j], x[i])
bessel_beam_0[i, j] = bessel_beam(r, phi, z, zR, w0, wavelength)
plt.imshow(np.real(bessel_beam_0), cmap='jet')
plt.title('Bessel beam at z=0')
plt.show()
```
上述代码中,先定义了高斯光束和贝塞尔光束的函数,然后通过调整参数生成高斯光束并显示,接着将高斯光束转换为贝塞尔光束并显示。需要注意的是,贝塞尔光束的生成需要通过循环遍历每个点,因此计算时间较长。