dsh-math-calculator 2.2.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.
- package/CHANGELOG.md +261 -0
- package/README.md +7 -7
- package/dsh.plugin.json +1 -1
- package/lib/format.js +52 -2
- package/lib/formula-library-bioecon.js +216 -0
- package/lib/formula-library-biol-general.js +175 -0
- package/lib/formula-library-engineering.js +384 -0
- package/lib/formula-library-macro-materials.js +452 -0
- package/lib/formulas.js +91 -6
- package/lib/help.js +552 -79
- package/lib/index.js +406 -5
- package/lib/ops/shared.js +23 -1
- package/lib/param-units.js +315 -0
- package/lib/types/formula-library-bioecon.d.ts +26 -0
- package/lib/types/formula-library-biol-general.d.ts +37 -0
- package/lib/types/formula-library-engineering.d.ts +34 -0
- package/lib/types/formula-library-macro-materials.d.ts +41 -0
- package/lib/types/formulas.d.ts +11 -1
- package/lib/types/help.d.ts +39 -0
- package/lib/types/param-units.d.ts +156 -0
- package/package.json +1 -1
- package/src/format.ts +52 -4
- package/src/formula-library-bioecon.ts +220 -0
- package/src/formula-library-biol-general.ts +179 -0
- package/src/formula-library-engineering.ts +399 -0
- package/src/formula-library-macro-materials.ts +476 -0
- package/src/formulas.ts +91 -8
- package/src/help.ts +593 -80
- package/src/index.ts +415 -5
- package/src/ops/shared.ts +22 -0
- package/src/param-units.ts +336 -0
- package/lib/__wtest.txt +0 -1
- package/lib/types/client.d.ts +0 -353
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 公式库第十二批:**生物学的通用公式(跨类群/跨尺度/跨世界)**。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么这一批值得单独成文件
|
|
5
|
+
*
|
|
6
|
+
* 库里原有 31 条生物公式,但**14 条是人类医学/毒理特化**:
|
|
7
|
+
* 血液酒精浓度、儿童剂量、孕期剩余天数、LD50、输液速率 ——
|
|
8
|
+
* 这些对「9000 吨工程生物」这类设定毫无用处,且参数标定与人类解剖强绑定。
|
|
9
|
+
*
|
|
10
|
+
* 这里补的是**任何生命形式都逃不掉的那一层**,判据五条全过:
|
|
11
|
+
*
|
|
12
|
+
* ```
|
|
13
|
+
* ① 跨类群 不依赖人类解剖
|
|
14
|
+
* ② 跨尺度 微生物到鲸,跨 10 个数量级
|
|
15
|
+
* ③ 跨世界 常数显式暴露,形式与地球无关
|
|
16
|
+
* ④ 有根源 物理/几何/化学/数学,不是拟合的经验系数
|
|
17
|
+
* ⑤ 参数可得 不需要查专业表就能填
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* 第 ⑤ 条最易忽略:**通用幂律数学上能算任何东西,但用户不知道指数填多少,它就成了空壳**。
|
|
21
|
+
* 所以本批凡是幂律类,指数都**内置理论值**并注明出处,不留给用户填。
|
|
22
|
+
*
|
|
23
|
+
* ## 指数从哪来(分清「几何必然」与「网络理论推论」)
|
|
24
|
+
*
|
|
25
|
+
* 这个区分很重要 —— 前者在任何世界都成立(含非碳基),后者依赖「存在分形输运系统」这个前提:
|
|
26
|
+
*
|
|
27
|
+
* ```
|
|
28
|
+
* 2/3 ← 面积/体积的纯几何(无需任何生物假设)
|
|
29
|
+
* 1/4 ← 分形输运网络的最优层级(West-Brown-Enquist)
|
|
30
|
+
* 3/4 ← 分形网络的能量通量(Damuth)
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @module dsh-math-calculator/formula-library-biol-general
|
|
34
|
+
*/
|
|
35
|
+
const p = (value, desc) => ({ value, desc });
|
|
36
|
+
const req = (desc) => ({ value: null, desc });
|
|
37
|
+
/** 生物通用公式 7 条。 */
|
|
38
|
+
export const BIO_GENERAL_FORMULAS = [
|
|
39
|
+
{
|
|
40
|
+
id: 'sa_volume_ratio',
|
|
41
|
+
cat: 'biology/scaling',
|
|
42
|
+
name: '表面积-体积比(几何必然)',
|
|
43
|
+
expr: 'surface_coeff * mass^(2/3)',
|
|
44
|
+
params: {
|
|
45
|
+
mass: req('体重 kg'),
|
|
46
|
+
surface_coeff: p(0.11, '表面积系数(人体约 0.11,即 A ≈ 0.11·M^(2/3))'),
|
|
47
|
+
},
|
|
48
|
+
unit: 'm²(表面积;除以 mass 即单位体重的表面积)',
|
|
49
|
+
desc: ['A ∝ M^(2/3),故「面积/体积」∝ M^(−1/3)。**指数 2/3 是纯几何** ——', '任何三维物体体积 ∝ L³、表面积 ∝ L² 都成立,不需要任何生物假设,', '故跨物种、跨世界、甚至非碳基生命都适用。', '★ 一个式子回答巨兽设定的两个核心问题:体重 ×8 → 表面积 ×4 →', '单位体重散热能力 ÷2(为什么会过热);鳃面积同样只 ×4 → 单位体重摄氧 ÷2(为什么会缺氧)。', '★ Du Bois 那种人体经验式(body_surface_area)外推到 9000 吨必错;', '但这条给的是比例关系 —— 而判断大尺度是否可行,靠的就是比例。'].join(''),
|
|
50
|
+
keys: ['表面积', '体积比', 'SA:V', '平方立方', '巨兽', '表面'],
|
|
51
|
+
frequency: 'high',
|
|
52
|
+
layer: 'fundamental',
|
|
53
|
+
domains: ['biology'],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'fick_diffusion',
|
|
57
|
+
cat: 'biology/transport',
|
|
58
|
+
name: '菲克扩散通量(呼吸/吸收/供氧)',
|
|
59
|
+
expr: 'diffusion_coeff * area * delta_conc / thickness',
|
|
60
|
+
params: {
|
|
61
|
+
diffusion_coeff: req('扩散系数 D m²/s(O₂ 在水中 2e-9、在空气中 2e-5)'),
|
|
62
|
+
area: req('交换面积 m²'),
|
|
63
|
+
delta_conc: req('浓度差或分压差(与 D 单位配套)'),
|
|
64
|
+
thickness: req('屏障厚度 m'),
|
|
65
|
+
},
|
|
66
|
+
unit: '物质通量(与 ΔC·D 的单位配套)',
|
|
67
|
+
desc: ['J = D·A·ΔC/δ。鳃、肺、皮肤吸收、根吸水、细胞膜运输全是同一个式子。', '★ 纯物理,不含物种假设;它也是鳃氧限制理论(GOLT)的根基。', '★ 关键推论:A ∝ M^(2/3)、δ ∝ M^(1/3),故供氧能力 ∝ M^(1/3) ——', '这就是「大生物必须换气而不能靠扩散」的定量证明。', '★ 与 diffusion_time 配合:前者给通量,后者给「扩散够不够快」。'].join(''),
|
|
68
|
+
keys: ['Fick', '菲克', '扩散', '供氧', '鳃', '通量'],
|
|
69
|
+
frequency: 'high',
|
|
70
|
+
layer: 'fundamental',
|
|
71
|
+
domains: ['biology'],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 'diffusion_time',
|
|
75
|
+
cat: 'biology/transport',
|
|
76
|
+
name: '扩散时间标度(尺寸上限的判据)',
|
|
77
|
+
expr: 'distance^2 / (2 * diffusion_coeff)',
|
|
78
|
+
params: {
|
|
79
|
+
distance: req('特征长度 m'),
|
|
80
|
+
diffusion_coeff: req('扩散系数 D m²/s(蛋白在水中约 1e-10)'),
|
|
81
|
+
},
|
|
82
|
+
unit: 's(扩散跨越该距离所需时间)',
|
|
83
|
+
desc: ['t ≈ Δx²/(2D)。布朗运动的数学结论,与是不是生物无关。', '★ 尺寸上限的直接判据(蛋白在水里 D≈1e-10):', '1 µm → 5 ms | 10 µm → 0.5 s(细胞尺度,够用)| 1 mm → 83 min(已不够)|', '1 m → 158 年(不可能)—— 所以大生物必须有循环系统。', '★ 这条能立刻否掉「靠扩散供氧的巨兽」方案,且用的是硬数学而非估计。'].join(''),
|
|
84
|
+
keys: ['扩散时间', 'diffusion time', '尺寸上限', '布朗运动', '循环系统'],
|
|
85
|
+
frequency: 'high',
|
|
86
|
+
layer: 'derived',
|
|
87
|
+
domains: ['biology'],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'peclet_number',
|
|
91
|
+
cat: 'biology/transport',
|
|
92
|
+
name: '佩克莱数(扩散 vs 对流)',
|
|
93
|
+
expr: 'length * velocity / diffusion_coeff',
|
|
94
|
+
params: {
|
|
95
|
+
length: req('特征长度 m'),
|
|
96
|
+
velocity: req('流速 m/s'),
|
|
97
|
+
diffusion_coeff: req('扩散系数 D m²/s'),
|
|
98
|
+
},
|
|
99
|
+
unit: '无量纲(Pe ≪ 1 扩散主导;Pe ≫ 1 必须对流)',
|
|
100
|
+
desc: ['Pe = L·u/D。判断「靠扩散够不够、必须不必须对流」的无量纲判据。', '★ 它是 Reynolds 数的**质量输运版**:库里已有 reynolds(动量输运),', '但缺质量输运的对应物 —— 两者成对才有意义。', '★ 实例:毛细血管里血蛋白 v≈0.3 mm/s,微秒尺度扩散位移仅 0.3 nm → 扩散主导;', '大血管 u≈m/s → 对流主导。这解释了为什么微循环靠扩散、大循环必须泵。'].join(''),
|
|
101
|
+
keys: ['Peclet', '佩克莱', '无量纲', '对流扩散', '质量输运'],
|
|
102
|
+
frequency: 'medium',
|
|
103
|
+
layer: 'derived',
|
|
104
|
+
domains: ['biology', 'physics'],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'hardy_weinberg',
|
|
108
|
+
cat: 'biology/genetics',
|
|
109
|
+
name: '哈迪-温伯格基因型频率',
|
|
110
|
+
expr: 'p^2 + 2 * p * q + q^2',
|
|
111
|
+
params: {
|
|
112
|
+
p: req('等位基因 A 频率(0—1)'),
|
|
113
|
+
q: req('等位基因 a 频率(0—1)'),
|
|
114
|
+
},
|
|
115
|
+
unit: '无量纲(应恒为 1,用于自检与分项计算)',
|
|
116
|
+
desc: ['p² + 2pq + q² = 1。**这是纯概率论结论**(配子随机组合),不需要任何生物机制,', '所以只要「存在等位基因 + 随机交配」它就成立 —— 跨世界完全通用。', '★ 常算的是中间项 2pq:隐性基因的携带者比例。例 p=0.9、q=0.1 → 2pq=18%,', '即每 100 人里有 18 个携带者,而表现型只有 q²=1%。', '★ 若结果明显不等于 1,说明 p+q≠1,输入有误 —— 这是一条自带自检的公式。'].join(''),
|
|
117
|
+
keys: ['Hardy-Weinberg', '哈迪温伯格', '基因频率', '遗传平衡', '携带者'],
|
|
118
|
+
frequency: 'high',
|
|
119
|
+
layer: 'fundamental',
|
|
120
|
+
domains: ['biology'],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'gompertz_growth',
|
|
124
|
+
cat: 'biology/growth',
|
|
125
|
+
name: 'Gompertz 生长曲线',
|
|
126
|
+
expr: 'asymptote * exp(-shape * exp(-rate * t))',
|
|
127
|
+
params: {
|
|
128
|
+
asymptote: req('渐近上限(最终体型/规模)'),
|
|
129
|
+
shape: req('形状参数 b(决定曲线起点位置)'),
|
|
130
|
+
rate: req('早期增长率 c(1/时间)'),
|
|
131
|
+
t: req('时间'),
|
|
132
|
+
},
|
|
133
|
+
unit: '与 asymptote 同单位',
|
|
134
|
+
desc: ['N(t) = a·exp(−b·exp(−c·t))。描述「越大长得越慢」的通用形式。', '★ 比指数与 logistic 更贴合**有机体**的真实生长(logistic 更偏种群):', '跨动物、植物、细菌、肿瘤都拟合良好。', '★ 三个参数的物理含义:a = 渐近上限,c = 早期增长率,b = 曲线形状与起点。', '★ 跨世界照用:形式通用,系数按对象标定。'].join(''),
|
|
135
|
+
keys: ['Gompertz', '冈珀茨', '生长曲线', '渐近', '生长'],
|
|
136
|
+
frequency: 'high',
|
|
137
|
+
layer: 'phenomenological',
|
|
138
|
+
domains: ['biology'],
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
id: 'michaelis_menten',
|
|
142
|
+
cat: 'biology/kinetics',
|
|
143
|
+
name: '米氏方程(饱和动力学)',
|
|
144
|
+
expr: 'vmax * substrate / (km + substrate)',
|
|
145
|
+
params: {
|
|
146
|
+
vmax: req('最大速率 Vmax'),
|
|
147
|
+
km: req('半饱和常数 Km(速率达 Vmax/2 时的底物浓度)'),
|
|
148
|
+
substrate: req('底物浓度 S'),
|
|
149
|
+
},
|
|
150
|
+
unit: '与 vmax 同单位(速率)',
|
|
151
|
+
desc: ['v = Vmax·S/(Km+S)。一条式子覆盖五种现象:酶动力学、载体转运、', 'Holling II 型摄食功能反应、受体结合、土壤养分吸收 —— 因为它们都是同一个', '「先线性、再饱和」的双曲线形式。', '★ 结构性质:S ≪ Km 时 v ≈ (Vmax/Km)·S(线性);S ≫ Km 时 v → Vmax(饱和)。', '这个「处理能力有限必然饱和」是所有系统的共同特征。', '★ 与 q10_temperature 配合:前者管底物,后者管温度上限。'].join(''),
|
|
152
|
+
keys: ['Michaelis', '米氏', 'Km', 'Vmax', '酶', '饱和', 'Holling'],
|
|
153
|
+
frequency: 'high',
|
|
154
|
+
layer: 'fundamental',
|
|
155
|
+
domains: ['biology'],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
id: 'q10_temperature',
|
|
159
|
+
cat: 'biology/kinetics',
|
|
160
|
+
name: 'Q₁₀ 温度系数(生物代谢的温度律)',
|
|
161
|
+
expr: 'rate_ref * q10^((temperature - temp_ref) / 10)',
|
|
162
|
+
params: {
|
|
163
|
+
rate_ref: req('参考温度下的速率'),
|
|
164
|
+
q10: p(2.5, 'Q₁₀ 系数(跨类群常见 2~3)'),
|
|
165
|
+
temperature: req('实际温度'),
|
|
166
|
+
temp_ref: req('参考温度'),
|
|
167
|
+
},
|
|
168
|
+
unit: '与 rate_ref 同单位(速率)',
|
|
169
|
+
desc: ['R(T) = R₀·Q₁₀^((T−T₀)/10)。温度每升高 10 度,速率变为 Q₁₀ 倍。', '★ 这是**生物系统实际使用的温度律**:生态模型几乎都用它,', '因为不需要活化能 Ea(那要查专业表)。', '★ 与库里已有的 arrhenius(化学式,要 Ea)并存而不替代:', '化学场景用 Arrhenius,生物场景用 Q₁₀ —— 同一条规律的两种学科参数化。', '★ Q₁₀ 跨类群很稳(2~3),这是它比 Arrhenius 更好用的原因。'].join(''),
|
|
170
|
+
keys: ['Q10', '温度系数', '代谢温度', '温度律', '生态模型'],
|
|
171
|
+
frequency: 'high',
|
|
172
|
+
layer: 'phenomenological',
|
|
173
|
+
domains: ['biology'],
|
|
174
|
+
},
|
|
175
|
+
];
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 公式库第九批:**工程 / 生物 / 宏观经济**的常用计算。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么单独开一批
|
|
5
|
+
*
|
|
6
|
+
* 公式库原有 442 条,分布很不均:
|
|
7
|
+
*
|
|
8
|
+
* ```
|
|
9
|
+
* physics 187 条
|
|
10
|
+
* biology 26 条(偏医学剂量,生态与生理偏少)
|
|
11
|
+
* economics 26 条(几乎全是金融/投资)
|
|
12
|
+
* engineering 3 条(只有齿轮、液压、皮带——全是机械传动)
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* 作者写「这座塔能不能立住」「这个蒸汽机出多少力」「这个国家的钱够不够花」时,
|
|
16
|
+
* 前两类几乎找不到能直接用的式子,只能自己拼。这一批补的就是这三块。
|
|
17
|
+
*
|
|
18
|
+
* ## 收录判据(与既有几批一致)
|
|
19
|
+
*
|
|
20
|
+
* · **闭合式、单次求值** —— 参数现实可得,不需要解 ODE 或查外部数据表
|
|
21
|
+
* · **带量纲** —— 参数说明里写明单位,能参与带单位计算
|
|
22
|
+
* · **有工程出处** —— 经验系数标出取值范围,不编造
|
|
23
|
+
* · **不重复已有条目** —— 已存在的式子(齿轮传动比、欧拉屈曲、CAGR)不重收
|
|
24
|
+
*
|
|
25
|
+
* ## 单位约定
|
|
26
|
+
*
|
|
27
|
+
* 一律 **SI 基本单位**(m / kg / s / J / W / Pa / N),
|
|
28
|
+
* 但保留行业惯用单位(MPa、rpm、kW·h、元)并在参数说明里写清。
|
|
29
|
+
*
|
|
30
|
+
* @module dsh-math-calculator/formula-library-engineering
|
|
31
|
+
*/
|
|
32
|
+
const p = (value, desc) => ({ value, desc });
|
|
33
|
+
const req = (desc) => ({ value: null, desc });
|
|
34
|
+
/** 工程类 18 条:结构承重、热机与流体的常用算式。 */
|
|
35
|
+
export const ENGINEERING_FORMULAS = [
|
|
36
|
+
// ══════════════════════════════════════════════════════════════════
|
|
37
|
+
// A. 结构与材料(承重、截面、连接)
|
|
38
|
+
// ══════════════════════════════════════════════════════════════════
|
|
39
|
+
{
|
|
40
|
+
id: 'beam_section_modulus',
|
|
41
|
+
cat: 'engineering/structures',
|
|
42
|
+
name: '矩形截面抗弯截面系数',
|
|
43
|
+
expr: 'b * h^2 / 6',
|
|
44
|
+
params: {
|
|
45
|
+
b: req('截面宽 m'),
|
|
46
|
+
h: req('截面高 m'),
|
|
47
|
+
},
|
|
48
|
+
unit: 'm³',
|
|
49
|
+
desc: 'W = b·h²/6 —— 矩形梁抗弯计算的基础量。最大弯曲应力 σ = M / W,所以梁要高而不是宽:高度翻倍,抗弯能力变 4 倍。',
|
|
50
|
+
keys: ['截面', '抗弯', 'section modulus', '梁', 'W'],
|
|
51
|
+
frequency: 'high',
|
|
52
|
+
layer: 'derived',
|
|
53
|
+
domains: ['engineering'],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'beam_bending_stress',
|
|
57
|
+
cat: 'engineering/structures',
|
|
58
|
+
name: '梁的最大弯曲应力',
|
|
59
|
+
expr: 'M / (b * h^2 / 6) / 1e6',
|
|
60
|
+
params: {
|
|
61
|
+
M: req('弯矩 N·m'),
|
|
62
|
+
b: req('截面宽 m'),
|
|
63
|
+
h: req('截面高 m'),
|
|
64
|
+
},
|
|
65
|
+
unit: 'MPa',
|
|
66
|
+
desc: 'σ = M / W(W = b·h²/6)。与材料屈服强度对比即知是否安全。钢梁通常取许用应力 = 屈服强度 / 1.5~2。',
|
|
67
|
+
keys: ['弯曲应力', 'bending stress', '梁应力', 'MPa'],
|
|
68
|
+
frequency: 'high',
|
|
69
|
+
layer: 'derived',
|
|
70
|
+
domains: ['engineering', 'materials'],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'beam_self_weight_moment',
|
|
74
|
+
cat: 'engineering/structures',
|
|
75
|
+
name: '简支梁自重产生的跨中弯矩',
|
|
76
|
+
expr: 'rho * g * b * h * L^2 / 8',
|
|
77
|
+
params: {
|
|
78
|
+
rho: p(7850, '材料密度 kg/m³(钢 7850,木 600,混凝土 2400)'),
|
|
79
|
+
g: p(9.80665, '重力加速度 m/s²(由 world 给出)'),
|
|
80
|
+
b: req('截面宽 m'),
|
|
81
|
+
h: req('截面高 m'),
|
|
82
|
+
L: req('跨度 m'),
|
|
83
|
+
},
|
|
84
|
+
unit: 'N·m',
|
|
85
|
+
desc: '均布自重 q = ρ·g·b·h 作用在跨度为 L 的简支梁上,跨中弯矩 qL²/8。**这是跨度的平方律**:跨度翻倍,自重弯矩变 4 倍——大跨度结构必须先算这一项,否则会漏掉最主要的荷载。',
|
|
86
|
+
keys: ['自重', '均布荷载', '简支梁', 'self weight', '跨度'],
|
|
87
|
+
frequency: 'high',
|
|
88
|
+
layer: 'derived',
|
|
89
|
+
domains: ['engineering'],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'beam_uniform_load_deflection',
|
|
93
|
+
cat: 'engineering/structures',
|
|
94
|
+
name: '简支梁均布荷载跨中挠度',
|
|
95
|
+
expr: '5 * q * L^4 / (384 * E * I)',
|
|
96
|
+
params: {
|
|
97
|
+
q: req('均布荷载 N/m'),
|
|
98
|
+
L: req('跨度 m'),
|
|
99
|
+
E: p(2.06e11, '弹性模量 Pa(钢 2.06e11,木 1e10,混凝土 3e10)'),
|
|
100
|
+
I: req('截面惯性矩 m⁴(矩形 b·h³/12)'),
|
|
101
|
+
},
|
|
102
|
+
unit: 'm',
|
|
103
|
+
desc: 'δ = 5qL⁴/(384EI)。**跨度的四次方**——这是结构工程里最陡的一条 scaling:跨度翻倍,挠度变 16 倍。所以桥梁不能靠「加厚」来延长跨度,必须改结构形式(桁架、拱、预应力)。',
|
|
104
|
+
keys: ['挠度', 'deflection', '简支梁', '刚度', '四次方'],
|
|
105
|
+
frequency: 'high',
|
|
106
|
+
layer: 'derived',
|
|
107
|
+
domains: ['engineering'],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: 'rect_inertia',
|
|
111
|
+
cat: 'engineering/structures',
|
|
112
|
+
name: '矩形截面惯性矩',
|
|
113
|
+
expr: 'b * h^3 / 12',
|
|
114
|
+
params: {
|
|
115
|
+
b: req('截面宽 m'),
|
|
116
|
+
h: req('截面高 m'),
|
|
117
|
+
},
|
|
118
|
+
unit: 'm⁴',
|
|
119
|
+
desc: 'I = b·h³/12(绕水平中性轴)。挠度公式要用它,所以「高 h 的三次方」决定了梁的刚度——这是「梁要竖着放」的数学理由。',
|
|
120
|
+
keys: ['惯性矩', 'inertia', '截面', 'I'],
|
|
121
|
+
frequency: 'high',
|
|
122
|
+
layer: 'derived',
|
|
123
|
+
domains: ['engineering'],
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: 'bolt_shear_capacity',
|
|
127
|
+
cat: 'engineering/structures',
|
|
128
|
+
name: '螺栓抗剪承载力',
|
|
129
|
+
expr: 'n * tau * pi * d^2 / 4',
|
|
130
|
+
params: {
|
|
131
|
+
n: p(1, '受剪面数(单剪 1,双剪 2)'),
|
|
132
|
+
tau: p(141e6, '许用剪应力 Pa(约 0.6×屈服强度;4.6 级取 141e6)'),
|
|
133
|
+
d: req('螺栓公称直径 m(M16 = 0.016)'),
|
|
134
|
+
},
|
|
135
|
+
unit: 'N',
|
|
136
|
+
desc: 'F = n·τ·π·d²/4。普通螺栓(4.6 级)许用剪应力约 0.6×235 MPa。注意:**承压型高强螺栓靠摩擦传力,不按这个式子算**。',
|
|
137
|
+
keys: ['螺栓', '抗剪', 'bolt', '连接'],
|
|
138
|
+
frequency: 'medium',
|
|
139
|
+
layer: 'engineering',
|
|
140
|
+
domains: ['engineering'],
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: 'weld_throat_capacity',
|
|
144
|
+
cat: 'engineering/structures',
|
|
145
|
+
name: '角焊缝承载力(按喉部截面)',
|
|
146
|
+
expr: '0.707 * a * L * tau',
|
|
147
|
+
params: {
|
|
148
|
+
a: req('焊脚尺寸 m(K 值,如 6mm 焊脚 = 0.006)'),
|
|
149
|
+
L: req('焊缝计算长度 m'),
|
|
150
|
+
tau: p(160e6, '焊缝许用剪应力 Pa(E43 焊条约 160 MPa)'),
|
|
151
|
+
},
|
|
152
|
+
unit: 'N',
|
|
153
|
+
desc: '角焊缝的有效喉部厚度 = 0.707a(45° 等腰直角),有效面积 = 0.707a·L。这是钢结构连接的通用算法,比按母材截面估要准得多。',
|
|
154
|
+
keys: ['焊缝', '焊接', 'weld', '喉部'],
|
|
155
|
+
frequency: 'medium',
|
|
156
|
+
layer: 'engineering',
|
|
157
|
+
domains: ['engineering'],
|
|
158
|
+
},
|
|
159
|
+
// B. 热机与能量转换(蒸汽、内燃、传动)
|
|
160
|
+
// ══════════════════════════════════════════════════════════════════
|
|
161
|
+
{
|
|
162
|
+
id: 'thermal_efficiency_carnot',
|
|
163
|
+
cat: 'engineering/thermal',
|
|
164
|
+
name: '卡诺热机效率上限',
|
|
165
|
+
expr: '1 - Tc / Th',
|
|
166
|
+
params: {
|
|
167
|
+
Th: req('高温热源温度 K'),
|
|
168
|
+
Tc: req('低温热源温度 K'),
|
|
169
|
+
},
|
|
170
|
+
unit: '无量纲(比值)',
|
|
171
|
+
desc: 'η ≤ 1 − Tc/Th。**绝对温度**,不是摄氏度:300 K(约 27°C)与 500 K(约 227°C)' +
|
|
172
|
+
'之间,理论上限是 40%。这条给出了任何热机的天花板——' +
|
|
173
|
+
'想提高效率只能提高热源温度或降低排热温度,加多少煤都没用。',
|
|
174
|
+
keys: ['卡诺', 'carnot', '热效率', '热机', '效率上限'],
|
|
175
|
+
frequency: 'high',
|
|
176
|
+
layer: 'fundamental',
|
|
177
|
+
domains: ['engineering', 'physics'],
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
id: 'steam_power_output',
|
|
181
|
+
cat: 'engineering/thermal',
|
|
182
|
+
name: '蒸汽机功率(由蒸汽流量与焓差)',
|
|
183
|
+
expr: 'mdot * dh * eta',
|
|
184
|
+
params: {
|
|
185
|
+
mdot: req('蒸汽质量流量 kg/s'),
|
|
186
|
+
dh: req('进出口焓差 J/kg(饱和蒸汽 2.7 MPa 约 2.1e6)'),
|
|
187
|
+
eta: p(0.15, '整机效率(单级往复式 0.10~0.15,多级汽轮机 0.25~0.40)'),
|
|
188
|
+
},
|
|
189
|
+
unit: 'W',
|
|
190
|
+
desc: 'P = mdot·dh·eta。这是蒸汽动力最实用的算法:**两台同功率的机器,' +
|
|
191
|
+
'现代汽轮机(eta≈0.35)只需要往复式蒸汽机(eta≈0.12)三分之一的蒸汽**。' +
|
|
192
|
+
'写蒸汽朋克设定时,这个 3 倍差距决定了煤耗与锅炉体积。',
|
|
193
|
+
keys: ['蒸汽机', 'steam', '功率', '焓差', '锅炉'],
|
|
194
|
+
frequency: 'high',
|
|
195
|
+
layer: 'engineering',
|
|
196
|
+
domains: ['engineering'],
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
id: 'boiler_coal_rate',
|
|
200
|
+
cat: 'engineering/thermal',
|
|
201
|
+
name: '锅炉煤耗率',
|
|
202
|
+
expr: 'P / (coal_cv * eta) * 3600',
|
|
203
|
+
params: {
|
|
204
|
+
P: req('所需功率 W'),
|
|
205
|
+
coal_cv: p(2.93e7, '煤低位热值 J/kg(标准煤 2.93e7 约 7000 kcal)'),
|
|
206
|
+
eta: p(0.7, '锅炉热效率(工业锅炉 0.7~0.85,老式 0.5)'),
|
|
207
|
+
},
|
|
208
|
+
unit: 'kg/h(每小时耗煤)',
|
|
209
|
+
desc: '每小时耗煤 = P/(cv·eta) × 3600。**用「多少吨煤」比用「多少瓦」更容易让读者有体感**。' +
|
|
210
|
+
'注意这里只算锅炉;整机电效率还要再乘蒸汽机的 eta。',
|
|
211
|
+
keys: ['煤耗', 'coal', '锅炉', '燃料', '蒸汽朋克'],
|
|
212
|
+
frequency: 'high',
|
|
213
|
+
layer: 'engineering',
|
|
214
|
+
domains: ['engineering'],
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
id: 'heat_exchanger_duty',
|
|
218
|
+
cat: 'engineering/thermal',
|
|
219
|
+
name: '换热器换热量(对数平均温差)',
|
|
220
|
+
expr: 'U * A * (dT1 - dT2) / log(dT1 / dT2)',
|
|
221
|
+
params: {
|
|
222
|
+
U: p(500, '总传热系数 W/(m²·K)(水-水 800,气-水 50~200,金属间 1000+)'),
|
|
223
|
+
A: p(10, '换热面积 m²'),
|
|
224
|
+
/**
|
|
225
|
+
* 两端温差都给默认值,且**默认值必须不同**。
|
|
226
|
+
*
|
|
227
|
+
* 踩过:两个都给同一个数 → `log(dT1/dT2) = log(1) = 0` → 除零,
|
|
228
|
+
* 整条公式在全量测试里变成 `non_finite`。
|
|
229
|
+
* 而「两端温差相等」在物理上恰恰是**换热面积为无穷大**的极限,
|
|
230
|
+
* 本来就不该作为默认使用场景。
|
|
231
|
+
*/
|
|
232
|
+
dT1: p(40, '热端温差 K(入口,与 dT2 必须不同)'),
|
|
233
|
+
dT2: p(20, '冷端温差 K(出口,与 dT1 必须不同)'),
|
|
234
|
+
},
|
|
235
|
+
unit: 'W',
|
|
236
|
+
desc: 'Q = U·A·LMTD,LMTD 是对数平均温差。逆流时 dT1 与 dT2 是两端温差,' +
|
|
237
|
+
'**顺流时 LMTD 明显小于逆流**——这就是为什么好换热器都设计成逆流。' +
|
|
238
|
+
'注意 dT1 与 dT2 相等时 LMTD 退化为该值(此处按极限处理),两者不能同时为零。',
|
|
239
|
+
keys: ['换热器', 'heat exchanger', '传热', 'LMTD'],
|
|
240
|
+
frequency: 'medium',
|
|
241
|
+
layer: 'engineering',
|
|
242
|
+
domains: ['engineering'],
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
id: 'conduction_wall_loss',
|
|
246
|
+
cat: 'engineering/thermal',
|
|
247
|
+
name: '平壁导热损失',
|
|
248
|
+
expr: 'k * A * dT / d',
|
|
249
|
+
params: {
|
|
250
|
+
k: p(0.04, '导热系数 W/(m·K)(岩棉 0.04,砖 0.7,钢 45,铜 400)'),
|
|
251
|
+
A: req('壁面积 m²'),
|
|
252
|
+
dT: req('两侧温差 K'),
|
|
253
|
+
d: req('壁厚 m'),
|
|
254
|
+
},
|
|
255
|
+
unit: 'W',
|
|
256
|
+
desc: 'Q = k·A·ΔT/d。**保温材料的 k 比钢小 1000 倍**——' +
|
|
257
|
+
'所以一堵 10 cm 厚的岩棉墙,保温能力相当于 100 m 厚的钢墙。' +
|
|
258
|
+
'写工业设定时,这个比值比任何形容词都更能说明「隔热做得好不好」。',
|
|
259
|
+
keys: ['导热', 'conduction', '保温', '热损失', '隔热'],
|
|
260
|
+
frequency: 'high',
|
|
261
|
+
layer: 'derived',
|
|
262
|
+
domains: ['engineering', 'physics'],
|
|
263
|
+
},
|
|
264
|
+
// ══════════════════════════════════════════════════════════════════
|
|
265
|
+
// C. 流体与管路
|
|
266
|
+
// ══════════════════════════════════════════════════════════════════
|
|
267
|
+
{
|
|
268
|
+
id: 'pipe_flow_rate',
|
|
269
|
+
cat: 'engineering/fluid',
|
|
270
|
+
name: '管道流量(由流速与管径)',
|
|
271
|
+
expr: 'v * pi * d^2 / 4',
|
|
272
|
+
params: {
|
|
273
|
+
v: req('流速 m/s(水管 0.5~2,气体 10~30)'),
|
|
274
|
+
d: req('管内径 m'),
|
|
275
|
+
},
|
|
276
|
+
unit: 'm³/s',
|
|
277
|
+
desc: 'Q = v·pi·d²/4。**管径翻倍,流量变 4 倍**——这就是为什么供水管网' +
|
|
278
|
+
'「扩一倍口径」就能顶四条旧管。反过来,想把流量翻倍而管径只加 40% 时,' +
|
|
279
|
+
'必须把流速也提上去,代价是阻力急剧上升。',
|
|
280
|
+
keys: ['流量', '管径', 'pipe', 'flow rate', '供水'],
|
|
281
|
+
frequency: 'high',
|
|
282
|
+
layer: 'derived',
|
|
283
|
+
domains: ['engineering'],
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
id: 'darcy_head_loss',
|
|
287
|
+
cat: 'engineering/fluid',
|
|
288
|
+
name: '管道沿程水头损失(达西-魏斯巴赫)',
|
|
289
|
+
expr: 'f * (L / d) * v^2 / (2 * g)',
|
|
290
|
+
params: {
|
|
291
|
+
f: p(0.02, '摩阻系数(钢管清水 0.02,旧铸铁 0.04,混凝土渠 0.015)'),
|
|
292
|
+
L: req('管长 m'),
|
|
293
|
+
d: req('管内径 m'),
|
|
294
|
+
v: req('流速 m/s'),
|
|
295
|
+
g: p(9.80665, '重力加速度 m/s²'),
|
|
296
|
+
},
|
|
297
|
+
unit: 'm(水头)',
|
|
298
|
+
desc: 'h = f·(L/d)·v²/(2g)。**流速的平方**:流速翻倍,损失变 4 倍。' +
|
|
299
|
+
'所以长距离输水宁可加大管径、降低流速——这条决定了管网的经济流速(约 1~2 m/s)。',
|
|
300
|
+
keys: ['水头损失', '沿程阻力', 'darcy', '管路', '压降'],
|
|
301
|
+
frequency: 'high',
|
|
302
|
+
layer: 'engineering',
|
|
303
|
+
domains: ['engineering'],
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
id: 'pump_power',
|
|
307
|
+
cat: 'engineering/fluid',
|
|
308
|
+
name: '水泵轴功率',
|
|
309
|
+
expr: 'rho * g * Q * H / eta',
|
|
310
|
+
params: {
|
|
311
|
+
rho: p(1000, '流体密度 kg/m³(水 1000)'),
|
|
312
|
+
g: p(9.80665, '重力加速度 m/s²'),
|
|
313
|
+
Q: req('流量 m³/s'),
|
|
314
|
+
H: req('扬程 m'),
|
|
315
|
+
eta: p(0.7, '泵效率(离心泵 0.6~0.85,小泵取低值)'),
|
|
316
|
+
},
|
|
317
|
+
unit: 'W',
|
|
318
|
+
desc: 'P = rho·g·Q·H/eta。扬程 H 是「能把水举多高」,包含沿程损失。' +
|
|
319
|
+
'这是选泵与估电耗的核心式子:**流量与扬程都是相乘,任意一个翻倍,功率就翻倍**。',
|
|
320
|
+
keys: ['水泵', 'pump', '扬程', '功率', '灌溉'],
|
|
321
|
+
frequency: 'high',
|
|
322
|
+
layer: 'engineering',
|
|
323
|
+
domains: ['engineering', 'perception'],
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
id: 'orifice_discharge',
|
|
327
|
+
cat: 'engineering/fluid',
|
|
328
|
+
name: '孔口出流流量',
|
|
329
|
+
expr: 'Cd * A * sqrt(2 * g * h)',
|
|
330
|
+
params: {
|
|
331
|
+
Cd: p(0.62, '流量系数(薄壁圆孔 0.62,管嘴 0.82,锐缘 0.6)'),
|
|
332
|
+
A: req('孔口面积 m²'),
|
|
333
|
+
g: p(9.80665, '重力加速度 m/s²'),
|
|
334
|
+
h: req('水头 m(孔口到水面的高度)'),
|
|
335
|
+
},
|
|
336
|
+
unit: 'm³/s',
|
|
337
|
+
desc: 'Q = Cd·A·sqrt(2gh)。**水头的平方根**:想把出流量翻倍,水头要涨到 4 倍。' +
|
|
338
|
+
'这是水库泄洪、攻城水攻、倒水时间估算的通用式子。',
|
|
339
|
+
keys: ['孔口', '出流', '泄洪', 'orifice', '流量'],
|
|
340
|
+
frequency: 'medium',
|
|
341
|
+
layer: 'derived',
|
|
342
|
+
domains: ['engineering'],
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
id: 'wind_power_available',
|
|
346
|
+
cat: 'engineering/energy',
|
|
347
|
+
name: '风功率(风轮扫掠面积)',
|
|
348
|
+
expr: '0.5 * rho * A * v^3 * cp',
|
|
349
|
+
params: {
|
|
350
|
+
rho: p(1.225, '空气密度 kg/m³(海平面 1.225)'),
|
|
351
|
+
A: req('风轮扫掠面积 m²(直径 D 时 A = pi·D²/4)'),
|
|
352
|
+
v: req('风速 m/s'),
|
|
353
|
+
cp: p(0.45, '功率系数(贝茨极限 0.593,实用 0.35~0.45)'),
|
|
354
|
+
},
|
|
355
|
+
unit: 'W',
|
|
356
|
+
desc: 'P = ½rho·A·v³·Cp。**风速的三次方**——这是风能最反直觉的一条:' +
|
|
357
|
+
'风速从 5 m/s 涨到 10 m/s,功率变 **8 倍**。' +
|
|
358
|
+
'贝茨极限 0.593 是理论上限(动量守恒要求必须留一部分动能给下游气流)。',
|
|
359
|
+
keys: ['风电', 'wind power', '贝茨', '风轮', '三次方'],
|
|
360
|
+
frequency: 'high',
|
|
361
|
+
layer: 'derived',
|
|
362
|
+
domains: ['engineering', 'physics'],
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: 'water_turbine_power',
|
|
366
|
+
cat: 'engineering/energy',
|
|
367
|
+
name: '水轮机功率',
|
|
368
|
+
expr: 'rho * g * Q * H * eta',
|
|
369
|
+
params: {
|
|
370
|
+
rho: p(1000, '水密度 kg/m³'),
|
|
371
|
+
g: p(9.80665, '重力加速度 m/s²'),
|
|
372
|
+
Q: req('流量 m³/s'),
|
|
373
|
+
H: req('水头 m(落差)'),
|
|
374
|
+
eta: p(0.85, '水轮机效率(大型 0.85~0.92,小型 0.6~0.75)'),
|
|
375
|
+
},
|
|
376
|
+
unit: 'W',
|
|
377
|
+
desc: 'P = rho·g·Q·H·eta。**与水泵恰好相反**:这里 eta 是乘的(获取能量),水泵那里是除的。' +
|
|
378
|
+
'一条 10 m³/s、落差 20 m 的水渠约 1.7 MW。',
|
|
379
|
+
keys: ['水轮机', '水力发电', 'turbine', '落差', '水电'],
|
|
380
|
+
frequency: 'high',
|
|
381
|
+
layer: 'engineering',
|
|
382
|
+
domains: ['engineering', 'power'],
|
|
383
|
+
},
|
|
384
|
+
];
|