iT邦幫忙

2024 iThome 鐵人賽

DAY 12
2
自我挑戰組

AI救我系列 第 12

Day 12 光學繞射:AI版多狹縫一維傅立葉轉換

  • 分享至 

  • xImage
  •  

連續幾天折騰,原本想說狹縫繞射就到昨天為止,但由於還有一些問題(像是多狹縫想畫far_field遇到虛部被省略等),問AI沒有直接答案...

心一橫,不如這次直接從頭到尾讓chatGPT寫給我看看他的版本吧!

我:
請嘗試用python matplotlib 展示雙狹縫一維傅立葉轉換公式

chatGPT:
https://ithelp.ithome.com.tw/upload/images/20240924/20168442sp3zAAr7Bo.png

其中:

  • 是光源的振幅
  • d是兩個狹縫之間的距離
  • a 是狹縫的寬度
  • λ是光的波長
  • z是狹縫到屏幕的距離
  • x是屏幕上的橫向位置
import numpy as np
import matplotlib.pyplot as plt

# 定義參數
A = 1      # 振幅
d = 0.5    # 狹縫間距(單位:毫米)
a = 0.1    # 狹縫寬度(單位:毫米)
wavelength = 500e-6  # 光的波長(單位:毫米)
z = 1000   # 狹縫到屏幕的距離(單位:毫米)

# 定義x軸
x = np.linspace(-10, 10, 1000)

# 計算雙狹縫光強度分布
intensity = (2 * A * np.cos(np.pi * d * x / (wavelength * z)))**2 * \
            (np.sin(np.pi * a * x / (wavelength * z)) / (np.pi * a * x / (wavelength * z)))**2

# 進行傅立葉轉換
fourier_transform = np.fft.fftshift(np.fft.fft(intensity))
freq = np.fft.fftshift(np.fft.fftfreq(x.size, x[1] - x[0]))

# 繪製結果
plt.figure(figsize=(12, 6))

# 原始光強度分布
plt.subplot(1, 2, 1)
plt.plot(x, intensity)
plt.axvline(x=-d/2, color='r', linestyle='--', label='Slit Position')
plt.axvline(x=d/2, color='r', linestyle='--')
plt.title('Intensity Distribution')
plt.xlabel('x (mm)')
plt.ylabel('Intensity')
plt.legend()

# 傅立葉轉換結果
plt.subplot(1, 2, 2)
plt.plot(freq, np.abs(fourier_transform))
plt.axvline(x=-1/(2*d), color='r', linestyle='--', label='Slit Spacing Frequency')
plt.axvline(x=1/(2*d), color='r', linestyle='--')
plt.title('Fourier Transform of Intensity')
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
plt.legend()

plt.tight_layout()
plt.show()

畫出結果如下:
https://ithelp.ithome.com.tw/upload/images/20240924/20168442vk8r85VmOC.png

只能說...

太強大了

強大到我無法驗證....雖然感覺是對的

就這樣AI又救了我一天~


上一篇
Day 11 - 光學繞射:多狹縫一維傅立葉轉換公式in Python
下一篇
Day 13 - 多狹縫不同波長繞射強度in python
系列文
AI救我31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言