Calculator
Overview
本地高性能计算器,通过 calc.py 统一脚本提供数值计算能力,基于 numpy、scipy、mpmath 实现。
Prerequisites
确保以下库已安装:
CODEBLOCK0
numpy 通常已预装。验证安装:
CODEBLOCK1
Decision Guide
根据计算需求选择子命令:
| 需求 | 子命令 | 示例 |
|---|
| 日常数学运算(四则、三角、对数) | INLINECODE1 | INLINECODE2 |
| 结果可能超过 float64 精度(~15位) |
precision |
precision "factorial(100)" --precision 50 |
| 大数、阶乘、特殊函数(gamma/zeta) |
precision |
precision "zeta(3)" --precision 30 |
| 矩阵运算(乘法、求逆、特征值等) |
matrix |
matrix det --matrix "[[1,2],[3,4]]" |
| 统计分析(均值、回归、概率分布) |
stats |
stats describe --data "[1,2,3,4,5]" |
| 求函数极值或方程根 |
optimize |
optimize minimize --expr "x**2" --bounds "[-5,5]" |
| 定积分或微分方程 |
integrate |
integrate definite --expr "sin(x)" --bounds "[0,pi]" |
| 傅里叶变换、卷积 |
transform |
transform fft --data "[1,0,1,0]" |
关键区分: eval 用 numpy(float64 ≈15位精度),precision 用 mpmath(任意位数)。当 Agent 不确定精度需求时,默认用 eval;涉及大数、高精度或特殊数学函数时用 precision。
Output Format
所有子命令的输出格式统一为:
CODEBLOCK2
- - 结果输出到 stdout,错误输出到 stderr
- 退出码:成功=0,错误=1 或 2(参数错误)
- 矩阵结果为 Python 列表格式: INLINECODE21
- 统计描述为 key-value 对齐格式
- FFT 结果为索引+复数格式:
[0] 4, INLINECODE23
Quick Reference
CODEBLOCK3
Usage Guide
eval — 表达式求值
CODEBLOCK4
支持:四则运算、幂(**)、三角函数(sin/cos/tan/asin/acos/atan)、双曲函数(sinh/cosh/tanh)、对数(log=ln/log2/log10)、sqrt、cbrt、exp、abs、floor、ceil、常数 pi/e/inf/nan。
INLINECODE25 指定时切换到 mpmath 后端进行高精度计算。
matrix — 矩阵运算
CODEBLOCK5
| operation | 说明 | 额外参数 |
|---|
| INLINECODE26 | 矩阵乘法 | INLINECODE27 |
| INLINECODE28 |
矩阵求逆 | — |
|
det | 行列式 | — |
|
eigen | 特征值/特征向量 | — |
|
transpose | 转置 | — |
|
svd | 奇异值分解 | — |
|
rank | 矩阵秩 | — |
|
solve | 解线性方程组 Ax=b |
--matrix2 (向量 b) |
矩阵输入使用 Python 字面量: INLINECODE36
stats — 统计分析
CODEBLOCK6
| operation | 说明 | 额外参数 |
|---|
| INLINECODE37 | 描述性统计 | — |
| INLINECODE38 |
相关系数 |
--data2 |
|
regression | 线性回归 |
--data2 |
|
percentile | 百分位数 |
--target |
|
pdf | 概率密度函数 |
--data (分布名),
--target,
--params |
|
cdf | 累积分布函数 |
--data (分布名),
--target,
--params |
分布名支持:normal/gaussian, uniform, exponential, t, chi2, f
chi2/t/f 分布需要通过 --params 传入形状参数:
CODEBLOCK7
precision — 任意精度
CODEBLOCK8
始终使用 mpmath 后端。额外支持:factorial, gamma, zeta, binomial(eval 不支持这些函数)。
典型场景:大数阶乘、超越函数高精度值、数论计算。
optimize — 数值优化
CODEBLOCK9
表达式中的变量为 x。支持:minimize, maximize, root。
⚠️ 重要: 当表达式以 - 开头时,必须使用 = 语法传参,否则 argparse 会将其误认为参数标志:
CODEBLOCK10
bounds 支持 pi、e 等数学常数。
integrate — 数值积分
CODEBLOCK11
- -
definite:定积分,表达式为 f(x) - INLINECODE57 :常微分方程,表达式为
dy/dx = ... 或直接写右端,需 --initial 指定初值
bounds 支持 pi、e 等数学常数。
transform — 信号处理
CODEBLOCK12
支持:fft, ifft, convolve
Caveats
- -
--precision 适用于 eval、optimize、integrate,触发 mpmath 后端 - 矩阵输入使用 Python 字面量语法 INLINECODE61
- bounds 支持数学常数,如
[0,pi]、 INLINECODE63 - 表达式使用受限解析器,仅允许数学运算符和函数,不可执行任意代码
- 以
- 开头的表达式参数必须用 --param="value" 的 = 语法 - INLINECODE67 的
--matrix2 接受 1D 向量 [5,6] 或 2D 列向量 INLINECODE70 - INLINECODE71 独占函数(factorial, gamma, zeta, binomial)在
eval 中不可用 - chi2/t/f 分布的 pdf/cdf 需要通过
--params 传入形状参数,如 --params "[5]" 或 INLINECODE75
scripts/
| 脚本 | 说明 |
|---|
| INLINECODE76 | 统一计算入口脚本,通过子命令分发到各计算模块 |
| INLINECODE77 |
测试套件(97 个用例),同时也是完整的用法参考——包含全部子命令的 CLI 入参和预期输出 |
运行测试:
CODEBLOCK13
不确定某个子命令的用法时,直接读取 test_calc.py 查看对应测试用例。
计算器
概述
本地高性能计算器,通过 calc.py 统一脚本提供数值计算能力,基于 numpy、scipy、mpmath 实现。
前置条件
确保以下库已安装:
bash
pip3 install scipy mpmath
numpy 通常已预装。验证安装:
bash
python3 -c import numpy, scipy, mpmath
决策指南
根据计算需求选择子命令:
| 需求 | 子命令 | 示例 |
|---|
| 日常数学运算(四则、三角、对数) | eval | eval sin(pi/4) + sqrt(2) |
| 结果可能超过 float64 精度(约15位) |
precision | precision factorial(100) --precision 50 |
| 大数、阶乘、特殊函数(gamma/zeta) | precision | precision zeta(3) --precision 30 |
| 矩阵运算(乘法、求逆、特征值等) | matrix | matrix det --matrix [[1,2],[3,4]] |
| 统计分析(均值、回归、概率分布) | stats | stats describe --data [1,2,3,4,5] |
| 求函数极值或方程根 | optimize | optimize minimize --expr x
2 --bounds [-5,5] |
| 定积分或微分方程 | integrate | integrate definite --expr sin(x) --bounds [0,pi] |
| 傅里叶变换、卷积 | transform | transform fft --data [1,0,1,0] |
关键区分: eval 使用 numpy(float64 约15位精度),precision 使用 mpmath(任意位数)。当 Agent 不确定精度需求时,默认使用 eval;涉及大数、高精度或特殊数学函数时使用 precision。
输出格式
所有子命令的输出格式统一为:
=== <子命令> ===
<结果内容>
- - 结果输出到 stdout,错误输出到 stderr
- 退出码:成功=0,错误=1 或 2(参数错误)
- 矩阵结果为 Python 列表格式:[[1.0, 2.0], [3.0, 4.0]]
- 统计描述为 key-value 对齐格式
- FFT 结果为索引+复数格式:[0] 4, [1] 1 + -2.41421j
快速参考
bash
SKILL_DIR=~/.config/opencode/skills/calculator
表达式求值
python3 $SKILL_DIR/scripts/calc.py eval 2
10 + sin(pi/4)
python3 $SKILL_DIR/scripts/calc.py eval pi --precision 50
矩阵运算
python3 $SKILL_DIR/scripts/calc.py matrix det --matrix [[1,2],[3,4]]
python3 $SKILL_DIR/scripts/calc.py matrix inverse --matrix [[1,2],[3,4]]
统计分析
python3 $SKILL_DIR/scripts/calc.py stats describe --data [1,2,3,4,5,6,7,8,9,10]
python3 $SKILL_DIR/scripts/calc.py stats regression --data [1,2,3] --data2 [2,4,6]
任意精度
python3 $SKILL_DIR/scripts/calc.py precision pi
100 --precision 100
python3 $SKILL_DIR/scripts/calc.py precision factorial(1000) --precision 50
数值优化
python3 $SKILL_DIR/scripts/calc.py optimize minimize --expr x
2 + 2*x + 1 --bounds [-10,10]
python3 $SKILL_DIR/scripts/calc.py optimize root --expr x
3 - 2*x - 5 --bounds [1,3]
数值积分
python3 $SKILL_DIR/scripts/calc.py integrate definite --expr sin(x) --bounds [0,pi]
python3 $SKILL_DIR/scripts/calc.py integrate ode --expr dy/dx = -y --bounds [0,5] --initial 1
信号处理
python3 $SKILL_DIR/scripts/calc.py transform fft --data [1,0,0,0,0,0,0,0]
python3 $SKILL_DIR/scripts/calc.py transform convolve --data [1,2,3] --data2 [4,5]
使用指南
eval — 表达式求值
bash
calc.py eval [--precision N]
支持:四则运算、幂()、三角函数(sin/cos/tan/asin/acos/atan)、双曲函数(sinh/cosh/tanh)、对数(log=ln/log2/log10)、sqrt、cbrt、exp、abs、floor、ceil、常数 pi/e/inf/nan。
指定 --precision 时切换到 mpmath 后端进行高精度计算。
matrix — 矩阵运算
bash
calc.py matrix --matrix [--matrix2 ]
| operation | 说明 | 额外参数 |
|---|
| multiply | 矩阵乘法 | --matrix2 |
| inverse |
矩阵求逆 | — |
| det | 行列式 | — |
| eigen | 特征值/特征向量 | — |
| transpose | 转置 | — |
| svd | 奇异值分解 | — |
| rank | 矩阵秩 | — |
| solve | 解线性方程组 Ax=b | --matrix2 (向量 b) |
矩阵输入使用 Python 字面量:--matrix [[1,2],[3,4]]
stats — 统计分析
bash
calc.py stats --data [--data2 ] [--target N]
| operation | 说明 | 额外参数 |
|---|
| describe | 描述性统计 | — |
| corr |
相关系数 | --data2 |
| regression | 线性回归 | --data2 |
| percentile | 百分位数 | --target |
| pdf | 概率密度函数 | --data (分布名), --target, --params |
| cdf | 累积分布函数 | --data (分布名), --target, --params |
分布名支持:normal/gaussian, uniform, exponential, t, chi2, f
chi2/t/f 分布需要通过 --params 传入形状参数:
bash
chi2 自由度 df=5
calc.py stats pdf --data chi2 --target 5 --params [5]
t 分布自由度 df=10
calc.py stats cdf --data t --target 2 --params [10]
F 分布 d1=5, d2=10
calc.py stats pdf --data f --target 3 --params [5,10]
precision — 任意精度
bash
calc.py precision --precision N
始终使用 mpmath 后端。额外支持:factorial, gamma, zeta, binomial(eval 不支持这些函数)。
典型场景:大数阶乘、超越函数高精度值、数论计算。
optimize — 数值优化
bash
calc.py optimize --expr= --bounds=[lo,hi]
表达式中的变量为 x。支持:minimize, maximize, root。
⚠️ 重要: 当表达式以 - 开头时,必须使用 = 语法传参,否则 argparse 会将其误认为参数标志:
bash
正确
calc.py optimize maximize --expr=-x
2+4 --bounds=[-3,3]
错误(argparse 报错)
calc.py optimize maximize --expr -x
2+4 --bounds [-3,3]
bounds 支持 pi、e 等数学常数。
integrate — 数值积分
bash
calc.py integrate --expr= --bounds=[lo,hi] [--initial N]
- - definite:定积分,表达式为 f(x)
- ode:常微分方程,表达式为 dy/dx = ... 或直接写右端,需 --initial 指定初值
bounds 支持 pi、e 等数学常数。
transform — 信号处理
bash
calc.py transform --data [--data2