dsh-math-calculator 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,452 @@
1
+ /**
2
+ * 公式库第十一批:**宏观经济的恒等式链 + 材料本构/微观决定**。
3
+ *
4
+ * ## 为什么这一批和前面几批不同
5
+ *
6
+ * 前面几批(工程/生物/宏观基础)多是**经验式或结构式**,需要标
7
+ * 「这是量级估计」「系数需标定」。这一批则以**恒等式与严格推导**为主:
8
+ *
9
+ * ```
10
+ * 财政赤字 = 支出 − 收入 ← 会计恒等式,任何政权都逃不掉
11
+ * PB = T − (G − 利息) ← 定义
12
+ * Y = C + I + G + NX ← 会计恒等式
13
+ * σ = E·ε ← 本构公理
14
+ * ```
15
+ *
16
+ * 恒等式的价值在于**能立刻否掉不闭合的设定** —— 作者编的一组数字若违反它,
17
+ * 那不是「另一种经济学」,而是算术错了。
18
+ *
19
+ * ## 可信度分层(本批特别注意)
20
+ *
21
+ * 同一批里混着四种可信度,desc 里都要如实体现:
22
+ *
23
+ * ```
24
+ * 恒等式/定义/基本常数 → 精确 财政赤字、PB、应力应变
25
+ * 标度律 → 标度 熔点∝结合能、理论强度
26
+ * 经验判据 → 量级 Pugh G/K、Hall-Petch
27
+ * 只有趋势没有系数 → 仅方向 理想强度 ≈ E/10
28
+ * ```
29
+ *
30
+ * 混为一谈会把「量级估计」当精确值用,那比不给结论更糟。
31
+ *
32
+ * ## 单位约定
33
+ *
34
+ * 财政与宏观类多为**比值/无量纲**(占 GDP 百分比、倍率),
35
+ * 材料类为 SI(Pa、m、K)。两者都在 desc 里写明口径。
36
+ *
37
+ * @module dsh-math-calculator/formula-library-macro-materials
38
+ */
39
+ const p = (value, desc) => ({ value, desc });
40
+ const req = (desc) => ({ value: null, desc });
41
+ /** 宏观与财政 9 条、材料 8 条,共 17 条。 */
42
+ export const MACRO_MATERIAL_FORMULAS = [
43
+ // ══════════════════════════════════════════════════════════════════
44
+ // A. 宏观经济恒等式(定义级,任何世界观都成立)
45
+ // ══════════════════════════════════════════════════════════════════
46
+ {
47
+ id: 'gdp_expenditure',
48
+ cat: 'econ/macro',
49
+ name: '支出法总产出(GDP 恒等式)',
50
+ /**
51
+ * ★ 参数名不能用 `exports`:它在标识符黑名单里(与 JS/Node 保留名冲突的防护)。
52
+ * 实测会直接报 `forbidden 不允许使用标识符 "exports"`。
53
+ * 改用 export_value / import_value,语义不变。
54
+ */
55
+ expr: 'consumption + investment + gov_spending + export_value - import_value',
56
+ params: {
57
+ consumption: req('居民消费'),
58
+ investment: req('资本形成(投资)'),
59
+ gov_spending: req('政府支出'),
60
+ export_value: p(0, '出口'),
61
+ import_value: p(0, '进口'),
62
+ },
63
+ unit: '与各项同单位(通常为年产出)',
64
+ desc: 'Y = C + I + G + (X − M)。这是会计恒等式不是理论 —— 它只是「所有产出都被某人用掉了」的记账,所以任何世界观都成立。' +
65
+ '它的用处是立刻暴露不闭合的设定:若 C+I+G 超过 Y,差额只能来自净进口或举债。',
66
+ keys: ['GDP', '总产出', '支出法', '恒等式', '消费投资'],
67
+ frequency: 'high',
68
+ layer: 'fundamental',
69
+ domains: ['economics'],
70
+ },
71
+ {
72
+ id: 'growth_accounting',
73
+ cat: 'econ/growth',
74
+ name: '增长核算(Solow 余量 / TFP)',
75
+ expr: 'g_a + alpha * g_k + (1 - alpha) * g_l',
76
+ params: {
77
+ g_a: req('技术进步率(TFP 增长率)'),
78
+ alpha: p(0.3, '资本份额 α'),
79
+ g_k: req('资本增长率'),
80
+ g_l: req('劳动增长率'),
81
+ },
82
+ unit: '无量纲(年增长率)',
83
+ desc: 'g_Y = g_A + α·g_K + (1−α)·g_L。由柯布-道格拉斯生产函数取对数微分得出,不是拟合。' +
84
+ '美国劳工统计局(BLS)的 TFP 方法即基于此。' +
85
+ '★ 若人口与资本都停止增长(g_L=g_K=0),则 g_Y ≈ g_A —— 这就是停滞文明为何停滞。',
86
+ keys: ['增长核算', 'TFP', '索洛余量', '全要素生产率', '技术进步'],
87
+ frequency: 'high',
88
+ layer: 'derived',
89
+ domains: ['economics'],
90
+ },
91
+ {
92
+ id: 'convergence_speed',
93
+ cat: 'econ/growth',
94
+ name: '趋同速度(追赶到稳态的快慢)',
95
+ expr: '(1 - alpha) * (n + delta + gx)',
96
+ params: {
97
+ alpha: p(0.3, '资本份额 α'),
98
+ n: req('人口增长率'),
99
+ delta: req('折旧率'),
100
+ gx: p(0, '技术进步率'),
101
+ },
102
+ unit: '1/年(收敛速率 λ)',
103
+ desc: 'λ = (1−α)(n+δ+g)。距稳态的相对差距按 e^(−λt) 收敛,故到达一半差距约需 ln(2)/λ 年。' +
104
+ '这是条件趋同 —— 每个经济体追向自己的稳态,不是所有国家趋同到一处。' +
105
+ '★ 补的是现有 solow_steady_state 缺的那半:它给终点,这条给多久到达。',
106
+ keys: ['趋同', '收敛', 'convergence', '追赶', '追赶速度'],
107
+ frequency: 'high',
108
+ layer: 'derived',
109
+ domains: ['economics'],
110
+ },
111
+ {
112
+ id: 'fisher_money',
113
+ cat: 'econ/macro',
114
+ name: '货币数量方程(费雪方程)',
115
+ expr: 'money * velocity',
116
+ params: {
117
+ money: req('货币存量 M'),
118
+ velocity: req('货币流通速度 V'),
119
+ },
120
+ unit: '与 PY 同单位(价格 × 交易量)',
121
+ desc: 'MV = PY。作为恒等式时 V 被定义为 PY/M,必然成立;作为理论时要假设 V 稳定。' +
122
+ '★ 价值在 V 是一个可调的世界观参数:金属货币社会 V 低、信用货币社会 V 高。' +
123
+ '结果等于名义产出;若要物价,再除以实际产出的交易量。',
124
+ keys: ['费雪', '货币数量', 'MV=PY', '流通速度', 'quantity of money'],
125
+ frequency: 'medium',
126
+ layer: 'fundamental',
127
+ domains: ['economics'],
128
+ },
129
+ // ══════════════════════════════════════════════════════════════════
130
+ // B. 政权财政(恒等式 + 差分方程)
131
+ // ══════════════════════════════════════════════════════════════════
132
+ {
133
+ id: 'fiscal_balance',
134
+ cat: 'power/fiscal',
135
+ name: '财政收支余额(赤字/盈余)',
136
+ expr: 'revenue - expenditure',
137
+ params: {
138
+ revenue: req('总收入(税收 + 非税)'),
139
+ expenditure: req('总支出(经常 + 资本 + 利息)'),
140
+ },
141
+ unit: '金额(正为盈余,负为赤字)',
142
+ desc: 'D = T − G。这是会计恒等式。' +
143
+ '★ 关键细节:赤字不含借债 —— 借来的钱是「赤字融资」不是「收入」。' +
144
+ '把借债算成收入,就是财政崩溃前的典型自欺。',
145
+ keys: ['赤字', '盈余', '财政余额', 'fiscal balance', '收支'],
146
+ frequency: 'high',
147
+ layer: 'fundamental',
148
+ domains: ['economics', 'society'],
149
+ },
150
+ {
151
+ id: 'primary_balance',
152
+ cat: 'power/fiscal',
153
+ name: '基本余额(剔除利息后的经营状况)',
154
+ expr: 'revenue - (expenditure - interest)',
155
+ params: {
156
+ revenue: req('总收入'),
157
+ expenditure: req('总支出(含利息)'),
158
+ interest: req('利息支出'),
159
+ },
160
+ unit: '金额(正为可裁量盈余,负为结构性亏损)',
161
+ desc: 'PB = T − (G − 利息) = 财政余额 + 利息。' +
162
+ '★ 这是判断「这个政权还有没有救」的第一条判据:' +
163
+ 'PB 为正而总赤字为负 → 经营是赚的,只是被旧债利息拖垮(可救);' +
164
+ 'PB 为负 → 经营本身在亏,越借越亏(结构性危机)。',
165
+ keys: ['基本余额', '基本赤字', 'primary balance', '利息', '可救'],
166
+ frequency: 'high',
167
+ layer: 'fundamental',
168
+ domains: ['economics', 'society'],
169
+ },
170
+ {
171
+ id: 'fiscal_sustainability',
172
+ cat: 'power/fiscal',
173
+ name: '财政可持续性判据(i−g 缺口)',
174
+ expr: '(interest_rate - growth_rate) * debt_ratio - primary_balance',
175
+ params: {
176
+ interest_rate: req('名义利率 i'),
177
+ growth_rate: req('名义增长率 g'),
178
+ debt_ratio: req('债务/GDP 比 d(如 0.8 表示 80%)'),
179
+ primary_balance: req('基本余额占 GDP 比(盈余为正)'),
180
+ },
181
+ unit: '占 GDP 的年变化率(正为债务负担加重)',
182
+ desc: 'Δd = (i − g)·d − PB。稳定条件为 PB ≥ (i − g)·d。' +
183
+ '★ i > g 时债务会自我膨胀 —— 这解释了为何古代帝国(高利率低增长)财政脆弱,' +
184
+ '而工业革命后的高增长期能承受高债务。' +
185
+ '★ 结果为正 = 债务负担在加重;为负 = 在改善。',
186
+ keys: ['财政可持续', '债务动态', 'i-g', '债务比', 'sustainability'],
187
+ frequency: 'high',
188
+ layer: 'derived',
189
+ domains: ['economics', 'society'],
190
+ },
191
+ {
192
+ id: 'seigniorage',
193
+ cat: 'power/fiscal',
194
+ name: '铸币税(通胀税)',
195
+ expr: 'inflation * real_money_balance',
196
+ params: {
197
+ inflation: req('通胀率(小数)'),
198
+ real_money_balance: req('实际货币余额(占 GDP 或金额)'),
199
+ },
200
+ unit: '与货币余额同单位(占 GDP 或金额)',
201
+ desc: '铸币税 ≈ 通胀率 × 实际货币余额(精确式为 Δ基础货币/物价)。' +
202
+ '★ 这是财政与货币的唯一接口:税收加不动、借债又 i>g 时,铸币成为最后财源。' +
203
+ '而它本质是「对持有货币者的隐性征税」→ 通胀。' +
204
+ '★ 历史上几乎所有恶性通胀都发生在财政危机之后,机制正是这条。',
205
+ keys: ['铸币税', 'seigniorage', '通胀税', '印钱', '货币创造'],
206
+ frequency: 'high',
207
+ layer: 'derived',
208
+ domains: ['economics', 'society'],
209
+ },
210
+ {
211
+ id: 'effective_tax_rate',
212
+ cat: 'power/fiscal',
213
+ name: '有效税率(实际 vs 名义)',
214
+ expr: 'actual_revenue / gdp',
215
+ params: {
216
+ actual_revenue: req('实际征得税收'),
217
+ gdp: req('总产出 GDP'),
218
+ },
219
+ unit: '无量纲(占 GDP 比)',
220
+ desc: 'ETR = 实际税收/GDP。★ 它与名义税率不是一回事:差额正是漏征、免征、逃税。' +
221
+ '前工业国家的 ETR 通常只有 5%—10%,名义税率再高也收不上来。' +
222
+ '★ 名义与实际之差本身就是「政权对社会渗透能力」的度量 —— 一个可调的世界观参数。',
223
+ keys: ['有效税率', 'ETR', '税负', '征收能力', '名义税率'],
224
+ frequency: 'high',
225
+ layer: 'conventional',
226
+ domains: ['economics', 'society'],
227
+ },
228
+ {
229
+ id: 'fiscal_autonomy',
230
+ cat: 'power/fiscal',
231
+ name: '财政自由度(可裁量支出占比)',
232
+ expr: '1 - rigid_share',
233
+ params: {
234
+ rigid_share: req('刚性支出占比(官僚+军饷+利息,0—1)'),
235
+ },
236
+ unit: '无量纲(0—1)',
237
+ desc: '可裁量支出 / 总支出 = 1 − 刚性占比。' +
238
+ '★ 这是「改革为什么推不动」的定量答案:刚性 80%+ 时政权几乎无政策自由度,' +
239
+ '任何外部冲击都直接触发危机;刚性 50% 时才有余力搞建设。' +
240
+ '刚性部分 = 官僚薪酬 + 军饷 + 利息,是砍不掉的那一块。',
241
+ keys: ['财政自由度', '刚性支出', '可裁量', '改革空间', 'autonomy'],
242
+ frequency: 'high',
243
+ layer: 'conventional',
244
+ domains: ['economics', 'society'],
245
+ },
246
+ // ══════════════════════════════════════════════════════════════════
247
+ // C. 材料本构层(应力—应变—失效)
248
+ // ══════════════════════════════════════════════════════════════════
249
+ {
250
+ id: 'hooke_law',
251
+ cat: 'materials/constitutive',
252
+ name: '胡克定律(应力-应变)',
253
+ expr: 'E * eps',
254
+ params: {
255
+ E: req('弹性模量 Pa(钢 2.06e11、铝 6.9e10、木 1e10)'),
256
+ eps: req('应变(无量纲,ΔL/L₀)'),
257
+ },
258
+ unit: 'Pa',
259
+ desc: 'σ = E·ε。弹性区的本构公理,与材料种类无关 —— 只需给出该材料的 E。' +
260
+ '★ 它补上了库里断掉的一环:已有 strain(ε=ΔL/L₀,纯几何),却没有配对的应力。' +
261
+ '接上后形成 ΔL → ε → σ → 判安全的完整链。' +
262
+ '注意仅适用于弹性区(σ < 屈服强度);超过后进入塑性,此式失效。',
263
+ keys: ['胡克', 'Hooke', '应力应变', '弹性模量', 'Young modulus'],
264
+ frequency: 'high',
265
+ layer: 'fundamental',
266
+ domains: ['materials', 'engineering'],
267
+ },
268
+ {
269
+ id: 'safety_factor_check',
270
+ cat: 'materials/constitutive',
271
+ name: '安全系数校核(许用应力)',
272
+ expr: 'yield_strength / safety_factor',
273
+ params: {
274
+ yield_strength: req('屈服强度 Pa'),
275
+ safety_factor: p(1.5, '安全系数 n(静载 1.5~2、冲击 2~4、疲劳 3~6)'),
276
+ },
277
+ unit: 'Pa(许用应力,与实际工作应力比较)',
278
+ desc: 'σ_allow = σ_y / n。把材料强度变成「会不会坏」的判据:工作应力 ≤ 该值即安全。' +
279
+ '★ 诚实标注:安全系数是工程惯例,不是物理定律 —— 取值依赖失效后果与不确定性。' +
280
+ '脆性材料、失效后果严重时要取更大值。',
281
+ keys: ['安全系数', '许用应力', 'safety factor', '校核'],
282
+ frequency: 'high',
283
+ layer: 'conventional',
284
+ domains: ['materials', 'engineering'],
285
+ },
286
+ {
287
+ id: 'fracture_kic',
288
+ cat: 'materials/constitutive',
289
+ name: '断裂韧性(临界应力强度因子)',
290
+ expr: 'kic / (y_factor * sqrt(pi * crack_length))',
291
+ params: {
292
+ kic: req('断裂韧性 K_IC(单位 Pa·m^0.5;钢约 30e6,陶瓷约 1e6)'),
293
+ y_factor: p(1, '几何因子 Y(中心裂纹约 1,边裂纹约 1.12)'),
294
+ crack_length: req('裂纹长度 a(半长,m)'),
295
+ },
296
+ unit: 'Pa(临界应力,超过即失稳断裂)',
297
+ desc: 'σ_c = K_IC / (Y·√(πa))。由线弹性断裂力学(LEFM)推出。' +
298
+ '★ 关键洞察 σ_c ∝ 1/√a:同样材料,裂纹长一个数量级,承载降 √10 ≈ 3.2 倍。' +
299
+ '这就是「为什么大构件必须比小试样更小心」的定量解释,也是压力容器要定期探伤的原因。' +
300
+ '⚠ 仅适用脆性/小范围屈服;高韧性延性材料会低估承载,那时需弹塑性 J 积分。',
301
+ keys: ['断裂韧性', 'KIC', '裂纹', 'fracture', '应力强度因子'],
302
+ frequency: 'high',
303
+ layer: 'derived',
304
+ domains: ['materials', 'engineering'],
305
+ },
306
+ {
307
+ id: 'ashby_index',
308
+ cat: 'materials/selection',
309
+ name: 'Ashby 性能指数(选材判据)',
310
+ expr: 'E^exponent_e * strength^exponent_s / rho^exponent_rho',
311
+ params: {
312
+ E: p(1, '弹性模量(该工况不需要时取 1)'),
313
+ strength: p(1, '强度(该工况不需要时取 1)'),
314
+ rho: req('密度 kg/m³'),
315
+ exponent_e: p(0, 'E 的指数(轻而刚的梁 0.5、板 0.333)'),
316
+ exponent_s: p(0, '强度的指数(轻而强的梁 0.667、板 0.5)'),
317
+ exponent_rho: p(1, '密度的指数(通常 1)'),
318
+ },
319
+ unit: '性能指数(越大越好,同工况下横向比较)',
320
+ desc: 'M = E^a·σ^b / ρ^c,指数由「功能需求 + 几何形式」决定。常用几种:' +
321
+ '轻而刚的梁 E^½/ρ | 轻而强的梁 σ^(2/3)/ρ | 轻而刚的板 E^(1/3)/ρ | 弹性储能 σ²/E。' +
322
+ '★ 它把「选材」从审美判断变成可计算判断:设定说「这种生物合金很轻很强」,' +
323
+ '一算就知道它排第几。指数与几何绑定、与材料无关,故跨世界通用。' +
324
+ '例:钢 E=2e11 ρ=7850 → E^½/ρ ≈ 1.8;若某生物合金 E=1e11 ρ=3000 → 3.3,确实更优。',
325
+ keys: ['Ashby', '性能指数', '选材', '比刚度', '材料选择'],
326
+ frequency: 'high',
327
+ layer: 'derived',
328
+ domains: ['materials', 'engineering'],
329
+ },
330
+ // ══════════════════════════════════════════════════════════════════
331
+ // D. 材料属性的微观决定(由基础物理量推出)
332
+ // ══════════════════════════════════════════════════════════════════
333
+ {
334
+ id: 'ideal_strength',
335
+ cat: 'materials/fundamental',
336
+ name: '理论强度(理想晶体强度上限)',
337
+ expr: 'E / factor',
338
+ params: {
339
+ E: req('弹性模量 Pa'),
340
+ factor: p(10, '强度系数(Frenkel 常用 E/10,区间 5~15)'),
341
+ },
342
+ unit: 'Pa',
343
+ desc: 'σ_ideal ≈ E/10(Frenkel 估计;也有 √(Eγ/a₀) 的 Orowan-Polanyi 形式)。' +
344
+ '★ 标注为「仅方向」:E/5 ~ E/15 都有人用,这是量级估计不是精确值。' +
345
+ '★ 真正的价值在比值:实际材料强度通常只有理论值的 1/100 ~ 1/10(因为缺陷)。' +
346
+ '**这个比值就是「冶金水平」** —— 同样的理论强度,工艺差的世界只能发挥 1%,' +
347
+ '精密工业能发挥 10%,差一个数量级。',
348
+ keys: ['理论强度', '理想强度', 'Frenkel', 'ideal strength', '冶金水平'],
349
+ frequency: 'high',
350
+ layer: 'derived',
351
+ domains: ['materials'],
352
+ },
353
+ {
354
+ id: 'melting_from_cohesive',
355
+ cat: 'materials/fundamental',
356
+ name: '熔点与结合能(Lindemann 标度)',
357
+ expr: 'cohesive_energy * 2 / (3 * kB)',
358
+ params: {
359
+ cohesive_energy: req('每原子结合能 J),即把原子完全分离所需的能量'),
360
+ kB: p(1.380649e-23, '玻尔兹曼常数 J/K'),
361
+ },
362
+ unit: 'K(熔点温度,量级估计)',
363
+ desc: 'Lindemann 判据:熔化发生在原子热振动振幅达到原子间距的临界分数时。' +
364
+ '量级形式 T_m ≈ (2/3)·(结合能/k_B)(单原子金属的粗略关系)。' +
365
+ '★ 这是真正连到基础物理量的一条:结合能 ← 键能 ← 电子结构,所以换了键强度熔点跟着变。' +
366
+ '★ 由此可反推设计:想要熔点 2000°C 的金属 → 反推需要多大结合能。' +
367
+ '⚠ 标度为「标度」不是精确:金属/共价/离子键型的系数差异大,需按类标定。',
368
+ keys: ['熔点', '结合能', 'Lindemann', 'melting', '耐热'],
369
+ frequency: 'high',
370
+ layer: 'phenomenological',
371
+ domains: ['materials'],
372
+ },
373
+ {
374
+ id: 'pugh_ductility',
375
+ cat: 'materials/fundamental',
376
+ name: 'Pugh 判据(脆/韧筛选)',
377
+ expr: 'shear_modulus / bulk_modulus',
378
+ params: {
379
+ shear_modulus: req('剪切模量 G Pa'),
380
+ bulk_modulus: req('体积模量 K Pa'),
381
+ },
382
+ unit: '无量纲(G/K;> 0.57 偏脆,< 0.57 偏韧)',
383
+ desc: 'G/K > 0.57(等价 B/G < 1.75)→ 偏脆;反之偏韧。' +
384
+ '★ K 与 G 都由结合能曲线推出,所以脆性也可以从底层推。' +
385
+ '⚠ 这是经验筛选线,不是定论 —— 学界近年仍在「推广」这个判据,说明原版不够普适。' +
386
+ '用法:作为快速筛选,判「这个材料大概会崩还是会让」。',
387
+ keys: ['Pugh', '脆性', '韧性', 'ductile', 'G/K'],
388
+ frequency: 'high',
389
+ layer: 'phenomenological',
390
+ domains: ['materials'],
391
+ },
392
+ {
393
+ id: 'gruneisen_expansion',
394
+ cat: 'materials/fundamental',
395
+ name: '格律奈森关系(热膨胀由非谐性推出)',
396
+ expr: 'gamma * heat_capacity / (3 * bulk_modulus * volume)',
397
+ params: {
398
+ gamma: p(1.5, 'Grüneisen 参数(通常 1~3)'),
399
+ heat_capacity: req('定容热容 J/K'),
400
+ bulk_modulus: req('体积模量 K Pa'),
401
+ volume: req('体积 m³'),
402
+ },
403
+ unit: '1/K(线膨胀系数 α)',
404
+ desc: 'α = γ·C_v/(3KV)。γ 是非谐性的度量(键势偏离对称的程度),所以热膨胀可以从键势形状推。' +
405
+ '★ 补上闭环:现有 thermal_expansion 里 α 是硬设定,这条让 α 可以由 K、C_v、γ 推出来。' +
406
+ 'γ 越大说明键势越不对称 → 受热膨胀越明显。金属 γ≈1~2,聚合物可达 3+。',
407
+ keys: ['Gruneisen', '格律奈森', '热膨胀', '非谐', 'thermal expansion'],
408
+ frequency: 'medium',
409
+ layer: 'derived',
410
+ domains: ['materials'],
411
+ },
412
+ {
413
+ id: 'hall_petch',
414
+ cat: 'materials/microstructure',
415
+ name: 'Hall-Petch 强化(晶粒尺寸决定强度)',
416
+ expr: 'sigma0 + ky / sqrt(grain_size)',
417
+ params: {
418
+ sigma0: p(70e6, '晶格摩擦应力 Pa(纯铁约 70 MPa)'),
419
+ ky: p(0.4e6, '强化系数(钢约 0.15~0.6 MPa·m^0.5)'),
420
+ grain_size: req('晶粒直径 m(10 µm = 1e-5)'),
421
+ },
422
+ unit: 'Pa(屈服强度)',
423
+ desc: 'σ_y = σ₀ + k_y·d^(−1/2)。晶界阻挡位错,晶粒越细越强。' +
424
+ '★ 这是「工艺可调」的典型:同一成分的钢,晶粒细化一个数量级强度可翻倍。' +
425
+ '「这个文明的锻造水平」就对应他们能达到的 d。' +
426
+ '⚠ 有反 Hall-Petch 区:纳米晶粒下强度反而下降(晶界开始滑移)。此式只对微米级成立。',
427
+ keys: ['Hall-Petch', '晶粒', 'grain size', '强化', '屈服强度'],
428
+ frequency: 'high',
429
+ layer: 'phenomenological',
430
+ domains: ['materials', 'engineering'],
431
+ },
432
+ {
433
+ id: 'wiedemann_franz',
434
+ cat: 'materials/property',
435
+ name: '维德曼-弗兰兹定律(导热与导电的锁合)',
436
+ expr: 'lorenz * temperature * electrical_conductivity',
437
+ params: {
438
+ lorenz: p(2.44e-8, '洛伦兹数 L₀ = 2.44e-8 W·Ω/K²(基本常数)'),
439
+ temperature: req('绝对温度 K'),
440
+ electrical_conductivity: req('电导率 S/m'),
441
+ },
442
+ unit: 'W/(m·K)(电子贡献的导热系数)',
443
+ desc: 'κ/σ = L₀·T。金属中热与电都由电子输运,故两者成比例。' +
444
+ '★ 这是罕见的**严格关系**(L₀ 是基本常数),不是经验式。' +
445
+ '★ 价值:设定一个金属的电导率,导热系数就自动定了 —— 不必两个都编。' +
446
+ '⚠ 仅对金属的电子导热成立;绝缘体、声子导热的材料不适用。',
447
+ keys: ['Wiedemann-Franz', '导热', '导电', '洛伦兹数', '热导率'],
448
+ frequency: 'medium',
449
+ layer: 'fundamental',
450
+ domains: ['materials'],
451
+ },
452
+ ];
package/lib/formulas.js CHANGED
@@ -21,6 +21,8 @@ import { GENERIC_FORMULAS } from './formula-library-generic.js';
21
21
  import { EM_OPTICAL_NUCLEAR_FORMULAS } from './formula-library-em.js';
22
22
  import { ENGINEERING_FORMULAS } from './formula-library-engineering.js';
23
23
  import { BIOECON_FORMULAS } from './formula-library-bioecon.js';
24
+ import { MACRO_MATERIAL_FORMULAS } from './formula-library-macro-materials.js';
25
+ import { BIO_GENERAL_FORMULAS } from './formula-library-biol-general.js';
24
26
  import { getActiveConstants } from './constants-graph.js';
25
27
  import { loadGlobalFormulas } from './formula-pack.js';
26
28
  import { findUnit, convert } from './units.js';
@@ -41,6 +43,8 @@ export const FORMULAS = [
41
43
  ...EM_OPTICAL_NUCLEAR_FORMULAS,
42
44
  ...ENGINEERING_FORMULAS,
43
45
  ...BIOECON_FORMULAS,
46
+ ...MACRO_MATERIAL_FORMULAS,
47
+ ...BIO_GENERAL_FORMULAS,
44
48
  ];
45
49
  /** id 索引(后批次覆盖同名 id 时以后者为准,便于后续修订)。 */
46
50
  export const FORMULA_INDEX = new Map();
@@ -60,10 +64,27 @@ for (const formula of BASIC_FORMULAS)
60
64
  FORMULA_INDEX.set(formula.id, formula);
61
65
  for (const formula of GENERIC_FORMULAS)
62
66
  FORMULA_INDEX.set(formula.id, formula);
67
+ /**
68
+ * ★ 这一行曾经漏掉,导致 38 条电学/光学/核公式不在索引里。
69
+ *
70
+ * 后果不是「用户调不动」(`opFormula` 走的是 `currentFormulas()` 数组,不受影响),
71
+ * 而是 **`formula-bridge`(多步 pipeline 用)解析不到它们** ——
72
+ * 同一个公式,单独调用能用、写进 pipeline 就说 unknown_formula。
73
+ * 这种「换个入口就不一样」的缺陷最难发现,所以补上并留注释。
74
+ *
75
+ * 顺带说明为什么 `FORMULAS.length`(499) ≠ `FORMULA_INDEX.size`(457):
76
+ * 差 42 = 上一条漏登的 38 + 4 个历史重复 id(后者被后批次覆盖,符合预期)。
77
+ */
78
+ for (const formula of EM_OPTICAL_NUCLEAR_FORMULAS)
79
+ FORMULA_INDEX.set(formula.id, formula);
63
80
  for (const formula of ENGINEERING_FORMULAS)
64
81
  FORMULA_INDEX.set(formula.id, formula);
65
82
  for (const formula of BIOECON_FORMULAS)
