連續幾天折騰,原本想說狹縫繞射就到昨天為止,但由於還有一些問題(像是多狹縫想畫far_field遇到虛部被省略等),問AI沒有直接答案...
心一橫,不如這次直接從頭到尾讓chatGPT寫給我看看他的版本吧!
我:
請嘗試用python matplotlib 展示雙狹縫一維傅立葉轉換公式
chatGPT:
其中:
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()
畫出結果如下:
只能說...
太強大了
強大到我無法驗證....雖然感覺是對的
就這樣AI又救了我一天~