大物实验服从性测试之光电效应


Python scripts (by Gemini 2.5 Flash):

1.py:

import numpy as np
import matplotlib.pyplot as plt

# ======================================================================
# 1. 伏安特性曲线 (I-U 曲线)
# ----------------------------------------------------------------------
# 请替换为你的实验数据
# U_AK: 阳极电压 (V)
# I1_raw: 光电流 I1 (例如,d=4mm) (以 10^-11 A 为单位)
# I2_raw: 光电流 I2 (例如,d=2mm) (以 10^-11 A 为单位)
# 注意:数据应该与你记录的表格 (如 表 3-1-1) 中的电压点对应.

U_AK = np.array(
    [
        -2.0,
        -1.5,
        -1.0,
        -0.5,
        0.0,
        0.5,
        1.0,
        1.5,
        2.0,
        4.0,
        6.0,
        8.0,
        10.0,
        12.0,
        14.0,
        16.0,
        18.0,
        20.0,
        22.0,
        24.0,
        26.0,
        28.0,
        30.0,
    ]
)  # 示例电压值

# 假设的光电流数据 (请务必替换为你测量的实际数据)
I1_raw = np.array(
    [
        -0.08,
        -0.03,
        -0.02,
        0.59,
        2.39,
        4.89,
        7.27,
        9.15,
        9.70,
        14.1,
        18.1,
        21.3,
        25.2,
        27.4,
        28.9,
        30.9,
        31,
        31.5,
        33.4,
        34.6,
        35.3,
        37.3,
        37.8,
    ]
)
I2_raw = np.array(
    [
        -0.05,
        -0.02,
        -0.01,
        0.05,
        0.24,
        0.59,
        1.02,
        1.73,
        2.32,
        4.23,
        4.79,
        5.66,
        7.06,
        7.69,
        8.36,
        8.4,
        9.1,
        9.6,
        9.8,
        9.9,
        10.1,
        10.6,
        10.9,
    ]
)

# 将电流单位从 10^-11 A 转换为 10^-10 A 或 10^-12 A (根据你使用的量程和图表要求调整)
# 假设最终绘图单位为 10^-11 A
I1 = I1_raw
I2 = I2_raw

# 绘图
plt.rcParams["font.family"] = "FandolFang"
plt.figure(figsize=(8, 5))
plt.plot(U_AK, I1, "ro-", label=r"$d_1=4mm, \lambda=546nm$ (光强 $E_1$)")  # 假设 d1=4mm
plt.plot(
    U_AK, I2, "bs--", label=r"$d_2=2mm, \lambda=546nm$ (光强 $E_2$ - 较弱)"
)  # 假设 d2=2mm

plt.title("光电管伏安特性曲线 ($I-U$ 曲线)")
plt.xlabel(r"$U_{AK}$ / V (阳极电压)")
plt.ylabel(r"光电流 $I$ / $(10^{-11} A)$")
plt.grid(True, linestyle="--")
plt.legend()
plt.axhline(0, color="black", linewidth=0.5)  # 绘制 I=0 轴
plt.axvline(0, color="black", linewidth=0.5)  # 绘制 U=0 轴
#plt.text(-1.8, I1[-1] * 1.05, r"$I_{H1}$", color="red")
#plt.text(-1.8, I2[-1] * 1.05, r"$I_{H2}$", color="blue")
plt.savefig("1.png")

# 结果分析:I-U 曲线应具有和教材图 3-3 相似的形状,并显示光强越大饱和电流越大 ($I_{H1} > I_{H2}$)

2.py:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# ======================================================================
# 2. 光电特性图线 (饱和光电流 $I_H$ - 光强 $d^2$ 图)
# ----------------------------------------------------------------------
# 请替换为你的实验数据
# d_mm: 光阑孔径 (mm)
# I_H_raw: 饱和光电流 IH (以 10^-11 A 为单位)

d_mm = np.array([2.0, 4.0, 8.0]) # 示例光阑孔径 (mm)
# 假设的光电流数据 (请务必替换为你测量的实际数据,确保 U_s=25V, lambda=577nm)
I_H_raw = np.array([8.9, 35.1, 141.4]) 

