{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 拉脱法测液体表面张力系数计算器\n", "\n", "本 Notebook 用于通过力敏传感器测定拉脱法实验中液体(水)的表面张力系数 $\\alpha$。包含砝码电压标定(线性回归求传感器灵敏度 $K$)、拉脱峰值电压与吊环内外径统计、不确定度合成及规范修约。\n", "\n", "---\n", "### 实验原理与数学公式\n", "\n", "#### 1. 表面张力系数计算公式\n", "当薄壁圆环从液体表面被拉脱的一瞬间,所受的最大液体表面张力与圆环内外周长成正比:\n", "$$\\alpha = \\frac{F}{\\pi (d_1 + d_2)}$$\n", "* $F$:最大拉脱力(通过力敏传感器测得 $F = U_{\\mathrm{pull}} / K$)\n", "* $K$:力敏传感器灵敏度 $(\\mathrm{V/N})$ 或 $(\\mathrm{mV/N})$\n", "* $d_1, d_2$:金属圆环的内径与外径\n", "\n", "#### 2. 力敏传感器灵敏度标定\n", "使用单重为 $m$ 的标准小砝码增重与减重 $i$ 个($i = 0, 1, \\dots, 5$),各测得对应的输出电压 $U_{1,i}, U_{2,i}$。取增减重平均值:\n", "$$\\bar{U}_i = \\frac{U_{1,i} + U_{2,i}}{2}, \\quad F_i = i \\cdot m \\cdot g$$\n", "使用最小二乘线性回归对 $(F_i, \\bar{U}_i)$ 拟合直线 $U = K \\cdot F + b$,斜率即为灵敏度 $K$,其标准不确定度记为 $u(K)$。\n", "\n", "#### 3. 不确定度合成与传递\n", "* 拉脱力 $F$ 的相对不确定度:\n", "$$u_r(F) = \\sqrt{ \\left(\\frac{u_U}{\\bar{U}_{\\mathrm{pull}}}\\right)^2 + \\left(\\frac{u_K}{K}\\right)^2 }$$\n", "* 直径和 $(d_1 + d_2)$ 的不确定度:\n", "$$u(d_1 + d_2) = \\sqrt{u^2(d_1) + u^2(d_2)}, \\quad u_r(d_1+d_2) = \\frac{u(d_1 + d_2)}{d_1 + d_2}$$\n", "* 表面张力系数 $\\alpha$ 的总相对不确定度与绝对不确定度:\n", "$$u_r(\\alpha) = \\sqrt{u_r^2(F) + u_r^2(d_1 + d_2)}, \\quad u(\\alpha) = \\alpha \\cdot u_r(\\alpha)$$" ], "id": "781711c13d45a52a" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import math\n", "from decimal import Decimal\n", "from python.utils import scientific_round, calculate_stats, linear_regression\n", "\n", "print(\"表面张力系数模块加载完成。\")" ], "id": "d1f8bddcdc7a754a" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 传感器砝码标定数据输入与拟合\n", "> **提示**:可在此输入单个小砝码质量 `m_mass_g` 以及增重、减重各 6 个点对应的标定电压。" ], "id": "6a7bf3a6389e57db" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "G = Decimal(\"9.80\") # 重力加速度 (m/s^2)\n", "PI = Decimal(str(math.pi))\n", "\n", "# 单个小砝码质量 (g)\n", "m_mass_g = Decimal(\"0.50\")\n", "m_mass_kg = m_mass_g / Decimal(\"1000\")\n", "\n", "# 标定电压 (0~5个砝码, 单位与后续拉脱电压保持统一即可, 如 V 或 mV)\n", "U_calib_1 = [Decimal(\"0.00\"), Decimal(\"0.052\"), Decimal(\"0.104\"), Decimal(\"0.155\"), Decimal(\"0.207\"), Decimal(\"0.259\")] # 增重\n", "U_calib_2 = [Decimal(\"0.00\"), Decimal(\"0.051\"), Decimal(\"0.103\"), Decimal(\"0.156\"), Decimal(\"0.208\"), Decimal(\"0.260\")] # 减重\n", "\n", "# 计算平均电压与外力\n", "U_calib_avg = [(U_calib_1[i] + U_calib_2[i]) / Decimal(\"2\") for i in range(6)]\n", "F_calib = [Decimal(str(i)) * m_mass_kg * G for i in range(6)]\n", "\n", "# 线性回归拟合灵敏度 K\n", "K, K_b, r, u_K = linear_regression(F_calib, U_calib_avg)\n", "\n", "print(\"=\" * 45)\n", "print(\" 传 感 器 标 定 拟 合 结 果 \")\n", "print(\"=\" * 45)\n", "print(f\"灵敏度斜率 K : {K:.6f} (电压单位/N)\")\n", "print(f\"截距 b : {K_b:.6f}\")\n", "print(f\"相关系数 r : {r:.6f}\")\n", "print(f\"斜率不确定度 u_K: {u_K:.6e}\")" ], "id": "db8e4e72f93077d5" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. 拉脱实验数据与圆环几何尺寸输入" ], "id": "37706b6c98e4d762" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 仪器允差\n", "delta_U = Decimal(\"0.001\") # 电压表仪器误差\n", "delta_d = Decimal(\"0.02\") # 游标卡尺仪器误差 (mm)\n", "\n", "# 6次测量数据列表\n", "U_pull_vals = [Decimal(\"0.215\"), Decimal(\"0.214\"), Decimal(\"0.216\"), Decimal(\"0.215\"), Decimal(\"0.213\"), Decimal(\"0.215\")]\n", "d1_vals = [Decimal(\"33.10\"), Decimal(\"33.12\"), Decimal(\"33.08\"), Decimal(\"33.10\"), Decimal(\"33.14\"), Decimal(\"33.10\")] # 内径 (mm)\n", "d2_vals = [Decimal(\"35.20\"), Decimal(\"35.22\"), Decimal(\"35.18\"), Decimal(\"35.20\"), Decimal(\"35.22\"), Decimal(\"35.20\")] # 外径 (mm)\n", "\n", "# 统计各量\n", "U_pull_mean, U_pull_u = calculate_stats(U_pull_vals, delta_U)[:2]\n", "d1_mean, d1_u = calculate_stats(d1_vals, delta_d)[:2]\n", "d2_mean, d2_u = calculate_stats(d2_vals, delta_d)[:2]\n", "\n", "print(f\"拉脱平均电压 U_pull: {U_pull_mean:.4f} ± {U_pull_u:.4f}\")\n", "print(f\"圆环平均内径 d1 : {d1_mean:.3f} ± {d1_u:.3f} mm\")\n", "print(f\"圆环平均外径 d2 : {d2_mean:.3f} ± {d2_u:.3f} mm\")" ], "id": "4898cff018c8803b" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. 表面张力系数计算与不确定度修约" ], "id": "188a7b2b3dc5b54" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 计算拉脱力 F (N)\n", "F_pull_mean = U_pull_mean / K\n", "\n", "# 换算为标准国际单位 m\n", "d1_m = d1_mean / Decimal(\"1000\")\n", "d2_m = d2_mean / Decimal(\"1000\")\n", "d1_u_m = d1_u / Decimal(\"1000\")\n", "d2_u_m = d2_u / Decimal(\"1000\")\n", "d_sum = d1_m + d2_m\n", "\n", "# 表面张力系数 α = F / [π * (d1 + d2)]\n", "alpha_val = F_pull_mean / (PI * d_sum)\n", "\n", "# 不确定度合成传递\n", "u_r_F_sq = (U_pull_u / U_pull_mean)**2 + (u_K / K)**2\n", "u_r_F = Decimal(str(math.sqrt(float(u_r_F_sq))))\n", "\n", "u_d_sum = Decimal(str(math.sqrt(float(d1_u_m**2 + d2_u_m**2))))\n", "u_r_d_sum = u_d_sum / d_sum\n", "\n", "u_r_alpha = Decimal(str(math.sqrt(float(u_r_F**2 + u_r_d_sum**2))))\n", "alpha_u = alpha_val * u_r_alpha\n", "\n", "# 科学修约\n", "alpha_final, u_final = scientific_round(alpha_val, alpha_u)\n", "\n", "print(\"=\" * 45)\n", "print(\" 表 面 张 力 系 数 计 算 结 果 \")\n", "print(\"=\" * 45)\n", "print(f\"最大拉脱力 F : {F_pull_mean:.6f} N\")\n", "print(f\"圆环周长项 (d1+d2): {(d_sum*1000):.3f} mm\")\n", "print(f\"表面张力系数 α (原始): {alpha_val:.6f} N/m\")\n", "print(\"-\" * 45)\n", "print(f\"相对不确定度 u_r : {u_r_alpha * 100:.2f}%\")\n", "print(f\"绝对不确定度 u_α : {alpha_u:.6f} N/m\")\n", "print(\"-\" * 45)\n", "print(f\"★ 最终修约结果 : α = {alpha_final} ± {u_final} N/m\")\n", "print(\"=\" * 45)" ], "id": "74791d410688e40a" } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }