虚拟实验平台开发方案
虚拟实验平台围绕“操作装置、取得读数、分析数据、解释结果”组织学习过程。每个实验具有独立页面、物理模型、参数说明、文献依据和验证记录,共用站点导航与资源发布流程。
单摆虚拟实验是首个案例。其运动、计时、拟合和摆角扫描由浏览器执行,原报告数据作为独立的观测对照。对应的模型依据说明方程、参数身份、适用范围及引用;维护指南提供文件入口与复现命令。
单摆示例:从测量问题组织页面
用户首先选择有效摆长、初始摆角、重力加速度和计数周期数,释放摆球后观察运动。自动记录保存理想模型的完整周期计时,手动计时记录用户选择的仿真时间间隔;随后改变摆长,收集多组数据并拟合周期平方与摆长的关系。
表 1 单摆案例的交互与学习目标
| 环节 | 页面行为 | 需要理解的物理问题 |
|---|---|---|
| 设置参数 | 改变摆长、初始角度、重力和计数周期数 | 量纲、周期尺度及参数作用 |
| 观察运动 | 播放、暂停、复位,比较非线性轨迹与小角度解 | 有限摆角造成的周期和相位差 |
| 记录计时 | 自动记录完整周期时间,或按同向过点手动开始与停止 | 完整周期的计数与计时方法 |
| 拟合数据 | 按数据来源和相同条件筛选,拟合 $T^2=aL+b$ | 斜率、截距、残差与重力估计 |
| 扫描摆角 | 观察周期增量和小角度公式的偏差 | 近似的适用条件 |
| 观测对照 | 读取原报告的规范数据及派生量 | 模型情景与实际观测的联系 |
| 保存结果 | 在本浏览器保留记录,导出 CSV 与 JSON | 复查参数、单位、数据身份与完整数值 |
手动计时与动画使用同一仿真时钟;暂停时计时同步冻结,页面进入后台时暂停运动。自动计时由精确周期关系生成 $NT$,其确定性结果用于研究模型关系。手动计时保留交互操作带来的起止选择。两类记录分别拟合,原报告观测另列。
拟合使用至少三条记录和两个不同的摆长。对虚拟记录保持重力参数、初始摆角及数据来源一致,再比较摆长与周期。页面给出的标准误来自回归残差,解释范围限于当前回归模型;仪器与系统效应需要相应的测量依据和不确定度预算。
单摆示例:模型与应用界面分层
平台使用原生 ES modules。各实验的物理函数独立于页面,绘图接收明确的数据序列,控制器负责用户操作与状态。simulations/registry.json关联45项实验的资源、文献和验收入口;页面通过同一GitHub Pages构建发布。下表以单摆说明分层。
表 2 首个案例的代码与数据分工
| 文件 | 职责 |
|---|---|
simulations/pendulum/model.mjs |
参数校验、非线性周期、数值积分、能量、自动计时与拟合 |
simulations/pendulum/chart.mjs |
SVG 坐标轴、曲线、观测点、标注及自适应布局 |
simulations/pendulum/app.mjs |
控件联动、仿真时钟、记录筛选、本地保存与导出 |
simulations/pendulum/lab.css |
页面布局、中文宋体、西文与数字 Times New Roman、图表样式 |
simulations/pendulum/index.html |
实验操作、数据分析、模型说明与可访问语义 |
simulations/pendulum/observations.json |
原报告观测、派生量、来源及源文件哈希 |
docs/simulation/pendulum-reference.json |
SciPy 参考计算、参数组、容差及浏览器模型对照记录 |
非线性周期由算术几何平均法计算第一类完全椭圆积分;运动轨迹用四阶 Runge–Kutta 方法积分。两条计算路径分别服务于周期读数和连续运动展示,验证时相互联系,并与独立计算对照。具体数学定义和参数范围见模型依据。
观测 JSON 由 scripts/validate_pendulum_simulation.py 从实验 CSV、配置、来源记录和已有结果生成。人工维护的观测源仍位于 experiments/course-01/pendulum/data/;源哈希用于定位网页所用的具体输入。
文献证据先于模型扩展
每个实验维护一张可追溯的证据矩阵。方程和参数分别记录依据,模型适用域与软件控件范围分别说明;计算方法另有数值验证。
表 3 实验模型的证据矩阵
| 内容 | 记录要点 | 对应验证 |
|---|---|---|
| 模型方程 | 文献条目、章节或页码、公式定位、符号定义 | 解析关系、物理极限、独立推导 |
| 实验参数 | 来源文档、单位、有效数字、实测或情景身份 | 单位换算、源表复核、输入哈希 |
| 适用范围 | 模型假设、初始与边界条件、参数域 | 边界条件、极限状态及参数域测试 |
| 数值算法 | 离散方法、步长或误差容限、特殊函数约定 | 收敛性、守恒量、独立求解器比较 |
| 测量解释 | 读数形成过程、拟合模型、误差定义 | 已知算例、合成数据与观测对照 |
基础理论可复用公共教材与方法文献,具体装置、修正项和参数需要逐实验核对。文献条目使用稳定 DOI 或出版机构入口,证据定位到实际阅读的正文。后续增加阻尼、仪器分辨率或其他效应时,先补充参数来源和验证方案,再开放相应控件。
可复现与发布流程
在仓库根目录准备 Python 项目依赖与 Node.js 后,运行:
python scripts/validate_simulations.py --experiment course-01/pendulum
python scripts/validate_simulations.py --all
python -m pytest
python scripts/agent_catalog.py build
python scripts/agent_catalog.py build --check
python scripts/check_agent_docs.py
python scripts/build_pages.py
python scripts/check_pages.py --report .build/pages/verification.json
验证脚本用 SciPy 的椭圆积分与 DOP853 求解器构造独立基准,再检验浏览器模型的周期、轨迹、能量和步长收敛性。模型单元测试同时检查输入范围、标度关系、计时与拟合条件。验证结果中的状态、容差、环境和源哈希共同描述该次检查。
站点构建将页面和运行资源发布到 simulations/pendulum/,并添加公共导航、MathJax、规范 URL 和站点地图。本地预览遵循网页构建指南,使用 HTTP 并保留 GitHub 项目子路径。前端验收覆盖默认状态、参数变化、计时暂停、记录筛选、导出、数学排版和窄屏布局。
正式报告、Jupyter 与 Wolfram Notebook 保留各自的复现流程。平台更新以原成稿的文件哈希为回归依据,新增网页入口、模型和验证记录单独核对。
系列实验与公共接口
表 4 系列实验的模型与操作分工
| 实验组 | 重点 | 验证方式 |
|---|---|---|
| 跨领域先导 | RLC幅相扫频、牛顿环测微、弦驻波 | 独立电路方程、光程与曲率、波动本征关系 |
| 基础测量 | 称量、运动探针、周期定标、成像与光强 | 守恒、运动学、几何及投影关系 |
| 电路与仪表 | 滑片、换接、调零、量程、游标与参数反演 | 节点/回路方程、加载、复阻抗和平衡 |
| 测角与光学读数 | 双游标、反射折射、标尺、旋光与条纹计数 | 矢量光线、圆周角差及独立成像计算 |
| 动力学与场 | 振动相位、刚体质量、探针与四极性换向 | ODE、质量积分、场边界、线积分和奇偶投影 |
| 力热与材料 | 加载、力定标、落球、温升与热传导 | 几何、低Re条件、能量分项与空间收敛 |
| 器件与计算成像 | 器件工作点、复场空间滤波与全息传播 | 厂商条件、KCL、独立FFT、采样与传播收敛 |
各实验保留独立的物理求解、测量步骤和拟合条件。统一构建负责字体与数学资源、站点导航、资源白名单、项目子路径、验收哈希与Agent目录;通用执行器负责语法检查、模型测试和独立参考计算。记录和导出共同保存实验标识、模型版本、参数与单位、来源类别、原始读数及派生结果,具体列由测量方式决定。
每项沿“资料与全文 → 模型规格 → 实现 → 数值验证 → 前端验收 → 上线”推进。检查点保存源与代码哈希、结果、失败原因和下一步;只重跑变更影响的阶段。科学与前端通过后,页面加入正式目录,共享变更触发已上线实验回归。
使用系列科学入口阅读公共理论与逐项证据,使用检索和复现指南接手代码与构建。原有报告、Jupyter和Wolfram沿已批准基线保持,并以文件哈希核对。