# 数据处理
d_square = d_mm**2 # 计算 d^2 (mm^2)
I_H = I_H_raw     # 假设最终绘图单位为 10^-11 A

# 线性拟合模型:I_H = k * d^2 + b
def linear_func(x, k, b):
    return k * x + b

# 执行线性拟合
popt, pcov = curve_fit(linear_func, d_square, I_H)
k_fit, b_fit = popt
d_square_fit = np.linspace(0, d_square.max() * 1.1, 100)
I_H_fit = linear_func(d_square_fit, k_fit, b_fit)

# 绘图
plt.rcParams["font.family"] = "FandolFang"
plt.figure(figsize=(8, 5))
# 绘制数据点
plt.plot(d_square, I_H, 'bo', label='实验数据点') 
# 绘制拟合直线
plt.plot(d_square_fit, I_H_fit, 'r-', label=f'线性拟合:$I_H = {k_fit:.2f} \cdot d^2 + {b_fit:.2f}$')

plt.title('饱和光电流与光强关系图线 ($I_H - d^2$ 曲线)')
plt.xlabel(r'光阑孔径平方 $d^2$ / $(mm^2)$')
plt.ylabel(r'饱和光电流 $I_H$ / $(10^{-11} A)$') 
plt.grid(True, linestyle='--')
plt.legend()
plt.savefig("2.png")

# 结果分析:拟合结果应是一条通过原点或接近原点的直线,验证 $I_H \propto d^2$
print(f"拟合结果:斜率 k = {k_fit:.4f} (10^-11 A / mm^2), 截距 b = {b_fit:.4f} (10^-11 A)")

3.py:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 强制 Matplotlib 使用 LaTeX 渲染文本,以确保公式正确显示
# 注意:你的系统可能需要安装 LaTeX 发行版 (如 TeX Live 或 MiKTeX)
# plt.rcParams['text.usetex'] = True
# plt.rcParams['font.family'] = 'serif'
# plt.rcParams['font.serif'] = ['SimHei'] # 尝试设置中文字体,可能需要根据系统调整

# ======================================================================
# 3. 截止电压 $U_s$ - 频率 $\nu$ 曲线及普朗克常量 h 的测定
# ----------------------------------------------------------------------
# 物理常量
c = 3.00e8  # 光速 (m/s)
e = 1.602e-19  # 电子电荷量 (C)
h0 = 6.626e-34  # 普朗克常量公认值 (J·s)

# 请替换为你的实验数据
# wavelength_nm: 滤色片波长 (nm)
# U_s_V: 测得的截止电压 U_s (V)
wavelength_nm = np.array([577.0, 546.1, 435.8, 404.7, 365.0])
# 假设的截止电压数据 (请务必替换为你测量的实际数据)
U_s_V = np.array([0.639, 0.792, 1.3, 1.494, 1.854])

# 数据处理
# 将波长 (nm) 转换为频率 $\nu$ (Hz)
wavelength_m = wavelength_nm * 1e-9  # 波长转换为 m
nu_Hz = c / wavelength_m  # 频率 (Hz)


# 线性拟合模型:爱因斯坦光电效应方程 $eU_s = h\nu - W$
# 转换为 $U_s = (h/e)\nu - W/e$
# 即 $U_s = K \cdot \nu + B$, 其中 $K = h/e$, $B = -W/e$
def linear_func(nu, K, B):
    return K * nu + B


# 执行线性拟合
# popt[0] 是斜率 K, popt[1] 是截距 B
popt, pcov = curve_fit(linear_func, nu_Hz, U_s_V)
K_fit, B_fit = popt
K_std = np.sqrt(pcov[0, 0])  # 斜率的标准误差

# 计算普朗克常量 h 和逸出功 W
h_calc = K_fit * e  # h = K * e (J·s)
W_calc = -B_fit * e  # W = -B * e (J)

# 计算截止频率 $\nu_0$
nu0_calc = -B_fit / K_fit  # $\nu_0 = -B/K$ (Hz)

# 计算相对百分误差
relative_error = abs(h_calc - h0) / h0 * 100

