Files
Calculators-for-University-…/python/Newton's rings.ipynb
T

162 lines
6.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 牛顿环曲率半径计算 (逐差法)\n",
"\n",
"本 Notebook 用于通过读数显微镜测得的牛顿环干涉暗环直径平方数据,利用**逐差法**计算平凸透镜的曲率半径 $R$,并完成高精度的合成不确定度评定与结果修约。\n",
"\n",
"---\n",
"### 实验原理与数学公式\n",
"\n",
"#### 1. 牛顿环曲率半径计算公式\n",
"平凸透镜与平板玻璃构成的空气薄膜发生等厚干涉,第 $m$ 级暗环直径为 $D_m$。第 $i+M$ 级与第 $i$ 级暗环直径平方差为:\n",
"$$\\Delta_i = D_{i+M}^2 - D_i^2 = 4 M R \\lambda$$\n",
"逐差平均值:\n",
"$$\\Delta_{\\mathrm{avg}} = \\frac{1}{M} \\sum_{i=1}^M \\Delta_i$$\n",
"曲率半径 $R$ 为:\n",
"$$R = \\frac{\\Delta_{\\mathrm{avg}}}{4 M \\lambda}$$\n",
"* $\\lambda$:单色光波长(钠黄光默认取 $\\lambda = 589.3\\,\\mathrm{nm} = 0.0005893\\,\\mathrm{mm}$)\n",
"* $M$:逐差跨度(通常第 11~30 环,分为 11~20 环与 21~30 环,跨度 $M = 10$)\n",
"\n",
"#### 2. 不确定度传递公式\n",
"* **A 类不确定度**(针对逐差后的 $\\Delta_i$ 项):\n",
"$$s_\\Delta = \\sqrt{\\frac{1}{M-1} \\sum_{i=1}^M (\\Delta_i - \\Delta_{\\mathrm{avg}})^2}, \\quad u_A(\\Delta) = \\frac{s_\\Delta}{\\sqrt{M}}$$\n",
"* **B 类不确定度**(由读数显微镜测量误差传递):\n",
"设显微镜坐标不确定度为 $u(x) = \\frac{\\Delta_{\\mathrm{inst}}}{\\sqrt{3}}$,则直径 $D = x_R - x_L$ 的平方 $D^2$ 的不确定度满足 $u^2(D^2) = 8 D^2 u^2(x)$。\n",
"由逐差平均传播可得:\n",
"$$u_B^2(\\Delta_{\\mathrm{avg}}) = \\frac{8 u^2(x)}{M^2} \\sum_{i=1}^M (D_i^2 + D_{i+M}^2)$$\n",
"* **合成不确定度传递到曲率半径 $R$**:\n",
"$$u(\\Delta) = \\sqrt{u_A^2(\\Delta) + u_B^2(\\Delta_{\\mathrm{avg}})}, \\quad u(R) = \\frac{u(\\Delta)}{4 M \\lambda}$$"
],
"id": "6a150fa764d0b625"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"from decimal import Decimal\n",
"from python.utils import scientific_round\n",
"\n",
"print(\"牛顿环计算模块加载完成。\")"
],
"id": "9218591496bcc1bc"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. 实验常数与暗环测量数据输入\n",
"> **提示**:`d_squared_vals` 为第 11 到 30 环的暗环直径平方 $D^2\\,(\\mathrm{mm^2})$(共 20 个数据)。"
],
"id": "924c4d14704f767a"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 钠光波长 λ (mm)\n",
"WAVELENGTH = Decimal(\"0.0005893\")\n",
"\n",
"# 仪器参数\n",
"delta_inst = Decimal(\"0.005\") # 读数显微镜仪器误差限 (mm)\n",
"\n",
"# 第 11 环 ~ 第 30 环的 D^2 数据 (mm^2)\n",
"# 示例数据 (请按实际实验数据替换):\n",
"d_squared_vals = [\n",
" Decimal(\"12.15\"), Decimal(\"13.20\"), Decimal(\"14.35\"), Decimal(\"15.42\"), Decimal(\"16.55\"),\n",
" Decimal(\"17.68\"), Decimal(\"18.72\"), Decimal(\"19.85\"), Decimal(\"20.90\"), Decimal(\"22.05\"),\n",
" Decimal(\"23.15\"), Decimal(\"24.28\"), Decimal(\"25.40\"), Decimal(\"26.50\"), Decimal(\"27.62\"),\n",
" Decimal(\"28.75\"), Decimal(\"29.80\"), Decimal(\"30.95\"), Decimal(\"32.00\"), Decimal(\"33.15\")\n",
"]\n",
"\n",
"print(f\"光波波长 λ: {WAVELENGTH} mm\")\n",
"print(f\"显微镜误差 Δ_inst: {delta_inst} mm\")\n",
"print(f\"已载入暗环平方数据点数: {len(d_squared_vals)}\")"
],
"id": "959e1b03984add7a"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. 逐差计算与曲率半径求解"
],
"id": "d92aa19f25481c10"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"M = 10 # 逐差项数\n",
"deltas = []\n",
"sum_d_pairs = Decimal(\"0\")\n",
"\n",
"print(\"--- 逐差过程 (Δ_i = D_{i+10}^2 - D_i^2) ---\")\n",
"for i in range(10):\n",
" d_low_sq = d_squared_vals[i]\n",
" d_high_sq = d_squared_vals[i + 10]\n",
" diff = d_high_sq - d_low_sq\n",
" deltas.append(diff)\n",
" sum_d_pairs += (d_low_sq + d_high_sq)\n",
" print(f\"Δ_{i+11:02d} = D_{i+21}^2 - D_{i+11}^2 = {diff:.3f} mm^2\")\n",
"\n",
"mean_delta = sum(deltas) / Decimal(str(M))\n",
"\n",
"# 曲率半径 R = Δ_avg / (4 * M * λ)\n",
"denominator = Decimal(\"4\") * Decimal(str(M)) * WAVELENGTH\n",
"r_val = mean_delta / denominator\n",
"\n",
"# 不确定度计算\n",
"# 1. A 类不确定度\n",
"variance_delta = sum((x - mean_delta)**2 for x in deltas) / Decimal(str(M - 1))\n",
"s_delta = Decimal(str(math.sqrt(float(variance_delta))))\n",
"u_a_delta = s_delta / Decimal(str(math.sqrt(M)))\n",
"\n",
"# 2. B 类不确定度传播\n",
"u_x = delta_inst / Decimal(str(math.sqrt(3)))\n",
"u_b_delta_sq = (Decimal(\"8\") * (u_x**2) * sum_d_pairs) / (Decimal(str(M))**2)\n",
"u_b_delta = Decimal(str(math.sqrt(float(u_b_delta_sq))))\n",
"\n",
"# 3. 合成不确定度并在 R 上传递\n",
"u_delta_combined = Decimal(str(math.sqrt(float(u_a_delta**2 + u_b_delta**2))))\n",
"u_r = u_delta_combined / denominator\n",
"\n",
"# 4. 科学修约\n",
"r_final, u_final = scientific_round(r_val, u_r)\n",
"\n",
"print(\"\\n\" + \"=\" * 45)\n",
"print(\" 牛 顿 环 曲 率 半 径 计 算 结 果 \")\n",
"print(\"=\" * 45)\n",
"print(f\"逐差平均差值 Δ_avg : {mean_delta:.4f} mm^2\")\n",
"print(f\"差值标准差 s(Δ) : {s_delta:.4f} mm^2\")\n",
"print(f\"A 类不确定度 u_A(Δ) : {u_a_delta:.4f} mm^2\")\n",
"print(f\"B 类不确定度 u_B(Δ) : {u_b_delta:.4f} mm^2\")\n",
"print(\"-\" * 45)\n",
"print(f\"曲率半径 R (原始) : {r_val:.4f} mm ({r_val/1000:.4f} m)\")\n",
"print(f\"合成不确定度 u(R) : {u_r:.4f} mm\")\n",
"print(\"-\" * 45)\n",
"print(f\"★ 最终修约结果 : R = {r_final} ± {u_final} mm\")\n",
"print(\"=\" * 45)"
],
"id": "6258ef3d424cf16f"
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}