import numpy as np
import matplotlib.pyplot as plt
# Параметры
L = 1.0 # м
b = 0.131e-3 # м
lam = 1.703e-6 # м
I0 = 1.0
# Экспериментальные точки
x_min1_exp = 0.011 # м (1-й минимум)
x_max1_exp = 0.012 # м (1-й максимум)
x_min2_exp = 0.017 # м (2-й минимум)
# Теоретические точки (по формуле sin_phi = k * 0.013)
k_values = [1, 2]
x_theor = [L * k * 0.013 for k in k_values]
# Диапазон координат для графика
x = np.linspace(-0.03, 0.03, 1000) # от -3 до 3 см
# Расчёт интенсивности
alpha = (np.pi * b * x) / (lam * L)
# Обработка случая alpha = 0 (центральный максимум)
I = np.where(alpha == 0, I0, I0 * (np.sin(alpha) / alpha)**2)
# Построение графика
plt.figure(figsize=(10, 6))
plt.plot(x * 100, I, label='Теоретический график', linewidth=2)
# Отметка экспериментальных точек
plt.axvline(x_min1_exp * 100, color='red', linestyle='--', label='1-й минимум (эксп.)')
plt.axvline(-x_min1_exp * 100, color='red', linestyle='--')
plt.axvline(x_max1_exp * 100, color='green', linestyle='--', label='1-й максимум (эксп.)')
plt.axvline(-x_max1_exp * 100, color='green', linestyle='--')
plt.axvline(x_min2_exp * 100, color='blue', linestyle='--', label='2-й минимум (эксп.)')
plt.axvline(-x_min2_exp * 100, color='blue', linestyle='--')
# Отметка теоретических минимумов
for xt in x_theor:
plt.axvline(xt * 100, color='purple', linestyle=':', label='Теоретические минимумы' if xt == x_theor[0] else "")
plt.axvline(-xt * 100, color='purple', linestyle=':')
plt.xlabel('Координата x, см')
plt.ylabel('Относительная интенсивность I/I₀')
plt.title('Распределение интенсивности при дифракции Фраунгофера на одной щели')
plt.legend()
plt.grid(True, alpha=0.3)
plt.ylim(0, 1.1)
plt.show()