66
83
  FORMULA_INDEX.set(formula.id, formula);
84
+ for (const formula of MACRO_MATERIAL_FORMULAS)
85
+ FORMULA_INDEX.set(formula.id, formula);
86
+ for (const formula of BIO_GENERAL_FORMULAS)
87
+ FORMULA_INDEX.set(formula.id, formula);
67
88
  /**
68
89
  * 把全局公式包并入内置公式(幂等:已存在的 id 跳过)。
69
90
  *
package/lib/help.js CHANGED
@@ -440,6 +440,38 @@ const RECIPE_BODY = () => `【锚点 sanity】工具不知道这个数该多大
440
440
  [{label:"单价", expr:"u=5"}, {label:"小计", expr:"u*3"}]
441
441
  ★ 中间某步失败时,依赖它的下游会明确报错,不会变成「虚成功」
442
442
 
443
+ 【文明崩溃推演】财政链,每步可核对(用 formula 逐条调,数值自己代入)
444
+ ① effective_tax_rate 名义税率 30% 但实际只 10% → 征管弱,20% 是漏征+逃亡
445
+ ② fiscal_balance 收入 10% GDP、支出 15% → 赤字 5%
446
+ ③ primary_balance PB = −5% + 利息 3% = −2% GDP
447
+ → 不是被旧债拖垮,而是**经营本身在亏**(结构性危机,比单纯赤字严重)
448
+ ④ fiscal_sustainability i=8%、g=2%、d=80% → 需 PB ≥ 6%×0.8 = 4.8%,实际 −2%
449
+ → 缺口 6.8%/年,十年翻倍
450
+ ⑤ seigniorage 税加不动、借债又 i>g → 只能铸币 → 通胀上升
451
+ → 通胀推高 i → 回到 ④,死亡螺旋
452
+ ⑥ fiscal_autonomy 刚性 85% → 没有可裁量的钱,改革也推不动
453
+ ★ 这套链能推出「为什么这个政权看着还能撑、其实已在螺旋里」,
454
+ 比「因为腐败所以要亡」可信得多——腐败只是其中一环。
455
+
456
+ 【巨兽可行性推演】生物链,回答「这么大的生物能不能活」
457
+ ① sa_volume_ratio 体重 ×8 → 表面积 ×4 → 单位体重散热与摄氧都 ÷2
458
+ ② fick_diffusion A∝M^(2/3)、δ∝M^(1/3) → 供氧能力 ∝ M^(1/3)
459
+ ③ diffusion_time 若无循环,1 m 组织扩散需 158 年 → 必须有循环系统
460
+ ④ peclet_number 血管里 Pe≫1 → 对流主导,扩散送不到深处
461
+ ⑤ michaelis_menten 血红蛋白结合是饱和式 → 浓度再高也提不上去
462
+ ⑥ gompertz_growth 生长必然饱和 → 有上限体型
463
+ ★ 结论通常是「不能靠扩散活,必须进化出循环 + 换气」,而不是「不可能」
464
+ —— 差别在于前者给了可行路径。
465
+
466
+ 【材料设定自洽】先定材料「身份证」,再让公式推后果
467
+ 作者硬设定:E、σ_y、K_IC、ρ(以及 n、A、Q 若关心蠕变)
468
+ 公式算后果:ε、σ、K_I、M、u
469
+ ① hooke_law σ=200MPa → ε=1e-3
470
+ ② safety_factor_check 200/235=1.18 → 低于 1.5,不安全
471
+ ③ fracture_kic 5mm 裂纹 → σ_c=30/√(π·0.005)=239MPa(与屈服几乎相等)
472
+ ④ ashby_index 与「生物合金 ρ=3000 σy=400MPa」比 → 谁更优一算便知
473
+ ★ 工具不判断你的材料合不合理,只保证「基于你给的性质,后果是算对的」
474
+
443
475
  【失败时】返回 ok=false + error.type / message / hint,按 hint 修正即可,不会崩溃。
444
476
  常见 error.type:
445
477
  non_finite 结果非有限(除以零、log(0))
@@ -548,8 +580,94 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
548
580
  ★ 0.15 对 0.03 即约 12%,三年物价翻倍
549
581
  「滥发货币导致崩溃」时用它量化
550
582
 
551
- ★ 这些式子的共同特点:**缩放律比绝对值更重要**。算出来的数可以偏,
552
- 但「跨度翻倍挠度 16 倍」这类关系错了就是硬伤——那是判断合不合理的第一道关。`;
583
+ ════ 材料·本构与微观决定(materials/)════
584
+ 【本构:应力→应变→失效】
585
+ hooke_law σ = E·ε(弹性区公理,与材料种类无关)
586
+ ★ 补上了库里断掉的一环:有 strain 定义却没有应力
587
+ safety_factor_check σ_allow = σ_y/n(静载 1.5~2、冲击 2~4、疲劳 3~6)
588
+ ★ 安全系数是工程惯例不是物理律,失效后果重就取大
589
+ fracture_kic σ_c = K_IC/(Y·√(πa))
590
+ ★ σ_c ∝ 1/√a:裂纹长一档,承载降 √10≈3.2 倍
591
+ 这就是为什么压力容器要定期探伤、大件比小试样更脆
592
+ ashby_index M = E^a·σ^b/ρ^c(指数由几何形式决定)
593
+ 轻而刚的梁 E^½/ρ | 轻而强的梁 σ^(2/3)/ρ | 弹性储能 σ²/E
594
+ ★ 把「选材」从审美变成可计算:设定说「这合金轻又强」→ 一算就知排第几
595
+
596
+ 【微观决定:材料属性从基础物理量推出】
597
+ ideal_strength σ_ideal ≈ E/10(Frenkel;E/5~E/15 都有人用)
598
+ ★ 真正有用的是比值:实际强度只有理论的 1/100~1/10
599
+ **这个比值就是「冶金水平」** —— 工艺差的世界只能发挥 1%
600
+ melting_from_cohesive T_m ≈ (2/3)·(结合能/k_B)(Lindemann)
601
+ ★ 熔点能从结合能推 → 可反推设计:「要熔点 2000°C 的金属」
602
+ pugh_ductility G/K > 0.57 偏脆,< 0.57 偏韧
603
+ ★ K 与 G 都由键势推出,所以脆性也能从底层推
604
+ gruneisen_expansion α = γ·C_v/(3KV)
605
+ ★ 补上闭环:原来 α 是硬设定,现在能由 K、C_v、γ 推
606
+ hall_petch σ_y = σ₀ + k_y·d^(−1/2)
607
+ ★ 晶粒细化一个数量级,强度可翻倍 ——「锻造水平」= 能达到的 d
608
+ ⚠ 有反 Hall-Petch 区(纳米晶粒下反而变弱)
609
+ wiedemann_franz κ/σ = L₀·T(L₀ = 2.44e-8 是基本常数)
610
+ ★ 罕见的严格关系:设了电导率,导热系数自动定
611
+
612
+ ════ 生物·通用(biology/scaling, transport, genetics, growth, kinetics)════
613
+ sa_volume_ratio A ∝ M^(2/3) → 面积/体积 ∝ M^(−1/3)(**纯几何**)
614
+ ★ 体重 ×8 → 面积 ×4 → 单位体重散热 ÷2(为什么会过热)
615
+ 同理鳃面积也只 ×4 → 摄氧 ÷2(为什么会缺氧)
616
+ fick_diffusion J = D·A·ΔC/δ(鳃/肺/皮肤/根/细胞膜同一个式子)
617
+ ★ A∝M^(2/3)、δ∝M^(1/3) → 供氧 ∝ M^(1/3)
618
+ 这就是「大生物必须换气而不能靠扩散」的定量证明
619
+ diffusion_time t ≈ Δx²/(2D)
620
+ ★ 1 µm→5 ms | 10 µm→0.5 s(细胞够用)| 1 mm→83 min | 1 m→158 年
621
+ 能立刻否掉「靠扩散供氧的巨兽」,用的是硬数学而非估计
622
+ peclet_number Pe = L·u/D(扩散 vs 对流)
623
+ ★ Reynolds 数的质量输运版:库里已有动量版,缺这个
624
+ Pe≪1 扩散主导(微循环)、Pe≫1 必须泵(大血管)
625
+ hardy_weinberg p² + 2pq + q² = 1(**纯概率论**,无生物假设)
626
+ ★ 常算 2pq:隐性携带者比例。p=.9 q=.1 → 携带者 18% 而表现型只 1%
627
+ gompertz_growth N = a·exp(−b·exp(−c·t))
628
+ ★ 比指数/logistic 更贴合**有机体**真实生长(logistic 偏种群)
629
+ michaelis_menten v = Vmax·S/(Km+S)
630
+ ★ 一条式子覆盖五种现象:酶、载体转运、Holling 摄食、受体结合、养分吸收
631
+ S≪Km 近线性、S≫Km 饱和 —— 这是「处理能力有限」的通用形状
632
+ q10_temperature R = R₀·Q₁₀^((T−T₀)/10)
633
+ ★ 生物界**实际使用**的温度律(生态模型几乎都用它,不用 Ea)
634
+ 与 arrhenius 并存:化学用 Arrhenius、生物用 Q₁₀
635
+
636
+ ════ 政权财政(power/fiscal)════
637
+ fiscal_balance D = T − G(**会计恒等式**)
638
+ ★ 关键细节:赤字**不含借债** —— 借来的钱是「赤字融资」不是收入
639
+ 把借债算成收入,就是财政崩溃前的典型自欺
640
+ primary_balance PB = T −(G − 利息) = 财政余额 + 利息
641
+ ★ 判断「还有没有救」的第一条判据:
642
+ PB 正而总赤字负 → 经营赚钱、被旧债利息拖垮(可救)
643
+ PB 负 → 经营本身在亏(结构性危机)
644
+ fiscal_sustainability Δd = (i−g)·d − PB
645
+ ★ i>g 时债务自我膨胀 —— 古代帝国(高利率低增长)财政脆弱的根源
646
+ 工业革命后的高增长期能承受高债务,就是这条的另一面
647
+ seigniorage 铸币税 ≈ 通胀 × 实际货币余额
648
+ ★ 财政与货币的唯一接口:税收加不动、借债又 i>g → 只能铸币
649
+ 历史上几乎所有恶性通胀都发生在财政危机之后
650
+ effective_tax_rate ETR = 实际税收/GDP(≠ 名义税率)
651
+ ★ 差额正是漏征+逃亡。「名义 vs 实际」的差距 = 政权渗透能力
652
+ 前工业国家 ETR 通常只有 5%~10%
653
+ fiscal_autonomy 可裁量支出占比 = 1 − 刚性占比
654
+ ★ 「改革为什么推不动」的定量答案:
655
+ 刚性 80%+ → 几乎没有政策自由度,任何冲击直接触发危机
656
+
657
+ ════ 宏观恒等式(econ/macro, econ/growth)════
658
+ gdp_expenditure Y = C + I + G +(X−M)(会计恒等式)
659
+ ★ 能立刻暴露不闭合的设定:C+I+G 超过 Y → 差额只能来自净进口或举债
660
+ growth_accounting g_Y = g_A + α·g_K +(1−α)·g_L
661
+ ★ 人口与资本都停时 g_Y ≈ g_A —— 这就是停滞文明为何停滞
662
+ 来源:BLS 官方 TFP 方法即基于此
663
+ convergence_speed λ =(1−α)(n+δ+g),差距按 e^(−λt) 收敛
664
+ ★ 补 solow_steady_state 缺的那半:它给终点,这条给多久到达
665
+ fisher_money MV = PY(V 是**可调的世界观参数**)
666
+ ★ 金属货币社会 V 低、信用货币社会 V 高
667
+
668
+ ★ 这些式子的共同特点:**缩放律与恒等式比绝对值更重要**。算出来的数可以偏,
669
+ 但「跨度翻倍挠度 16 倍」「PB = T −(G−利息)」这类关系错了就是硬伤。
670
+ 可查 operation="help", helpTopic="policy" 看文明推演配方。`;
553
671
  /**
554
672
  * 各节注册表。**顺序即目录顺序**,而顺序决定「AI 会不会翻到它」。
555
673
  *
@@ -645,9 +763,9 @@ export const HELP_TOPICS = [
645
763
  tier: 'core',
646
764
  /** 新增节,文档中尚无信号;按用户明确要求保留 core。 */
647
765
  weight: 0,
648
- title: '工程 / 生物 / 宏观(29 条领域公式)',
649
- summary: '梁柱应力挠度、热机效率煤耗、管流泵功率、载畜量营养级、劳动力货币通胀。每条都写了 scaling 律。',
650
- aliases: ['工程', '生物', '经济', '宏观', '建筑', '结构', '热机', '流体', '生态', '畜牧', '通胀'],
766
+ title: '工程 / 生物 / 材料 / 财政 / 宏观(57 条领域公式)',
767
+ summary: '梁柱应力、热机煤耗、管流泵功率;扩散供氧、异速生长、遗传平衡;胡克与断裂韧性、熔点与结合能;财政赤字与债务螺旋、GDP 恒等式与增长核算。每条都写了 scaling 律或恒等式来源。',
768
+ aliases: ['工程', '生物', '材料', '经济', '宏观', '财政', '税收', '债务', '建筑', '结构', '热机', '流体', '生态', '畜牧', '通胀', '作物'],
651
769
  body: DOMAINS_BODY,
652
770
  },
653
771
  {