Python
import numpy as np
import matplotlib.pyplot as plt

# Part (a): Thin Soap Film in Air
n1_air = 1.0
n2_soap = 1.4
n3_air = 1.0
d_soap = 1e-6  # 1 micron

# Phase difference as a function of wavelength
wavelengths = np.linspace(400e-9, 700e-9, 300)  # Visible range in meters
phi = (4 * np.pi * n2_soap * d_soap) / wavelengths

# Fresnel equations for normal incidence
r12 = (n1_air - n2_soap) / (n1_air + n2_soap)
r23 = (n2_soap - n3_air) / (n2_soap + n3_air)

R = (r12**2 + r23**2 + 2 * r12 * r23 * np.cos(phi)) / (1 + r12**2 * r23**2 + 2 * r12 * r23 * np.cos(phi))
T = 1 - R

# Plotting Reflectance and Transmittance for soap film
plt.figure(figsize=(12, 6))
plt.plot(wavelengths * 1e9, R, label="Reflectance (R)")
plt.plot(wavelengths * 1e9, T, label="Transmittance (T)")
plt.xlabel("Wavelength (nm)")
plt.ylabel("Reflectance / Transmittance")
plt.title("Reflectance and Transmittance of a Thin Soap Film")
plt.legend()
plt.grid(True)
plt.show()

# Part (b): MgF2 Film on Glass
n2_MgF2 = 1.38
n3_glass = 1.7
lambda_target = 550e-9  # 550 nm in meters

# Thickness for minimum reflection
d_MgF2 = lambda_target / (4 * n2_MgF2)
print(f"Thickness of MgF2 film for minimum reflection at 550 nm: {d_MgF2} meters")

# Part (c): Semiconductor Film on Glass
n2_semiconductor = 3.5
n3_glass = 1.55

# Calculate phase difference as a function of wavelength for the semiconductor
# film
phi_semiconductor = (4 * np.pi * n2_semiconductor * d_soap) / wavelengths

# Fresnel coefficients for the semiconductor film
r12_semiconductor = (n1_air - n2_semiconductor) / (n1_air + n2_semiconductor)
r23_semiconductor = (n2_semiconductor - n3_glass) / (n2_semiconductor + n3_glass)

R_semiconductor = (r12_semiconductor**2 + r23_semiconductor**2 + 2 * r12_semiconductor * r23_semiconductor * np.cos(phi_semiconductor)) / (1 + r12_semiconductor**2 * r23_semiconductor**2 + 2 * r12_semiconductor * r23_semiconductor * np.cos(phi_semiconductor))
T_semiconductor = 1 - R_semiconductor

# Plotting Reflectance and Transmittance for semiconductor film
plt.figure(figsize=(12, 6))
plt.plot(wavelengths * 1e9, R_semiconductor, label="Reflectance (R)")
plt.plot(wavelengths * 1e9, T_semiconductor, label="Transmittance (T)")
plt.xlabel("Wavelength (nm)")
plt.ylabel("Reflectance / Transmittance")
plt.title("Reflectance and Transmittance of a Thin Semiconductor Film on Glass")
plt.legend()
plt.grid(True)
plt.show()
Thickness of MgF2 film for minimum reflection at 550 nm: 9.96376811594203e-08 meters