#math-parser #matrix-vector #parser #eval #math-expressions #math-lib #mathparsing

math_utils_lib

一个提供解析器/评估器和 LaTeX 导出的库,用于将解析的表达式和已解决的方程的历史导出到 LaTeX

13 个版本

0.3.2 2024 年 5 月 23 日
0.3.1 2024 年 5 月 17 日
0.2.0 2024 年 4 月 14 日
0.1.9 2024 年 3 月 30 日

#622 in 解析器实现

Download history • Rust 包仓库 145/week @ 2024-04-13 • Rust 包仓库 2/week @ 2024-04-20 • Rust 包仓库 176/week @ 2024-05-11 • Rust 包仓库 254/week @ 2024-05-18 • Rust 包仓库 15/week @ 2024-05-25 • Rust 包仓库 2/week @ 2024-06-08 • Rust 包仓库 3/week @ 2024-06-15 • Rust 包仓库 2/week @ 2024-06-22 • Rust 包仓库 33/week @ 2024-06-29 • Rust 包仓库 38/week @ 2024-07-27 • Rust 包仓库

69 个月下载量
用于 math_repl

自定义许可证

110KB
2.5K SLoC

crates.io docs.rs

此仓库/包提供了一些数学实用工具

  • 解析和评估包含矩阵(列主序)和向量的表达式
  • 解决方程和方程组
  • 从解析的表达式或解决的方程集合中导出 LaTeX 文档

精度

使用功能 high-prec 以 13 位的精度,标准精度为 8。精度用于解决方程。打印的实际输出精度为定义的精度减去 2。

⚠️ 此仓库/包尚未达到 1.0.0,可能会发生破坏性更改!

示例

评估

let res = quick_eval("3*3".to_string(), vec![])?;

assert_eq!(res, Value::Scalar(9.));
let x = Variable::new("x".to_string(), Value::Scalar(3.));
let res = quick_eval("3x".to_string(), vec![x])?;

assert_eq!(res, Value::Scalar(9.));
let a = Variable::new("A".to_string(), Value::Vector(vec![3., 5., 8.]));
let res = quick_eval("3A".to_string(), vec![a])?;

assert_eq!(res, Value::Vector(vec![9., 15., 24.]));
let a = Variable::new("A".to_string(), Value::Vector(vec![3., 5., 8.]));
let b = Variable::new("B".to_string(), Value::Matrix(vec![vec![2., 0., 0.], vec![0., 2., 0.],
vec![0., 0., 1.]]));
let res = quick_eval("B*A".to_string(), vec![a, b])?;

assert_eq!(res, Value::Vector(vec![6., 10., 8.]));

方程

let equation = "x^2=9".to_string();

let res = quick_solve(equation, "x".to_string(), vec![])?;
let res_rounded = res.iter().map(|x| x.round(3)).collect::<Vec<Value>>();

assert_eq!(res_rounded, vec![Value::Scalar(3.), Value::Scalar(-3.)]);
let equation = "400-100g=600-100k, -600-100g=-400-100k, 1000-100g=100k".to_string();

let res = quick_solve(equation, vec![])?;
let res_rounded = res.iter().map(|x| x.round(3)).collect::<Vec<Value>>();

assert_eq!(res_rounded, vec![Value::Vector(vec![4., 6.])]);

LaTeX

let expression = "((25x^3-96x^2+512x+384)/(x^4+2x^3+90x^2-128x+1664)^(1.5))/(-sqrt(1-((32-x+x^2)/(((x-1)^2+25)(x^2+64)))^2))".to_string();
let parsed = parse(expression)?;
let vars = vec![Variable::new("x".to_string(), Value::Scalar(-0.655639))];
let result = eval(&parsed, &vars)?;
let var_assign = StepType::Calc((Binary::Value(Value::Scalar(-0.655639)), Value::Scalar(-0.655639), Some("x".to_string())));
let step = StepType::Calc((parsed, result, None));
export(vec![var_assign, step], "export".to_string(), ExportType::Png);

输出(export-1.png)

For proper render visit github

依赖项

~1.5MB
~39K SLoC