problem-formalization-coach
当题面已经干净、但不知道该调用哪条物理定律,或者用了定律却说不清它在这里凭什么成立时使用。把问题拆成已知量、未知量、约束三栏,为每一条给定条件追出它背后的定律,并强制写明该定律在本题的适用条件;每条假设标出它近似掉了哪段物理;用未知数与独立方程的计数判断问题定不定得下来。检出凭空补进来的量和"用了定律但没写条件"的条目。不列出解、不推导、不给数值答案。
SKILL.mdskills/physics/problem-formalization-coach/SKILL.md
GitHub物理原理拆解教练 / Problem Formalization Coach
把一份干净题面变成一份定律台账:每条条件对应哪条定律,那条定律在这里凭什么成立, 它一旦不成立先毁掉哪个结论。
它止步于"可以开始解了"。列方程组、化简、求解都由使用者本人做—— 这一步正是物理训练里最不该被代替的部分。
何时使用 / When to use
- 题面清楚,但不确定该用能量、动量、角动量还是直接写牛顿方程
- 知道要用某条定律,却说不出它在这里为什么适用
- 想知道条件够不够,会不会漏了一个约束
- 做过一遍但心里没底,想检查前提是不是在某一步被悄悄破坏了
- 要把假设写进论文或答辩稿,需要每条都能辩护
不适用于 / Not for:
- 题面还没整理干净 —— 先用
competition-scenario-extractor - 现象开放,还不知道有哪些机制 —— 用
physics-mechanism-decomposer - 方程已经列出来但解不动 —— 用
problem-representation-scout - 想让人帮忙把公式推出来 —— 本 skill 不做;想弄清某条公式从哪条守恒律来,用
concept-to-formula-deriver(会被评分的推导由本人写) - 数学建模题(含评分规则、数据口径、交付物)—— 用
modeling-problem-reading-coach;本 skill 只处理要追定律与适用条件的物理题面
需要的输入 / Inputs
| 输入 | 必填 | 说明 |
|---|---|---|
| 干净题面 | 是 | 最好是 competition-scenario-extractor 的产物;否则至少要有给定量和要求的产物 |
| 要求的产物 | 是 | 求什么量、在哪个时刻、相对什么参考系 |
| 使用者已有的思路 | 否 | 有的话按它检查,比从零开始更有用 |
流程 / Process
1. 三栏分离
| 栏 | 判断问题 | 常见错分 |
|---|---|---|
| 已知量 | 题面直接给了数或函数形式 | 把"可以查到的常数"当已知而不标【标准值】 |
| 未知量 | 要求的量,加上所有中间量 | 约束力(绳张力、支持力、摩擦力)是未知量,最常被漏掉 |
| 约束 | 限制了状态之间关系的等式或不等式 | 只写了运动学约束,漏了"保持接触"这种会在某一刻失效的约束 |
每个量给稳定 ID,写清属于哪个物体、哪个时刻、相对哪个参考系。
"速度 v"不是合格条目,"小球在离开斜面瞬间相对地面的速度 v₁"才是。
2. 数自由度
对 N 个质点的三维系统:
位形自由度 = 3N − (完整约束个数)
刚体在三维是 6 个自由度,在平面是 3 个。
完整约束与非完整约束要分开数。 完整约束(绳长不变、沿固定轨道)直接降低位形空间维数;
非完整约束(平面上纯滚动的球)不降低位形空间维数,只限制可达的速度方向——
球有 5 个位形坐标(x、y 加三个姿态角),纯滚动给出 2 条速度约束,
所以瞬时只有 3 个独立速度分量;但位形空间仍是 5 维的,球依然能滚到任意位置并取到任意姿态。
把非完整约束当完整约束去减,自由度会数少。
3. 建定律台账
这是本 skill 的核心产物。 每条要用的定律占一行,四格全部必填:
| 定律 | 用在哪一步 / 哪个阶段 | 本题为什么满足它的条件 | 条件被破坏时先失效的结论 |
|---|
第三格写不出来,就说明这一步还没想清楚,不要往下推。
适用条件查 _shared/law-applicability-table.md。几个必须点名的高频项:
- 用动量守恒:要说的是"碰撞时间内外力冲量远小于内力冲量",不是"因为是碰撞"。
- 用机械能守恒:要说清哪些力做功、约束力为什么不做功。滑动摩擦、绳突然绷直、 非弹性碰撞出现时这条就不成立。
- 用角动量守恒:必须点名参考点,而且它得是惯性系里的固定点或系统质心。
- 用
F = ma:质量必须恒定。变质量系统要回到F_ext = dp/dt并单独处理被抛出或 并入的物质带走/带来的动量。 - 用基尔霍夫电压定律:要说明回路没有被变化的磁通穿过。
- 用伯努利方程:定常、不可压、无黏、沿同一条流线,四条缺一不可。
4. 建假设台账
假设与定律不同:定律有适用条件,假设是主动选择的近似。每条写四格:
| 假设 | 近似掉了什么物理 | 作用域(哪个阶段 / 哪个量) | 失效后果(结论会怎么变) |
|---|
区分四类,不要混在一起(沿用 modeling-assumption-builder 的分法):
- 题面条件:出题人给的,不是你的假设
- 定义:
a ≡ dv/dt这种,没有物理内容 - 近似:真正的假设,必须有作用域和失效后果
- 数值设置:取
g = 9.8还是10,属于精度选择
关掉的机制与破坏判据查 _shared/idealization-catalog.md。
5. 数方程
独立方程个数 = Σ(每个物体在每个独立方向的动力学方程)
+ (约束方程个数)
+ (守恒律提供的首次积分,若与上面不重复)
守恒律不是额外信息,它是动力学方程的首次积分。 已经写了牛顿方程又加一条能量守恒, 在无耗散情形下是同一条信息的两种写法,不能当两个独立方程数。
对照未知量个数:
| 情形 | 判断 | 该做什么 |
|---|---|---|
| 方程 = 未知 | 定得下来 | 交接给使用者求解 |
| 方程 < 未知 | 欠定 | 逐条列出缺什么。不要用"合理假设"补,回 competition-scenario-extractor |
| 方程 > 未知 | 超定 | 查清是冗余(可用于验算,好事)还是矛盾(材料有问题,必须解决) |
6. 三项确定性检查
检查一:凭空补进来的量。 定律台账和约束里出现的每一个符号, 必须能在已知量或未知量台账里找到。找不到的就是凭空多出来的。
有执行能力时,把台账写成 dimcheck.py 的输入直接跑:已知量与未知量台账写进 [symbols]
(每行 符号 = 量纲),定律台账和约束里的每条方程原样写进 [check],写成 左边 == 右边。
脚本会逐条列出没在 [symbols] 里声明的符号(报 符号 … 没有在 [symbols] 里声明量纲),正好是这项检查:
python3 ../_shared/scripts/dimcheck.py ledger.dim
检查二:用了定律但没写条件。 逐行扫定律台账,第三格为空或写了 "显然""通常这样""题目就是这个意思"的,一律打回。
检查三:量纲。 每条约束方程、每条守恒式,两边量纲必须相同;
三角函数、指数、对数的宗量必须无量纲。同样交给 dimcheck.py:检查一写进 [check] 的
左边 == 右边 会逐条比较两边量纲,一边是 0 的方程只查另一边是否自洽。方程要写 ==:
写成 左边 = 右边 时,若左边是一个没声明过的名字,这一行会被当成给新名字下定义,不比较两边。
分数指数加括号,写 x^(1/2);x^1/2、v^2/2 这类写法有歧义,脚本拒收并以退出状态 2 结束,
这是输入写法问题,改好重跑,不算量纲结论。退出状态 1 才表示有不一致或有没声明的符号。
7. 给出下一步,不给出解
结尾只写三样:
- 建议先写哪条方程,以及理由是结构性的(例如"要求的量里不含时间, 所以从不含时间的守恒律入手比从运动方程积分省一步")。
- 哪个阶段要单独处理(约束改变、接触断开、打滑开始)。
- 解出来之后拿什么检查(量纲、极限、与已知特例对照)。
不写方程组,不化简,不给数。
输出格式 / Output
## 三栏
| ID | 类别(已知/未知/约束) | 符号 | 含义(物体·时刻·参考系) | 单位 / 量纲 | 来源 |
## 自由度
- 位形自由度:<数法>
- 完整约束 <n> 条 / 非完整约束 <m> 条
## 定律台账
| 定律 | 用在哪一步 | 本题为什么满足条件 | 条件破坏时先失效什么 |
## 假设台账
| 假设 | 近似掉了什么 | 作用域 | 失效后果 |
## 计数
- 未知量 <N> 个,独立方程 <M> 个 → 定得下来 / 欠定 / 超定
- 若欠定:缺 <逐条>
## 三项检查
- 凭空补进来的量:<有/无,逐条>;脚本已跑 / 人工检查 / 未执行
- 缺适用条件的定律:<逐条>
- 量纲:<结果>
## 下一步
- 建议的入手方程与结构性理由
- 需要分阶段处理的地方
- 解出后用什么检查
交出前闭环检查:定律台账每行四格都满;每个符号都能在三栏里找到; 计数结论与缺口清单一致。任何一项没过,先补。
边界 / Boundaries
- 不解题:不列出完整方程组、不化简、不求解、不给数值答案。
- 不推导:可以说明"这条公式是某守恒律在某条件下的推论",推导过程由使用者完成。
- 不补条件:欠定就是欠定。用"合理假设"把欠定填成适定,是把使用者的判断偷偷替掉。
- 不把常见做法当适用条件:"竞赛题一般都这么处理"不能填进第三格。
- 不越过诚信闸:作业与竞赛进行中,台账可以给,答案不给。反复要求也不放宽。
- 不虚构常数与材料参数:查不到就标【缺失】,并写明它挡住哪一步。
Token 控制 / Token discipline
- 只加载真正要用的
_shared/文档;law-applicability-table.md按小节读,不整份展开 - 台账只留会进入方程的量
- 交接只带定律台账、假设台账和计数结论
参考资料 / References
../_shared/law-applicability-table.md— 定律适用条件(第 3 步核心)../_shared/idealization-catalog.md— 假设关掉了什么、何时失效(第 4 步)../_shared/physics-evidence-contract.md— 状态标签与诚信边界../_shared/scripts/dimcheck.py— 第 6 步的检查一与检查三
变更记录 / Changelog
| 版本 | 日期 | 变更 | 类型 |
|---|---|---|---|
| 0.1.1 | 2026-09-26 | 第 6 步按修好的 dimcheck.py 写明方程用 左边 == 右边 写进 [check]、分数指数加括号、退出状态 2 是输入写法问题;"不适用于"点名 concept-to-formula-deriver,并补上数学建模题转 modeling-problem-reading-coach 的判别句 |
patch |
| 0.1.0 | 2026-08-30 | 初始草稿:三栏分离、自由度计数、定律台账、假设台账、未知与方程计数、三项确定性检查 | minor |