#计算器 #评估器 #数学 #数学解析器

kalk

支持用户定义函数、变量和单位,并能处理相当模糊语法的数学评估库

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 解析器实现

Download history 30/week @ 2024-04-22 7/week @ 2024-04-29 1/week @ 2024-05-06 20/week @ 2024-05-13 18/week @ 2024-05-20 8/week @ 2024-05-27 26/week @ 2024-06-03 13/week @ 2024-06-10 9/week @ 2024-06-17 19/week @ 2024-06-24 7/week @ 2024-07-08 118/week @ 2024-07-15 51/week @ 2024-07-22 72/week @ 2024-07-29 113/week @ 2024-08-05

每月355次下载
2 crates 中使用

MITLGPL-3.0+

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) = xyx = 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 } 在输入最后的 } 之前按下回车键将创建新行而不会提交
  • 不同的数字基:可以是类似 0b11010o5.30xff 的格式,或者类似 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 代替,使其更具可移植性。

编译

请确保您已安装 diffutilsgccmakem4

JavaScript 使用

const kalk = await import("@paddim8/kalk");
const context = new kalk.Context();
console.log(context.evaluate("2pi + 3").toScientificNotation().toString());

依赖项

~4MB
~74K SLoC