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
package/src/help.ts
CHANGED
|
@@ -54,6 +54,45 @@ export interface HelpTopic {
|
|
|
54
54
|
summary: string
|
|
55
55
|
/** 常见别名,便于用直觉词命中也(如「概率」命中 dist)。 */
|
|
56
56
|
aliases?: string[]
|
|
57
|
+
/**
|
|
58
|
+
* 频次档:`core` = 几乎每次都会用到,目录里占一行带简介;
|
|
59
|
+
* `extra` = 低频,折叠成一行只给 key + 极短标签。
|
|
60
|
+
*
|
|
61
|
+
* ## 为什么要分档(用户 2026-11-07 要求)
|
|
62
|
+
*
|
|
63
|
+
* 「加减乘除高频其余低频可以折叠」——目录每轮都要付费,
|
|
64
|
+
* 而 12 节里真正高频的是 evaluate / units / formula 这几节。
|
|
65
|
+
* 把低频节压成一行,省下的字给高频节写更详细的正文。
|
|
66
|
+
*
|
|
67
|
+
* 折叠不等于藏起来:key 与极短标签仍然列在目录里,
|
|
68
|
+
* 只是不再为它们付「一句话简介 + 别名清单」的成本。
|
|
69
|
+
*/
|
|
70
|
+
tier: 'core' | 'extra'
|
|
71
|
+
/** 折叠档用的极短标签(≤8 字,目录里跟 key 同行)。 */
|
|
72
|
+
short?: string
|
|
73
|
+
/**
|
|
74
|
+
* 实测使用频率(越大越高频)。数据来自「实践文档」里各能力被提到的次数。
|
|
75
|
+
*
|
|
76
|
+
* ## 为什么用实测而不是凭直觉分档(用户 2026-11-07 要求)
|
|
77
|
+
*
|
|
78
|
+
* 「高低频根据目前的实践文档进行统计频率来调整显示」——
|
|
79
|
+
* 我原先的分档是凭印象定的(evaluate/units/formula/world 四节 core),
|
|
80
|
+
* 而实测信号量是:
|
|
81
|
+
*
|
|
82
|
+
* ```
|
|
83
|
+
* evaluate 250 units 173 solve 59 formula 28
|
|
84
|
+
* workspace 28 world 26 derivation 21 recipe 17
|
|
85
|
+
* matrix 11 stats 11 constants 5 balance 5 ode 4
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* 与直觉的两处出入值得记:
|
|
89
|
+
* · `solve` 59 排第三,却原来被折在 evaluate 里没有独立位置;
|
|
90
|
+
* · `workspace` 28 与 formula 并列,凭印象时被我低估了。
|
|
91
|
+
*
|
|
92
|
+
* 这个数只用于**排序与分档参考**,不直接决定显示 ——
|
|
93
|
+
* 分档还要看「它是不是一个独立操作」,例如 workspace 虽高频但不该占 core 位置。
|
|
94
|
+
*/
|
|
95
|
+
weight?: number
|
|
57
96
|
/** 该节正文。 */
|
|
58
97
|
body: () => string
|
|
59
98
|
}
|
|
@@ -90,6 +129,16 @@ const EVALUATE_BODY = () => [
|
|
|
90
129
|
' ★ 写了目标单位时**不会被输出层改写**;没写时才归到常用档',
|
|
91
130
|
' (1e6 m → 1 Mm、1e12 g → 1 Mt、2.66e8*330 kg → 87.78 Mt)',
|
|
92
131
|
'',
|
|
132
|
+
'【复合单位】evaluate 能算复合单位,units 操作只认单单位。',
|
|
133
|
+
' 1 L/min to m^3/s → 1.6667e-5 m^3 / s(L/min 里的 min 会自动当成分钟)',
|
|
134
|
+
' 1 MJ/day to kW → 0.01157407 kW',
|
|
135
|
+
' 1 g/dL to kg/m^3 → 10 kg / m^3',
|
|
136
|
+
' ★ 写成 min 也没问题:单位位置的 min 与函数 min() 不会互相干扰',
|
|
137
|
+
' ★ units 操作的单位表是按量纲组织的,复合单位请改用 evaluate',
|
|
138
|
+
'',
|
|
139
|
+
'【Math.xxx 不支持】写 Math.min(3,5) 会提示「去掉 Math. 前缀」,',
|
|
140
|
+
' 直接写 min(3,5) 即可。',
|
|
141
|
+
'',
|
|
93
142
|
'【显式精度】precision(计算位,默认 64)与 displayPrecision(小数位,默认 8)',
|
|
94
143
|
' 1/3 → 0.33333333(默认 8 位小数)',
|
|
95
144
|
' 1/3, displayPrecision:0 → 0(只留整数)',
|
|
@@ -101,6 +150,17 @@ const EVALUATE_BODY = () => [
|
|
|
101
150
|
' 例:[{label:"煤砖含能", expr:"2 lb * 28000 BTU/lb to MJ"}, "1/7"]',
|
|
102
151
|
' terse:true 只回「表达式 = 结果」,省 token;失败行照常标出,不藏风险。',
|
|
103
152
|
'',
|
|
153
|
+
'【带单位的变量与公式】变量可以给带单位的量,量纲自动参与运算:',
|
|
154
|
+
' variables:{V:"10 m/s", T:"1 s"}, expression:"V*T" → 10 m',
|
|
155
|
+
' 也支持中文单位:variables:{V:"30 里/h", T:"2 时辰"} → 60 km',
|
|
156
|
+
' 链式赋值同样可用:["V=10 m/s", "T=1 s", "L=V*T"]',
|
|
157
|
+
' ★ 公式的参数也可以带单位,工具会校验量纲并换算到该参数声明的单位:',
|
|
158
|
+
' formula:"velocity_uniform", overrides:{s:"60 里", t:"2 时辰"}',
|
|
159
|
+
' → 结果 2.08333333 m/s;【单位换算】说明换成了什么',
|
|
160
|
+
' → 【同体系折算】约 30 里/时辰(输入用了里、时辰就折回里、时辰)',
|
|
161
|
+
' 量纲不符会当场报错(把 kg 传给位移参数),不会静默按数字算。',
|
|
162
|
+
' ★ 裸数字照旧接受 —— 工具不猜 10 是米还是公里。',
|
|
163
|
+
'',
|
|
104
164
|
'【批量里的 ok 契约】',
|
|
105
165
|
' 全成功 → ok=true',
|
|
106
166
|
' 有失败 → ok=false + partial=true + failed=N + succeeded=M',
|
|
@@ -112,48 +172,127 @@ const EVALUATE_BODY = () => [
|
|
|
112
172
|
].join('\n')
|
|
113
173
|
|
|
114
174
|
/** 【代数与微积分】求解/方程组/符号运算。 */
|
|
115
|
-
const ALGEBRA_BODY = (): string =>
|
|
175
|
+
const ALGEBRA_BODY = (): string => `【解方程与微积分】
|
|
176
|
+
|
|
116
177
|
solve 解方程。多方程用逗号分隔 = 方程组
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
178
|
+
3x + 2y = 10, x - y = 1 → x=2.4, y=1.4
|
|
179
|
+
x^2 - 5x + 6 = 0 → x=2, x=3
|
|
180
|
+
x^3 - 6x^2 + 11x - 6 = 0 → x=1, 2, 3(三次也解)
|
|
181
|
+
★ 退化方程组会说「无穷多解」,不静默给单解 ——
|
|
182
|
+
那正是最容易把错答案当对的场景。
|
|
183
|
+
★ 无解时会说「无解」,不给一个近似值糊弄。
|
|
184
|
+
|
|
185
|
+
system 显式线性系统(matrix 系数 + vector 右端项)
|
|
186
|
+
例:{matrix:[[3,2],[1,-1]], vector:[10,1]} ← 3x+2y=10, x-y=1
|
|
187
|
+
与 solve 的区别:solve 吃方程文本,system 吃矩阵。
|
|
188
|
+
两者都能解同一组方程;**大方程组用 system 更清晰**。
|
|
189
|
+
|
|
121
190
|
derivative 符号求导,variable 指定自变量(默认 x)
|
|
122
|
-
|
|
123
|
-
|
|
191
|
+
例:{expression:"x^3*sin(x)", variable:"x"}
|
|
192
|
+
|
|
193
|
+
integral 符号积分。给 from/to 就做定积分
|
|
194
|
+
★ 定积分用 **Fraction 引擎**代入上下限,不出 8.9999… 这类尾差
|
|
195
|
+
(BigNumber 的 1/3 是截断小数,乘 27 回不到整数)
|
|
196
|
+
|
|
124
197
|
simplify 化简(含三角恒等式)
|
|
125
|
-
expand
|
|
198
|
+
expand 展开(多项式与二项式)
|
|
126
199
|
roots 多项式求根(含复数根)
|
|
127
200
|
|
|
128
|
-
【扩展函数】
|
|
129
|
-
|
|
201
|
+
【扩展函数】
|
|
202
|
+
rank(A) 秩 / nullspace(A) 零空间 / svd(A) 奇异值
|
|
203
|
+
factorize(n) 整数分解 / nsolve("表达式", 初值) 数值求根
|
|
204
|
+
|
|
205
|
+
★ 这些函数在 evaluate 里也能用(它们是注册进 mathjs 的)。
|
|
206
|
+
例如 {expression:"rank([[1,2],[2,4]])"} → 1(两行线性相关)`
|
|
130
207
|
|
|
131
208
|
/** 【线性代数】矩阵与特征值。 */
|
|
132
209
|
const LINALG_BODY = (): string => `【线性代数】
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
210
|
+
|
|
211
|
+
matrix 矩阵运算。代入 mathjs 表达式,所以可以直接写算式:
|
|
212
|
+
{matrix:[[1,2],[3,4]]} 只给矩阵 → 输出完整画像
|
|
213
|
+
{expression:"[[1,2],[3,4]] * [[5],[6]]"} 矩阵乘向量
|
|
214
|
+
{expression:"inv([[1,2],[3,4]])"} 求逆
|
|
215
|
+
{expression:"det([[1,2],[3,4]])"} 行列式
|
|
216
|
+
{expression:"transpose([[1,2],[3,4]])"} 转置
|
|
217
|
+
{expression:"trace([[1,2],[3,4]])"} 迹
|
|
218
|
+
|
|
219
|
+
★ 只给 matrix 时输出的是**完整画像**,不只是结果:
|
|
220
|
+
秩 / 行列式 / 迹 / 奇异值 / 零空间 / 逆
|
|
221
|
+
这套画像用来看「这个矩阵有没有信息量」——
|
|
222
|
+
秩为 1 说明所有行线性相关,那方程组就无唯一解。
|
|
223
|
+
|
|
136
224
|
eigen 特征值与特征向量(复数特征值也支持)
|
|
137
|
-
|
|
225
|
+
例:{expression:"eigen([[2,0],[0,3]])"}
|
|
226
|
+
|
|
227
|
+
system 解线性方程组,给 matrix(系数)与 vector(右端项)
|
|
228
|
+
例:{matrix:[[3,2],[1,-1]], vector:[10,1]} ← 解 3x+2y=10, x-y=1
|
|
229
|
+
|
|
230
|
+
★ 秩与零空间常被忽略但很有用:
|
|
231
|
+
rank 小 → 方程组不独立,会得到「无穷多解」而非唯一解
|
|
232
|
+
nullspace 给出那些「解不出来」的方向,是理解退化方程组的钥匙
|
|
233
|
+
|
|
234
|
+
★ 本工具不做数值优化(最小二乘、SVD 压缩这类),
|
|
235
|
+
需要时用 expressions 手写,或退回 operation="evaluate"。`
|
|
138
236
|
|
|
139
237
|
/** 【统计与概率】描述统计/分布/回归。 */
|
|
140
238
|
const STATS_BODY = (): string => `【统计与概率】
|
|
141
|
-
|
|
239
|
+
|
|
240
|
+
stats 描述统计,一次给全套:
|
|
241
|
+
均值 / 中位数 / 众数 / 方差 / 标准差 / 分位数 / 偏度 / 峰度
|
|
142
242
|
例:{operation:"stats", data:[1,2,3,4]}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
243
|
+
★ 均值与中位数差得远,说明数据偏斜(少数极值拉动了均值)——
|
|
244
|
+
这是判断「平均数能不能用」的第一眼信号。
|
|
245
|
+
|
|
246
|
+
dist 概率分布。三个参数:distribution 选型 / params 给参数 / x 给求值点
|
|
247
|
+
|
|
248
|
+
normal params:[均值, 标准差] 正态分布
|
|
249
|
+
binomial params:[n, p] 二项分布(n 次试验成功 p 次)
|
|
250
|
+
poisson params:[lambda] 泊松分布(单位时间事件数)
|
|
251
|
+
exponential params:[lambda] 指数分布(等待时间)
|
|
252
|
+
chisquare params:[df] χ² 分布
|
|
253
|
+
t params:[df] t 分布(小样本)
|
|
254
|
+
normalinv x=分位数 → 给出对应的值(正态反查)
|
|
255
|
+
quantile x=分位数 → 给出分位数值
|
|
256
|
+
|
|
257
|
+
★ 给出的是 CDF 或 PDF,取决于分布定义——看输出里写的是哪个,
|
|
258
|
+
别凭分布名猜。
|
|
259
|
+
|
|
260
|
+
regression 线性与多项式回归
|
|
261
|
+
degree 指定次数(默认 1 = 线性)
|
|
262
|
+
返回系数与 **R²**
|
|
263
|
+
★ R² 接近 1 不代表因果成立,只说明拟合贴合——
|
|
264
|
+
这是最常见的误读,尤其在「用拟合曲线论证规律」时。
|
|
265
|
+
|
|
266
|
+
★ 概率类常用场景:
|
|
267
|
+
两年一遇的洪水 → 求超越概率 0.5 对应的重现期
|
|
268
|
+
「这个数字落在正常区间的概率」→ normal + CDF
|
|
269
|
+
A/B 结果差异是不是巧合 → t 分布`
|
|
148
270
|
|
|
149
271
|
/** 【微分方程】ODE 数值解。 */
|
|
150
272
|
const ODE_BODY = (): string => `【微分方程】ode 数值求解(RK4)
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
273
|
+
|
|
274
|
+
一阶方程组(SIR / 捕食模型)与二阶方程(自动降阶)都能解。
|
|
275
|
+
|
|
276
|
+
参数:
|
|
277
|
+
expression 状态方程,多个用分号分隔。等号左边是导数变量
|
|
278
|
+
例:"S'=-k1*S*I; I'=k1*S*I-k2*I; R'=k2*I" ← SIR 传染病
|
|
279
|
+
"x'=y; y'=-k*x" ← 简谐振子
|
|
280
|
+
initial 初值对象 {S:999, I:1, R:0}
|
|
281
|
+
from/to 积分区间(默认 0 → 10)
|
|
282
|
+
steps RK4 步数(默认 1000,刚性方程要加大)
|
|
283
|
+
samples 返回的采样点数(默认 24,只要不爆内存可以调大)
|
|
284
|
+
|
|
285
|
+
返回:轨迹(时间序列)、终点值、极值、**发散警告**
|
|
286
|
+
|
|
287
|
+
★ 二阶方程降阶:y'' 要写成 y'=y_d; y_d'=…,y_d 表示 dy/dt。
|
|
288
|
+
缺了辅助变量会提示补哪个,不会静默给错。
|
|
289
|
+
|
|
290
|
+
★ 数值解不是解析解:steps 太少会失真,且刚性方程(变化极快)
|
|
291
|
+
容易发散——看到发散警告就加大 steps,或换解析思路。
|
|
292
|
+
|
|
293
|
+
★ 写故事时的常见用法:
|
|
294
|
+
传染病扩散(SIR)、捕食者-猎物振荡(Lotka-Volterra)、
|
|
295
|
+
碳循环、人口动态、冷却曲线`
|
|
157
296
|
|
|
158
297
|
/** 【公式库】442 条公式的调用与检索。 */
|
|
159
298
|
const FORMULA_BODY = (): string => `【公式库】共 ${FORMULAS.length} 条自然科学公式
|
|
@@ -161,6 +300,26 @@ const FORMULA_BODY = (): string => `【公式库】共 ${FORMULAS.length} 条自
|
|
|
161
300
|
★ overrides 可覆盖任意参数 —— 这是架空世界改造的关键
|
|
162
301
|
例:把重力改成 1.5 倍地球 {"g": 14.71};光速 {"c": 1e8}
|
|
163
302
|
★ 错拼的 key 会点名上报,不会静默忽略
|
|
303
|
+
|
|
304
|
+
【参数带单位】两种写法等价,都能让单位真的参与计算:
|
|
305
|
+
1) 逐参数带单位:overrides={V:"324375 L", n:20} ← 更精确,可各给不同单位
|
|
306
|
+
2) 整批声明:unitFrom="L", overrides={V:324375, n:20} ← 更省事
|
|
307
|
+
目标单位默认用该参数自己声明的(V 声明 m³,故 324375 L → 324.375 m³)
|
|
308
|
+
★ 无量纲参数(人数、个数、份额)**不参与换算** —— 只有声明了单位的才换
|
|
309
|
+
★ 量纲不符会报错,不会静默按原数字算
|
|
310
|
+
|
|
311
|
+
【terse】只回一行,省 token:
|
|
312
|
+
terse:true → kleiber = 164316767.25 W,并注明覆盖了哪些参数
|
|
313
|
+
★ 砍掉的是标题与参数表,**风险提示不砍**:经验式的【适用域】仍然保留
|
|
314
|
+
|
|
315
|
+
★ 调低 precision 导致结果被截时会提示(如 10^20+1 在 precision=8 下末位失真)
|
|
316
|
+
★ 新补充的领域(写世界观常用):
|
|
317
|
+
engineering/structures 梁柱应力/挠度/惯性矩/螺栓焊缝(7 条)
|
|
318
|
+
engineering/thermal 卡诺效率/蒸汽功率/煤耗/换热/导热(5 条)
|
|
319
|
+
engineering/fluid,energy 管流/水头损失/泵/孔口/风电/水电(6 条)
|
|
320
|
+
biology/ecology 载畜量/出栏/料肉比/NPP/营养级(5 条)
|
|
321
|
+
econ/macro 劳力/总产出/储蓄/资本产出比/货币供应/通胀(6 条)
|
|
322
|
+
|
|
164
323
|
formulas 检索与分类:
|
|
165
324
|
query="关键词" 按名称/关键词(如 "重力"、"人口")
|
|
166
325
|
query="layer:derived" 按规则层级
|
|
@@ -353,6 +512,38 @@ const RECIPE_BODY = (): string => `【锚点 sanity】工具不知道这个数
|
|
|
353
512
|
[{label:"单价", expr:"u=5"}, {label:"小计", expr:"u*3"}]
|
|
354
513
|
★ 中间某步失败时,依赖它的下游会明确报错,不会变成「虚成功」
|
|
355
514
|
|
|
515
|
+
【文明崩溃推演】财政链,每步可核对(用 formula 逐条调,数值自己代入)
|
|
516
|
+
① effective_tax_rate 名义税率 30% 但实际只 10% → 征管弱,20% 是漏征+逃亡
|
|
517
|
+
② fiscal_balance 收入 10% GDP、支出 15% → 赤字 5%
|
|
518
|
+
③ primary_balance PB = −5% + 利息 3% = −2% GDP
|
|
519
|
+
→ 不是被旧债拖垮,而是**经营本身在亏**(结构性危机,比单纯赤字严重)
|
|
520
|
+
④ fiscal_sustainability i=8%、g=2%、d=80% → 需 PB ≥ 6%×0.8 = 4.8%,实际 −2%
|
|
521
|
+
→ 缺口 6.8%/年,十年翻倍
|
|
522
|
+
⑤ seigniorage 税加不动、借债又 i>g → 只能铸币 → 通胀上升
|
|
523
|
+
→ 通胀推高 i → 回到 ④,死亡螺旋
|
|
524
|
+
⑥ fiscal_autonomy 刚性 85% → 没有可裁量的钱,改革也推不动
|
|
525
|
+
★ 这套链能推出「为什么这个政权看着还能撑、其实已在螺旋里」,
|
|
526
|
+
比「因为腐败所以要亡」可信得多——腐败只是其中一环。
|
|
527
|
+
|
|
528
|
+
【巨兽可行性推演】生物链,回答「这么大的生物能不能活」
|
|
529
|
+
① sa_volume_ratio 体重 ×8 → 表面积 ×4 → 单位体重散热与摄氧都 ÷2
|
|
530
|
+
② fick_diffusion A∝M^(2/3)、δ∝M^(1/3) → 供氧能力 ∝ M^(1/3)
|
|
531
|
+
③ diffusion_time 若无循环,1 m 组织扩散需 158 年 → 必须有循环系统
|
|
532
|
+
④ peclet_number 血管里 Pe≫1 → 对流主导,扩散送不到深处
|
|
533
|
+
⑤ michaelis_menten 血红蛋白结合是饱和式 → 浓度再高也提不上去
|
|
534
|
+
⑥ gompertz_growth 生长必然饱和 → 有上限体型
|
|
535
|
+
★ 结论通常是「不能靠扩散活,必须进化出循环 + 换气」,而不是「不可能」
|
|
536
|
+
—— 差别在于前者给了可行路径。
|
|
537
|
+
|
|
538
|
+
【材料设定自洽】先定材料「身份证」,再让公式推后果
|
|
539
|
+
作者硬设定:E、σ_y、K_IC、ρ(以及 n、A、Q 若关心蠕变)
|
|
540
|
+
公式算后果:ε、σ、K_I、M、u
|
|
541
|
+
① hooke_law σ=200MPa → ε=1e-3
|
|
542
|
+
② safety_factor_check 200/235=1.18 → 低于 1.5,不安全
|
|
543
|
+
③ fracture_kic 5mm 裂纹 → σ_c=30/√(π·0.005)=239MPa(与屈服几乎相等)
|
|
544
|
+
④ ashby_index 与「生物合金 ρ=3000 σy=400MPa」比 → 谁更优一算便知
|
|
545
|
+
★ 工具不判断你的材料合不合理,只保证「基于你给的性质,后果是算对的」
|
|
546
|
+
|
|
356
547
|
【失败时】返回 ok=false + error.type / message / hint,按 hint 修正即可,不会崩溃。
|
|
357
548
|
常见 error.type:
|
|
358
549
|
non_finite 结果非有限(除以零、log(0))
|
|
@@ -362,6 +553,195 @@ const RECIPE_BODY = (): string => `【锚点 sanity】工具不知道这个数
|
|
|
362
553
|
not_a_quantity to 左边不是带单位的量(裸数字没有单位可换)
|
|
363
554
|
unknown_argument 参数名认不出来(会点名是哪个)`
|
|
364
555
|
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* 【工程 / 生物 / 宏观】专节 —— 覆盖写世界观最常用的三块。
|
|
559
|
+
*
|
|
560
|
+
* ## 为什么单独成节
|
|
561
|
+
*
|
|
562
|
+
* 这三块是本次新增的 29 条公式的落点,但它们在目录里跟「统计」「线代」混在一起时
|
|
563
|
+
* 读者不会想到去查。单独一节把「我要算这座塔立不立得住」直接对上一个 key。
|
|
564
|
+
*
|
|
565
|
+
* ## 内容比旧版细得多
|
|
566
|
+
*
|
|
567
|
+
* 旧版 6000 字总预算下,每节只能给十几个字。现在每节按需付费,
|
|
568
|
+
* 所以这里把**每条公式的适用域、典型取值、以及它会教你的那条 scaling 律**都写出来 ——
|
|
569
|
+
* 那些才是判断「这个数合不合理」时真正要用的。
|
|
570
|
+
*/
|
|
571
|
+
const DOMAINS_BODY = (): string => `【工程 / 生物 / 宏观】三块的常用算式(共 29 条,公式库里按 id 调用)
|
|
572
|
+
|
|
573
|
+
调用方式与其它公式一样:{operation:"formula", formula:"id", overrides:{参数}}
|
|
574
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
575
|
+
|
|
576
|
+
════ 工程·结构(engineering/structures)════
|
|
577
|
+
beam_section_modulus 抗弯截面系数 W = b·h²/6
|
|
578
|
+
★ 梁要高不要宽:高度翻倍,抗弯能力 4 倍
|
|
579
|
+
beam_bending_stress 弯曲应力 σ = M/W(输出 MPa)
|
|
580
|
+
与屈服强度比即知安全;钢梁许用应力取屈服 1/1.5~1/2
|
|
581
|
+
rect_inertia 惯性矩 I = b·h³/12
|
|
582
|
+
★ 高度的**三次方**——「梁要竖着放」的数学理由
|
|
583
|
+
beam_self_weight_moment 自重跨中弯矩 qL²/8
|
|
584
|
+
★ 跨度的**平方律**:跨度翻倍,弯矩 4 倍
|
|
585
|
+
大跨度结构必须先算这项,否则漏掉最主要的荷载
|
|
586
|
+
beam_uniform_load_deflection 均布挠度 δ = 5qL⁴/(384EI)
|
|
587
|
+
★ 跨度的**四次方**:跨度翻倍,挠度 16 倍
|
|
588
|
+
所以桥梁不能靠「加厚」延长跨度,必须改结构形式
|
|
589
|
+
bolt_shear_capacity 螺栓抗剪 F = n·τ·π·d²/4(4.6 级 τ≈141 MPa)
|
|
590
|
+
★ 承压型高强螺栓靠摩擦传力,不按这个算式
|
|
591
|
+
weld_throat_capacity 角焊缝 F = 0.707a·L·τ(喉部有效厚度 0.707a)
|
|
592
|
+
|
|
593
|
+
════ 工程·热机与能量(engineering/thermal, energy)════
|
|
594
|
+
thermal_efficiency_carnot 卡诺上限 η ≤ 1 − Tc/Th
|
|
595
|
+
★ **绝对温度**不是摄氏度;300K/500K 之间上限 40%
|
|
596
|
+
加多少煤都没用——只能提高热源温度或降低排热温度
|
|
597
|
+
steam_power_output P = ṁ·Δh·η(Δh 焓差 J/kg)
|
|
598
|
+
★ 汽轮机 η≈0.35,往复式 η≈0.12:同功率只需 1/3 蒸汽
|
|
599
|
+
这个 3 倍差距决定蒸汽朋克的煤耗与锅炉体积
|
|
600
|
+
boiler_coal_rate 每小时耗煤 = P/(cv·η)×3600(标准煤 2.93e7 J/kg)
|
|
601
|
+
★ 用「多少吨煤」比「多少瓦」更有体感
|
|
602
|
+
heat_exchanger_duty Q = U·A·LMTD(对数平均温差)
|
|
603
|
+
★ 同样两端温差,逆流 LMTD 明显大于顺流——好换热器都做成逆流
|
|
604
|
+
dT1 与 dT2 不能相等(那对应换热面积无穷大)
|
|
605
|
+
conduction_wall_loss Q = k·A·ΔT/d
|
|
606
|
+
★ 岩棉 k=0.04、钢 45 —— 差 1000 倍
|
|
607
|
+
10 cm 岩棉 ≈ 100 m 钢,这是「隔热好不好」的量化说法
|
|
608
|
+
wind_power_available P = ½ρA·v³·Cp
|
|
609
|
+
★ 风速的**三次方**:5→10 m/s,功率 8 倍(最反直觉的一条)
|
|
610
|
+
贝茨极限 0.593 是理论上限,实用 0.35~0.45
|
|
611
|
+
water_turbine_power P = ρ·g·Q·H·η(与水泵恰好相反:η 是乘的)
|
|
612
|
+
|
|
613
|
+
════ 工程·流体与管路(engineering/fluid)════
|
|
614
|
+
pipe_flow_rate Q = v·π·d²/4
|
|
615
|
+
★ 管径翻倍,流量 4 倍——扩一倍口径顶四条旧管
|
|
616
|
+
darcy_head_loss h = f·(L/d)·v²/(2g)
|
|
617
|
+
★ 流速的平方:流速翻倍损失 4 倍
|
|
618
|
+
所以长距离输水宁可加大管径降流速(经济流速 1~2 m/s)
|
|
619
|
+
pump_power P = ρ·g·Q·H/η(扬程含沿程损失)
|
|
620
|
+
流量与扬程都是相乘,任一翻倍功率就翻倍
|
|
621
|
+
orifice_discharge Q = Cd·A·√(2gh)
|
|
622
|
+
★ 水头的**平方根**:流量翻倍要水头 4 倍
|
|
623
|
+
水库泄洪、攻城水攻、倒水时间估算都用它
|
|
624
|
+
|
|
625
|
+
════ 生物·生态(biology/ecology)════
|
|
626
|
+
grazing_capacity 载畜量 = 面积×产草量×利用率/(采食量×天数)
|
|
627
|
+
★ 利用率取 0.5 不是保守而是必需:超载后草地退化,第二年产量腰斩
|
|
628
|
+
温带草原 2000~5000 kg/(ha·年),牛采食 40~60 kg/日
|
|
629
|
+
livestock_growth_time (出栏重−初生重)/日增重
|
|
630
|
+
★ 猪≈180 天、牛≈450 天、肉鸡≈42 天;这个比值决定肉价与周转率
|
|
631
|
+
feed_conversion_ratio 料肉比 = 耗料/增重
|
|
632
|
+
★ 牛 6~8、猪 2.5~3.5、鸡 1.6~2.0
|
|
633
|
+
直接决定「养一头牛要多少亩地」;牛高是反刍维持消耗大,不是品种差
|
|
634
|
+
crop_yield_npp 可收获干物质 = NPP×面积×收获指数
|
|
635
|
+
★ 谷物收获指数 0.4~0.5 —— 六成生物量是秸秆(饲料与燃料的来源)
|
|
636
|
+
trophic_chain_support 每级只剩约 10%
|
|
637
|
+
★ 养活 1 kg 狼要 10 kg 兔、100 kg 草
|
|
638
|
+
这解释了为什么食物链一般不超过 5 级,也立刻否掉「满地猛兽」
|
|
639
|
+
|
|
640
|
+
════ 宏观·经济(econ/macro)════
|
|
641
|
+
labor_force 劳力 = 人口 × 参与率(农业社会 0.45~0.55)
|
|
642
|
+
★ 0.45 里含着大量童工与老人——决定「能征多少兵、能修多大工程」
|
|
643
|
+
gdp_from_labor 产出 = 劳力 × 人均产出
|
|
644
|
+
★ 想提高总产出只有两条路;长期增长几乎全靠提高单产
|
|
645
|
+
macro_savings_rate 可投资额 = 产出 × 储蓄率
|
|
646
|
+
★ 增长燃料:东亚高速期 0.3+,贫困农业社会几乎攒不出投资
|
|
647
|
+
capital_output_ratio 所需资本产出比 = 储蓄率/增长率
|
|
648
|
+
★ 储蓄率 10%、目标增长 5%,需要资本产出比 2;实际要 4 就达不到 5%
|
|
649
|
+
这条能立刻判断增长目标现不现实
|
|
650
|
+
money_supply_from_base 广义货币 = 基础货币 × 乘数
|
|
651
|
+
★ 金属货币制乘数≈1,现代部分准备金 8~12
|
|
652
|
+
这解释了为什么古代通胀罕见而现代可以剧烈
|
|
653
|
+
inflation_from_money_growth 通胀 ≈ 货币增速 − 产出增速
|
|
654
|
+
★ 0.15 对 0.03 即约 12%,三年物价翻倍
|
|
655
|
+
「滥发货币导致崩溃」时用它量化
|
|
656
|
+
|
|
657
|
+
════ 材料·本构与微观决定(materials/)════
|
|
658
|
+
【本构:应力→应变→失效】
|
|
659
|
+
hooke_law σ = E·ε(弹性区公理,与材料种类无关)
|
|
660
|
+
★ 补上了库里断掉的一环:有 strain 定义却没有应力
|
|
661
|
+
safety_factor_check σ_allow = σ_y/n(静载 1.5~2、冲击 2~4、疲劳 3~6)
|
|
662
|
+
★ 安全系数是工程惯例不是物理律,失效后果重就取大
|
|
663
|
+
fracture_kic σ_c = K_IC/(Y·√(πa))
|
|
664
|
+
★ σ_c ∝ 1/√a:裂纹长一档,承载降 √10≈3.2 倍
|
|
665
|
+
这就是为什么压力容器要定期探伤、大件比小试样更脆
|
|
666
|
+
ashby_index M = E^a·σ^b/ρ^c(指数由几何形式决定)
|
|
667
|
+
轻而刚的梁 E^½/ρ | 轻而强的梁 σ^(2/3)/ρ | 弹性储能 σ²/E
|
|
668
|
+
★ 把「选材」从审美变成可计算:设定说「这合金轻又强」→ 一算就知排第几
|
|
669
|
+
|
|
670
|
+
【微观决定:材料属性从基础物理量推出】
|
|
671
|
+
ideal_strength σ_ideal ≈ E/10(Frenkel;E/5~E/15 都有人用)
|
|
672
|
+
★ 真正有用的是比值:实际强度只有理论的 1/100~1/10
|
|
673
|
+
**这个比值就是「冶金水平」** —— 工艺差的世界只能发挥 1%
|
|
674
|
+
melting_from_cohesive T_m ≈ (2/3)·(结合能/k_B)(Lindemann)
|
|
675
|
+
★ 熔点能从结合能推 → 可反推设计:「要熔点 2000°C 的金属」
|
|
676
|
+
pugh_ductility G/K > 0.57 偏脆,< 0.57 偏韧
|
|
677
|
+
★ K 与 G 都由键势推出,所以脆性也能从底层推
|
|
678
|
+
gruneisen_expansion α = γ·C_v/(3KV)
|
|
679
|
+
★ 补上闭环:原来 α 是硬设定,现在能由 K、C_v、γ 推
|
|
680
|
+
hall_petch σ_y = σ₀ + k_y·d^(−1/2)
|
|
681
|
+
★ 晶粒细化一个数量级,强度可翻倍 ——「锻造水平」= 能达到的 d
|
|
682
|
+
⚠ 有反 Hall-Petch 区(纳米晶粒下反而变弱)
|
|
683
|
+
wiedemann_franz κ/σ = L₀·T(L₀ = 2.44e-8 是基本常数)
|
|
684
|
+
★ 罕见的严格关系:设了电导率,导热系数自动定
|
|
685
|
+
|
|
686
|
+
════ 生物·通用(biology/scaling, transport, genetics, growth, kinetics)════
|
|
687
|
+
sa_volume_ratio A ∝ M^(2/3) → 面积/体积 ∝ M^(−1/3)(**纯几何**)
|
|
688
|
+
★ 体重 ×8 → 面积 ×4 → 单位体重散热 ÷2(为什么会过热)
|
|
689
|
+
同理鳃面积也只 ×4 → 摄氧 ÷2(为什么会缺氧)
|
|
690
|
+
fick_diffusion J = D·A·ΔC/δ(鳃/肺/皮肤/根/细胞膜同一个式子)
|
|
691
|
+
★ A∝M^(2/3)、δ∝M^(1/3) → 供氧 ∝ M^(1/3)
|
|
692
|
+
这就是「大生物必须换气而不能靠扩散」的定量证明
|
|
693
|
+
diffusion_time t ≈ Δx²/(2D)
|
|
694
|
+
★ 1 µm→5 ms | 10 µm→0.5 s(细胞够用)| 1 mm→83 min | 1 m→158 年
|
|
695
|
+
能立刻否掉「靠扩散供氧的巨兽」,用的是硬数学而非估计
|
|
696
|
+
peclet_number Pe = L·u/D(扩散 vs 对流)
|
|
697
|
+
★ Reynolds 数的质量输运版:库里已有动量版,缺这个
|
|
698
|
+
Pe≪1 扩散主导(微循环)、Pe≫1 必须泵(大血管)
|
|
699
|
+
hardy_weinberg p² + 2pq + q² = 1(**纯概率论**,无生物假设)
|
|
700
|
+
★ 常算 2pq:隐性携带者比例。p=.9 q=.1 → 携带者 18% 而表现型只 1%
|
|
701
|
+
gompertz_growth N = a·exp(−b·exp(−c·t))
|
|
702
|
+
★ 比指数/logistic 更贴合**有机体**真实生长(logistic 偏种群)
|
|
703
|
+
michaelis_menten v = Vmax·S/(Km+S)
|
|
704
|
+
★ 一条式子覆盖五种现象:酶、载体转运、Holling 摄食、受体结合、养分吸收
|
|
705
|
+
S≪Km 近线性、S≫Km 饱和 —— 这是「处理能力有限」的通用形状
|
|
706
|
+
q10_temperature R = R₀·Q₁₀^((T−T₀)/10)
|
|
707
|
+
★ 生物界**实际使用**的温度律(生态模型几乎都用它,不用 Ea)
|
|
708
|
+
与 arrhenius 并存:化学用 Arrhenius、生物用 Q₁₀
|
|
709
|
+
|
|
710
|
+
════ 政权财政(power/fiscal)════
|
|
711
|
+
fiscal_balance D = T − G(**会计恒等式**)
|
|
712
|
+
★ 关键细节:赤字**不含借债** —— 借来的钱是「赤字融资」不是收入
|
|
713
|
+
把借债算成收入,就是财政崩溃前的典型自欺
|
|
714
|
+
primary_balance PB = T −(G − 利息) = 财政余额 + 利息
|
|
715
|
+
★ 判断「还有没有救」的第一条判据:
|
|
716
|
+
PB 正而总赤字负 → 经营赚钱、被旧债利息拖垮(可救)
|
|
717
|
+
PB 负 → 经营本身在亏(结构性危机)
|
|
718
|
+
fiscal_sustainability Δd = (i−g)·d − PB
|
|
719
|
+
★ i>g 时债务自我膨胀 —— 古代帝国(高利率低增长)财政脆弱的根源
|
|
720
|
+
工业革命后的高增长期能承受高债务,就是这条的另一面
|
|
721
|
+
seigniorage 铸币税 ≈ 通胀 × 实际货币余额
|
|
722
|
+
★ 财政与货币的唯一接口:税收加不动、借债又 i>g → 只能铸币
|
|
723
|
+
历史上几乎所有恶性通胀都发生在财政危机之后
|
|
724
|
+
effective_tax_rate ETR = 实际税收/GDP(≠ 名义税率)
|
|
725
|
+
★ 差额正是漏征+逃亡。「名义 vs 实际」的差距 = 政权渗透能力
|
|
726
|
+
前工业国家 ETR 通常只有 5%~10%
|
|
727
|
+
fiscal_autonomy 可裁量支出占比 = 1 − 刚性占比
|
|
728
|
+
★ 「改革为什么推不动」的定量答案:
|
|
729
|
+
刚性 80%+ → 几乎没有政策自由度,任何冲击直接触发危机
|
|
730
|
+
|
|
731
|
+
════ 宏观恒等式(econ/macro, econ/growth)════
|
|
732
|
+
gdp_expenditure Y = C + I + G +(X−M)(会计恒等式)
|
|
733
|
+
★ 能立刻暴露不闭合的设定:C+I+G 超过 Y → 差额只能来自净进口或举债
|
|
734
|
+
growth_accounting g_Y = g_A + α·g_K +(1−α)·g_L
|
|
735
|
+
★ 人口与资本都停时 g_Y ≈ g_A —— 这就是停滞文明为何停滞
|
|
736
|
+
来源:BLS 官方 TFP 方法即基于此
|
|
737
|
+
convergence_speed λ =(1−α)(n+δ+g),差距按 e^(−λt) 收敛
|
|
738
|
+
★ 补 solow_steady_state 缺的那半:它给终点,这条给多久到达
|
|
739
|
+
fisher_money MV = PY(V 是**可调的世界观参数**)
|
|
740
|
+
★ 金属货币社会 V 低、信用货币社会 V 高
|
|
741
|
+
|
|
742
|
+
★ 这些式子的共同特点:**缩放律与恒等式比绝对值更重要**。算出来的数可以偏,
|
|
743
|
+
但「跨度翻倍挠度 16 倍」「PB = T −(G−利息)」这类关系错了就是硬伤。
|
|
744
|
+
可查 operation="help", helpTopic="policy" 看文明推演配方。`
|
|
365
745
|
/**
|
|
366
746
|
* 各节注册表。**顺序即目录顺序**,而顺序决定「AI 会不会翻到它」。
|
|
367
747
|
*
|
|
@@ -369,88 +749,185 @@ const RECIPE_BODY = (): string => `【锚点 sanity】工具不知道这个数
|
|
|
369
749
|
* `recipe` 放最后是因为它是跨节组合,读它之前一般已经读了几节。
|
|
370
750
|
*/
|
|
371
751
|
export const HELP_TOPICS: HelpTopic[] = [
|
|
752
|
+
/**
|
|
753
|
+
* ## 分档依据:实践文档实测信号量(用户 2026-11-07 要求)
|
|
754
|
+
*
|
|
755
|
+
* 「高低频根据目前的实践文档进行统计频率来调整显示」。
|
|
756
|
+
* 6 份实践文档合计 6.1 万字符,按能力关键词统计后:
|
|
757
|
+
*
|
|
758
|
+
* ```
|
|
759
|
+
* evaluate 250 units 173 solve 59 formula 28
|
|
760
|
+
* workspace 28 world 26 derivation 21 recipe 17
|
|
761
|
+
* matrix 11 stats 11 constants 5 balance 5 ode 4 bodies 0
|
|
762
|
+
* ```
|
|
763
|
+
*
|
|
764
|
+
* ## 分档不只看信号量,还看「是不是独立操作」
|
|
765
|
+
*
|
|
766
|
+
* · `solve` 59 排第三,**原来被折在 evaluate 里**——这是分档时最容易漏的,
|
|
767
|
+
* 实测才看出来它该独立。
|
|
768
|
+
* · `workspace` 28 与 formula 并列,但它是**低频操作**(一个会话通常切换一两次),
|
|
769
|
+
* 不该占 core 的目录位,保留 extra。
|
|
770
|
+
* · `bodies` 信号量 0,但它是**新功能**(用户还没用过),折在 balance 里一并说明。
|
|
771
|
+
*
|
|
772
|
+
* 所以分档 = 信号量排序 + 人工判断「独立操作 / 一次性配置 / 冷启动功能」。
|
|
773
|
+
*/
|
|
372
774
|
{
|
|
373
775
|
key: 'evaluate',
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
776
|
+
tier: 'core',
|
|
777
|
+
/** 实践文档信号量 250,断层第一:算术/带单位/批量/label 全落在这一节。 */
|
|
778
|
+
weight: 250,
|
|
779
|
+
title: '求值(evaluate)',
|
|
780
|
+
summary: '算一条式子。物理量带单位写,量纲错当场拦下;批量一次多条。',
|
|
781
|
+
aliases: ['算式', '计算', '求值', 'mathjs', 'expression'],
|
|
782
|
+
body: EVALUATE_BODY,
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
key: 'solve',
|
|
786
|
+
tier: 'core',
|
|
787
|
+
/**
|
|
788
|
+
* 信号量 59,排第三 —— 原来被折在 evaluate 里,实测才看出来它该独立。
|
|
789
|
+
* 现实里「解方程」与「算一条式子」是两种不同的心智动作,
|
|
790
|
+
* 前者要写方程、要看解的形式(唯一解/无穷多解/无解)。
|
|
791
|
+
*/
|
|
792
|
+
weight: 59,
|
|
793
|
+
title: '解方程与微积分(solve / derivative / integral)',
|
|
794
|
+
summary: '解方程与方程组、符号求导积分。退化方程组会说「无穷多解」而非静默给单解。',
|
|
795
|
+
aliases: ['方程', '求解', 'solve', '积分', '求导', '微积分', 'algebra'],
|
|
796
|
+
body: ALGEBRA_BODY,
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
key: 'units',
|
|
800
|
+
tier: 'core',
|
|
801
|
+
/** 信号量 173:中制单位(里/丈/斤/亩)与 to 换算在各文档频繁出现。 */
|
|
802
|
+
weight: 173,
|
|
803
|
+
title: '单位换算与输出单位(units)',
|
|
804
|
+
summary: '中外古今单位换算、自定义单位,以及输出为什么是大数配吨/公里。',
|
|
805
|
+
aliases: ['单位', '换算', '里', '丈', '斤', '亩', 'unit', 'conversion'],
|
|
806
|
+
body: UNITS_BODY,
|
|
807
|
+
},
|
|
808
|
+
{
|
|
809
|
+
key: 'formula',
|
|
810
|
+
tier: 'core',
|
|
811
|
+
/** 信号量 28。 */
|
|
812
|
+
weight: 28,
|
|
813
|
+
title: '公式库(formula / formulas)',
|
|
814
|
+
summary: `调 ${FORMULAS.length} 条公式、overrides 改造参数(架空世界的关键)、按层级/领域检索。`,
|
|
815
|
+
aliases: ['公式', 'formula', '检索', 'overrides', '覆盖参数'],
|
|
816
|
+
body: FORMULA_BODY,
|
|
817
|
+
},
|
|
818
|
+
{
|
|
819
|
+
key: 'world',
|
|
820
|
+
tier: 'core',
|
|
821
|
+
/** 信号量 26。 */
|
|
822
|
+
weight: 26,
|
|
823
|
+
title: '世界观推演(world / 地形 / 气候)',
|
|
824
|
+
summary: '星球参数得体感画像:重力昼夜气候、天空、恒星寿命、卫星、生命闸门。★ 完整字段表在这里。',
|
|
825
|
+
aliases: ['星球', '世界', '重力', '气候', '恒星', '地形', 'world', 'planet'],
|
|
826
|
+
body: WORLD_BODY,
|
|
827
|
+
},
|
|
828
|
+
/**
|
|
829
|
+
* ## extra:低频,折叠成一行 key + 短标签
|
|
830
|
+
*
|
|
831
|
+
* 用户原话:「加减乘除高频其余低频可以折叠。」
|
|
832
|
+
* 折叠不等于藏起来 —— key 与六字标签仍在目录里,AI 能看见并可以查,
|
|
833
|
+
* 只是不再为它们付「一句话简介 + 别名清单」的成本。
|
|
834
|
+
*/
|
|
835
|
+
{
|
|
836
|
+
key: 'domains',
|
|
837
|
+
tier: 'core',
|
|
838
|
+
/** 新增节,文档中尚无信号;按用户明确要求保留 core。 */
|
|
839
|
+
weight: 0,
|
|
840
|
+
title: '工程 / 生物 / 材料 / 财政 / 宏观(57 条领域公式)',
|
|
841
|
+
summary: '梁柱应力、热机煤耗、管流泵功率;扩散供氧、异速生长、遗传平衡;胡克与断裂韧性、熔点与结合能;财政赤字与债务螺旋、GDP 恒等式与增长核算。每条都写了 scaling 律或恒等式来源。',
|
|
842
|
+
aliases: ['工程', '生物', '材料', '经济', '宏观', '财政', '税收', '债务', '建筑', '结构', '热机', '流体', '生态', '畜牧', '通胀', '作物'],
|
|
843
|
+
body: DOMAINS_BODY,
|
|
378
844
|
},
|
|
379
845
|
{
|
|
380
846
|
key: 'linalg',
|
|
847
|
+
tier: 'extra',
|
|
848
|
+
/** 信号量 11。 */
|
|
849
|
+
weight: 11,
|
|
850
|
+
short: '矩阵/特征值',
|
|
381
851
|
title: '线性代数(matrix / eigen)',
|
|
382
|
-
summary: '
|
|
852
|
+
summary: '矩阵运算、特征值;只给 matrix 时输出秩/行列式/奇异值/零空间/逆的完整画像。',
|
|
383
853
|
aliases: ['矩阵', '行列式', '特征值', 'matrix', 'eigen', '线性'],
|
|
384
854
|
body: LINALG_BODY,
|
|
385
855
|
},
|
|
386
856
|
{
|
|
387
857
|
key: 'stats',
|
|
858
|
+
tier: 'extra',
|
|
859
|
+
/** 信号量 11。 */
|
|
860
|
+
weight: 11,
|
|
861
|
+
short: '统计/分布/回归',
|
|
388
862
|
title: '统计与概率(stats / dist / regression)',
|
|
389
|
-
summary: '
|
|
390
|
-
aliases: ['统计', '概率', '分布', '回归', '方差'
|
|
863
|
+
summary: '描述统计、八种概率分布(CDF/PDF/分位数)、线性与多项式回归。',
|
|
864
|
+
aliases: ['统计', '概率', '分布', '回归', '方差'],
|
|
391
865
|
body: STATS_BODY,
|
|
392
866
|
},
|
|
393
867
|
{
|
|
394
868
|
key: 'ode',
|
|
869
|
+
tier: 'extra',
|
|
870
|
+
/** 信号量 4 —— 最低的一档。 */
|
|
871
|
+
weight: 4,
|
|
872
|
+
short: '微分方程',
|
|
395
873
|
title: '微分方程(ode)',
|
|
396
874
|
summary: 'RK4 数值解一阶方程组与二阶方程,返回轨迹/终点值/极值/发散警告。',
|
|
397
875
|
aliases: ['微分方程', 'ode', '传染病', '捕食模型', 'rk4'],
|
|
398
876
|
body: ODE_BODY,
|
|
399
877
|
},
|
|
400
|
-
{
|
|
401
|
-
key: 'formula',
|
|
402
|
-
title: '公式库(formula / formulas / formula-table)',
|
|
403
|
-
summary: '调用 442 条自然科学公式并用 overrides 改造任意参数(架空世界的关键),以及按层级/领域/频率检索。',
|
|
404
|
-
aliases: ['公式', 'formula', '检索', 'overrides', '覆盖参数'],
|
|
405
|
-
body: FORMULA_BODY,
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
key: 'units',
|
|
409
|
-
title: '单位换算与输出单位策略(units)',
|
|
410
|
-
summary: '中外古今单位换算、自定义单位覆盖,以及输出时为什么是大数配吨/公里而不是 Tg/Tm。',
|
|
411
|
-
aliases: ['单位', '换算', '里', '丈', '斤', '亩', 'unit', 'conversion'],
|
|
412
|
-
body: UNITS_BODY,
|
|
413
|
-
},
|
|
414
|
-
{
|
|
415
|
-
key: 'world',
|
|
416
|
-
title: '世界观推演(world / 地形 / 气候)',
|
|
417
|
-
summary: '给星球参数得一张体感画像:重力昼夜季节气候、天空配色、恒星寿命、卫星、化学窗口、生命闸门。★ 完整字段表在这里。',
|
|
418
|
-
aliases: ['星球', '世界', '重力', '气候', '恒星', '地形', 'world', 'planet'],
|
|
419
|
-
body: WORLD_BODY,
|
|
420
|
-
},
|
|
421
878
|
{
|
|
422
879
|
key: 'constants',
|
|
880
|
+
tier: 'extra',
|
|
881
|
+
/** 信号量 5。 */
|
|
882
|
+
weight: 5,
|
|
883
|
+
short: '改常数看后果',
|
|
423
884
|
title: '常数推演(constants / quantities / impact)',
|
|
424
|
-
summary: '
|
|
425
|
-
aliases: ['常数', '物理常数', '光速', '引力常数', '推翻物理'
|
|
885
|
+
summary: '改光速/引力常数,派生量自动重算并评估偏离度;看哪些物理量该跟着变。',
|
|
886
|
+
aliases: ['常数', '物理常数', '光速', '引力常数', '推翻物理'],
|
|
426
887
|
body: CONSTANTS_BODY,
|
|
427
888
|
},
|
|
428
889
|
{
|
|
429
890
|
key: 'balance',
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
891
|
+
tier: 'extra',
|
|
892
|
+
/** 信号量 5。 */
|
|
893
|
+
weight: 5,
|
|
894
|
+
short: '收支/天体',
|
|
895
|
+
title: '收支盘点与天体目录(balance / bodies)',
|
|
896
|
+
summary: '粮水能地财政军费多项一起看给最短板;以及天体目录、类型学、常数变化影响。',
|
|
897
|
+
aliases: ['收支', '盘点', '养得起', '经济', '天体', '火星'],
|
|
433
898
|
body: BALANCE_BODY,
|
|
434
899
|
},
|
|
435
900
|
{
|
|
436
901
|
key: 'derivation',
|
|
437
|
-
|
|
438
|
-
|
|
902
|
+
tier: 'extra',
|
|
903
|
+
/** 信号量 21。 */
|
|
904
|
+
weight: 21,
|
|
905
|
+
short: '推演栈 29 子命令',
|
|
906
|
+
title: '推演栈(derivation 子命令)',
|
|
907
|
+
summary: '八层推演栈、混沌拦截、结论翻转、逆推校准、敏感度、相图、白皮书、算力、幻想层、文明极限。',
|
|
439
908
|
aliases: ['推演', 'derivation', '混沌', '白皮书', '相图', '敏感度', '算力'],
|
|
440
909
|
body: DERIVATION_BODY,
|
|
441
910
|
},
|
|
442
911
|
{
|
|
443
912
|
key: 'workspace',
|
|
913
|
+
tier: 'extra',
|
|
914
|
+
/** 信号量 28 —— 与 formula 并列,但它是低频操作,保留 extra。 */
|
|
915
|
+
weight: 28,
|
|
916
|
+
short: '工作区/变量',
|
|
444
917
|
title: '数据管理(workspace)',
|
|
445
|
-
summary: '
|
|
918
|
+
summary: '工作区(一个世界观一套常数/公式/地点/变量)、命名变量跨调用复用、精度固化。',
|
|
446
919
|
aliases: ['工作区', '变量', 'workspace', '切换', '保存'],
|
|
447
920
|
body: WORKSPACE_BODY,
|
|
448
921
|
},
|
|
449
922
|
{
|
|
450
923
|
key: 'recipe',
|
|
924
|
+
tier: 'extra',
|
|
925
|
+
/** 信号量 17。 */
|
|
926
|
+
weight: 17,
|
|
927
|
+
short: '锚点/账本/错误码',
|
|
451
928
|
title: '常见配方(锚点/账本闭合/多步链/错误码)',
|
|
452
|
-
summary: '跨节组合用法:sanity
|
|
453
|
-
aliases: ['锚点', 'sanity', '账本', '闭合', '多步', '错误', '配方'
|
|
929
|
+
summary: '跨节组合用法:sanity 锚点比对你自己给的判据、账本闭合、多步链、错误码对照。',
|
|
930
|
+
aliases: ['锚点', 'sanity', '账本', '闭合', '多步', '错误', '配方'],
|
|
454
931
|
body: RECIPE_BODY,
|
|
455
932
|
},
|
|
456
933
|
]
|
|
@@ -488,32 +965,68 @@ function findTopic(topic: string): HelpTopic | undefined {
|
|
|
488
965
|
}
|
|
489
966
|
|
|
490
967
|
/**
|
|
491
|
-
*
|
|
968
|
+
* 目录层:**高频给简介,低频折叠成一行**。
|
|
969
|
+
*
|
|
970
|
+
* ## 用户要求(2026-11-07)
|
|
971
|
+
*
|
|
972
|
+
* 「压缩目录本身的字符数,合并同类项减少目录本身的字数,
|
|
973
|
+
* 加减乘除高频其余低频可以折叠。」
|
|
492
974
|
*
|
|
493
|
-
* ##
|
|
975
|
+
* ## 旧版哪里浪费了
|
|
494
976
|
*
|
|
495
|
-
*
|
|
496
|
-
*
|
|
497
|
-
*
|
|
977
|
+
* 旧目录 1731 字符里,**12 行「也可写: 别名…」占了 432 字符**。
|
|
978
|
+
* 而那些别名本来就能通过 `findTopic` 的 alias 匹配命中
|
|
979
|
+
* (写「矩阵」照样查到 linalg)—— 列出来只是为了「让人看见」。
|
|
980
|
+
*
|
|
981
|
+
* 但 AI 不需要看见别名清单才能查到它。真正需要看见的是:
|
|
982
|
+
* · 有哪些**能力**(key + 一句话用途)
|
|
983
|
+
* · 哪些是高频(值得先查)
|
|
984
|
+
*
|
|
985
|
+
* ## 现在的结构
|
|
986
|
+
*
|
|
987
|
+
* ```
|
|
988
|
+
* ▸ core 节(4 个):key + 标题 + 一句简介 ← 每行值钱,保留
|
|
989
|
+
* ▸ extra 节(8 个):一行 key + 六字标签 ← 折叠,但仍在目录里
|
|
990
|
+
* ```
|
|
991
|
+
*
|
|
992
|
+
* 折叠掉的部分:别名清单、长标题、extra 节的长简介。
|
|
993
|
+
* 它们没有丢 —— 查那一节时正文里有,且别名匹配照旧生效。
|
|
498
994
|
*/
|
|
499
995
|
function renderIndex(): string {
|
|
996
|
+
/**
|
|
997
|
+
* 按实测信号量排序(大的在前)——
|
|
998
|
+
* 这样 AI 读目录时,最可能用到的能力自然排在最前面。
|
|
999
|
+
* 同权重时保持注册顺序(`Array.prototype.sort` 是稳定的)。
|
|
1000
|
+
*/
|
|
1001
|
+
const byWeight = (a: HelpTopic, b: HelpTopic) => (b.weight ?? 0) - (a.weight ?? 0)
|
|
1002
|
+
const core = HELP_TOPICS.filter((item) => item.tier === 'core').sort(byWeight)
|
|
1003
|
+
const extra = HELP_TOPICS.filter((item) => item.tier === 'extra').sort(byWeight)
|
|
500
1004
|
const lines: string[] = [
|
|
501
1005
|
'══════ math_execute 能力目录(' + HELP_TOPICS.length + ' 节)══════',
|
|
502
|
-
'',
|
|
503
|
-
'用 helpTopic 取任一节的详细说明,不带则回到本目录。',
|
|
504
|
-
'(例:{operation:"help", helpTopic:"world"} → world 的完整字段表)',
|
|
1006
|
+
'helpTopic:"键名" 取该节全文;也可用中文词(矩阵/星球/单位…)。',
|
|
505
1007
|
'',
|
|
506
1008
|
]
|
|
507
|
-
for (const topic of
|
|
508
|
-
lines.push(' ' + topic.key.padEnd(
|
|
1009
|
+
for (const topic of core) {
|
|
1010
|
+
lines.push(' ' + topic.key.padEnd(10) + topic.title)
|
|
509
1011
|
lines.push(' ' + topic.summary)
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
1012
|
+
}
|
|
1013
|
+
/**
|
|
1014
|
+
* 低频节压成一行:`key` 后面跟六字标签。
|
|
1015
|
+
* 用 ` / ` 分隔而不是每个占一行,是因为 8 行 = 8 次换行成本,
|
|
1016
|
+
* 而它们本来只是「顺带知道一下」的存在。
|
|
1017
|
+
*/
|
|
1018
|
+
lines.push('')
|
|
1019
|
+
lines.push(' 低频(同样可查,正文里有完整说明):')
|
|
1020
|
+
const folded = extra.map(function (item) {
|
|
1021
|
+
const label = item.short ?? item.title.slice(0, 8)
|
|
1022
|
+
return item.key + '=' + label
|
|
1023
|
+
})
|
|
1024
|
+
/** 每行约三到四项,便于目视扫读,也不至于把一行拉得过长。 */
|
|
1025
|
+
for (let index = 0; index < folded.length; index += 3) {
|
|
1026
|
+
lines.push(' ' + folded.slice(index, index + 3).join(' · '))
|
|
513
1027
|
}
|
|
514
1028
|
lines.push('')
|
|
515
|
-
lines.push('★
|
|
516
|
-
lines.push(' 带单位时量纲错误会被当场拦下;裸数字无从判断 745.7 是瓦还是千瓦。')
|
|
1029
|
+
lines.push('★ 物理量一律带单位写((10 hp/0.475) to kW、5 cm to inch):量纲错当场拦下。')
|
|
517
1030
|
return lines.join('\n')
|
|
518
1031
|
}
|
|
519
1032
|
|
|
@@ -540,4 +1053,4 @@ export function opHelp(topic?: string): Outcome {
|
|
|
540
1053
|
result: '没有名为 "' + topic + '" 的节。下面是目录,可用 key 取任一节:\n\n' + renderIndex(),
|
|
541
1054
|
value: { topics: HELP_TOPICS.map((item) => item.key), requested: topic },
|
|
542
1055
|
}
|
|
543
|
-
}
|
|
1056
|
+
}
|