#formulas #symbols #calculations #symbolic-math

rusymbols

rusymbols is a Rust crate for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) while keeping the code as simple as possible in order to be comprehensible and easily extensible. rusymbols is written entirely in Rust.

3 releases

0.1.2 Mar 1, 2021
0.1.1 Feb 28, 2021
0.1.0 Feb 28, 2021

#1369 in Math

Download history 7/week @ 2024-02-18 35/week @ 2024-02-25 10/week @ 2024-03-03 7/week @ 2024-03-10

59 downloads per month
Used in 3 crates (via marigold-grammar)

MIT/Apache

21KB
268 lines

rusymbols

Note:

The resulting crate architecture does not correspond to the main ideas, therefore it will be reviewed and reassembled. Please wait for a more stable version

About

rusymbols is a Rust crate for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) while keeping the code as simple as possible in order to be comprehensible and easily extensible. rusymbols is written entirely in Rust.

(maybe some engineers want to learn Rust :))

The crate is designed to support the Rust language and add the ability to work with complex formulas at the speed of Rust, possibly slower than programmed without a high level of abstraction. Do not think about their solution, especially since there are formulas that change depending on the circumstances.The goal of the project is at least to become similar to SymPy.

Key ideas:

 - Simple.
 - Fast (maybe not at maximum speed, but still fast)
 - Safe
 - Universal (compatibility with nalgebra and standard types (possibly) and other similar crates)

How to use

 Just use it! The main idea is simplicity. Enjoy!

Example

use rusymbols::Expression;
use std::collections::HashMap;

let x = Expression::new_var("x");
let two = Expression::new_val(2.0);
let polynomial = x.clone().pow(two.clone()) - x + two;

let mut args: HashMap<&str, f64> = HashMap::new();
args.insert("x", 1.0);

assert_eq!(polynomial.to_string(), "x**2 - x + 2");
assert_eq!(polynomial.eval_args(&args).unwrap(), 2.0);

No runtime deps