43个版本 (27个稳定版)
| 3.2.0 | 2024年4月3日 |
|---|---|
| 3.1.0 | 2024年3月23日 |
| 3.0.4 | 2023年7月20日 |
| 3.0.3 | 2023年1月24日 |
| 0.2.0 | 2020年6月18日 |
#166 in 解析器实现
每月355次下载
在 2 crates 中使用
320KB
8K SLoC
kalk
Kalk是一个支持用户定义变量和函数的数学解析库。它可以解析以下示例
f(x, y) = sum(1, 3, (2sin4/x!)^y) + cos(n deg)
a = 3
f(a, 2)
>> 1.1899401098014355
功能
- 运算符:
+、-、*、/、! - 分组:
()、[]、⌈ceil⌉、⌊floor⌋ - 向量:(x, y, z, ...)
- 矩阵:[x, y, z; a, b, c; ...]
- 预定义函数和常数
- 用户定义函数和变量。
f(x, y) = xy,x = 5 - 使用牛顿法求解根(例如 x^2 = 64)。注意:估计并限于一个根
- 函数的导数(噪声函数或高阶导数可能有些不准确)。
f'(2),sin'(-pi) - 积分。
∫(0, pi, sin(x) dx)或∫(0, π, sin(x) dx),有时可能会有些误差 - 能够理解相当模糊的语法。例如:
2sin50 + 2xy - 求和函数:
sum(start, to, expression)例如:sum(1, 3, 2n+1)等于2*1+1 + 2*2+1 + 2*3+1=15 - 分段函数:
f(x) = { f(x + 1) if x <= 1; x otherwise }在输入最后的}之前按下回车键将创建新行而不会提交 - 不同的数字基:可以是类似
0b1101、0o5.3、0xff的格式,或者类似1101_2的格式。后者不支持字母,因为它们将被解释为变量 - 其他:用分号分隔表达式以在同一行上写入它们,使用
ans变量获取先前计算表达式的值
Rust 使用
use kalk::parser;
let mut parser_context = parser::Context::new();
let precision = 53;
let result = parser::eval(&mut parser_context, "5*3", precision).unwrap().unwrap();
assert_eq!(result.to_f64(), 15f64);
使用 f64 而不是 rug::Float
cargo 特性 rug 启用 rug,并默认使用。如果您禁用此特性,kalk 将使用 f64 代替,使其更具可移植性。
编译
请确保您已安装 diffutils、gcc、make 和 m4。
JavaScript 使用
const kalk = await import("@paddim8/kalk");
const context = new kalk.Context();
console.log(context.evaluate("2pi + 3").toScientificNotation().toString());
依赖项
~4MB
~74K SLoC