数据与计算方法
全项目输入与结果约定
实验登记表为 experiments/registry.json。各实验以对应 DOCX 的记录为主数据集;CSV 保存读数与来源身份,JSON 保存单位、仪器参数、模型和空值含义。测量批次、讲义例值、转录更正及来源说明分别记录在各实验的 data/ 与 results/ 中。
结果采用 metrics、tables、series、notes 结构,记录输入哈希、代码哈希、运行环境和未修约计算值。指标容差按物理量尺度与实验定义设置。不确定度的分量及适用条件随结果一同记录。Python 与 Wolfram 分别实现算法,使用共同的物理量、单位和展示标签。
以下以单摆为例说明数据处理方法。各实验的模型、参数与不确定度定义见其 experiment.json、报告和计算模块。
数据约定
每行计时记录对应一个长度组的一次重复测量,主键为 (run_id, repeat_id)。摆线长和直径在 CSV 中保留源表的 cm 数字及小数位;计算读取时转换为 m。oscillations 表示全振动次数。experiment.json 定义字段单位、模型、重复次数、仪器信息和对照容差。
计算从原始读数求均值、周期和结果。缺测读数以空值保存,待补充的仪器误差限在 JSON 中记为 null。来源记录包含原文件路径、SHA-256、表格定位和整理说明。
拟合与不确定度
采用含截距的普通最小二乘拟合:$T^2=kL'+b$,由 $g=4\pi^2/k$ 求重力加速度。残差标准差使用 $n-2$ 自由度。计时均值的 A 类标准不确定度来自重复测量的样本标准差;重力回归标准误由斜率标准误传播得到。结果分别列出这两类统计量,当前分析范围为重复性与回归分量。
共享球半径对各组有效摆长产生相同平移,含截距拟合的斜率对该平移不变。当前拟合将有效摆长视为给定值;考虑长度测量误差的误差变量模型需要相应仪器参数。
模型与验证
无阻尼单摆方程为 $\ddot\theta=-(g/L')\sin\theta$。初始角度由度转换为弧度,初始角速度为零。Python 使用 SciPy DOP853,Wolfram 使用 NDSolveValue;数值周期取首次经过平衡位置时刻的四倍,并与完整椭圆积分比较。椭圆积分参数为 $\sin^2(\theta_0/2)$。
摆角扫描取 1、5、10、20、30、45、60 度。运动示例取初始摆角 20 度、有效摆长 1 m、时长 10 s,重力参数采用实验拟合值。这些参数定义了数值模型情景;测量记录另见原始数据表。
结果约定
两端 JSON 共享 metrics、processed、simulation 和 amplitude_scan 结构。指标值带单位;输入由相同文件的哈希标识,计算模块另记代码哈希。逐指标、处理表和扫描结果使用 rtol=1e−8、atol=1e−12;ODE 轨迹使用 rtol=1e−6、atol=1e−8。atol 使用对应指标的声明单位。
误差比较基于未修约数值。报告构建检查两端输入和代码是否仍为当前版本,校验成功后写入结果。.build/ 保存临时预览与本地检查,发布成果保存必要的静态图及真实输出。