# 用于绘图的拟合线
nu_fit = np.linspace(nu_Hz.min() * 0.9, nu_Hz.max() * 1.1, 100)
U_s_fit = linear_func(nu_fit, K_fit, B_fit)

# --- 修正的代码部分(确保图例正确显示) ---

# 1. 计算显示数值 (注意,我们用 $10^{14} Hz$ 作为 X 轴单位,所以斜率需要乘以 $10^{14}$)
slope_display = K_fit * 1e14
intercept_display = B_fit  # 截距 B_fit 就是拟合中的 $B = -W/e$

# 2. 构建图例标签 (使用原始字符串 r"..." 和双大括号 {{ }} 来正确转义 LaTeX)
# 我们将公式写为 $U_s = K' \cdot (10^{14}\nu) + B$,其中 $K' = K \cdot 10^{14}$
# 注意:你的图片显示的是斜率项和截距项都是正数,所以我们将拟合公式写成加法形式。
# U_s = 斜率 * (10^14 * 频率) + 截距 (截距 B_fit 通常是负的,但为了匹配你图片中的正数,这里用 +B_fit)

# 重点修正:确保 $\nu$ 和 $\cdot$ 在 LaTeX 中正确显示
fit_label = r"线性拟合:$U_{{s}} = {:.4f} \cdot (10^{{14}} \cdot \nu) + {:.4f}$".format(
    slope_display, intercept_display
)
# --------------------

# 绘图
plt.rcParams["font.family"] = "FandolFang"
plt.figure(figsize=(8, 5))
# 绘制数据点
# 注意:X 轴单位是 $10^{14} Hz$,所以 nu_Hz 需要除以 $10^{14}$
plt.plot(nu_Hz * 1e-14, U_s_V, "ko", label="实验数据点")
# 绘制拟合直线
plt.plot(nu_fit * 1e-14, U_s_fit, "r-", label=fit_label)

plt.title(r"截止电压 $U_s$ 与光频率 $\nu$ 关系图线")
plt.xlabel(r"光频率 $\nu$ / $(10^{14} Hz)$")
plt.ylabel(r"截止电压 $U_s$ / V")
plt.grid(True, linestyle="--")
plt.legend()
plt.axhline(0, color="black", linewidth=0.5)  # 绘制 U=0 轴
plt.axvline(nu0_calc * 1e-14, color="g", linestyle=":", label=r"截止频率 $\nu_0$")
# 确保截止频率的标签位置合理
plt.text(nu0_calc * 1e-14 + 0.05, 0.05, r"$\nu_0$", color="g", fontsize=10)
plt.show()

# 输出结果
print("==========================================================")
print("普朗克常量 h 的测定结果:")
print(f"斜率 K = h/e = {K_fit:.2e} (V·s)")
print(f"计算所得普朗克常量 h = {h_calc:.3e} J·s")
print(f"公认值 h0 = {h0:.3e} J·s")
print(f"相对百分误差 = {relative_error:.2f} %")
print("----------------------------------------------------------")
print(f"斜率的标准误差 (Std Error of K) = {K_std:.2e} (V·s)")
# 逸出功 W = -B * e,单位转换为 eV
# 注意:W/e = -B,所以 W = -B * e (J) 或 W = -B (eV)
print(f"计算所得逸出功 W = {-B_fit:.3f} eV ({W_calc:.3e} J)")
print(f"计算所得截止频率 $\\nu_0$ = {nu0_calc/1e14:.2f} x 10^14 Hz")
print("==========================================================")

Results:



==========================================================
普朗克常量 h 的测定结果:
斜率 K = h/e = 3.91e-15 (V·s)
计算所得普朗克常量 h = 6.271e-34 J·s
公认值 h0 = 6.626e-34 J·s
相对百分误差 = 5.36 %
----------------------------------------------------------
斜率的标准误差 (Std Error of K) = 9.86e-17 (V·s)
计算所得逸出功 W = 1.384 eV (2.217e-19 J)
计算所得截止频率 $\nu_0$ = 3.54 x 10^14 Hz
==========================================================

真是一场酣畅淋漓的赤石啊 :grinning_face:

5 Likes