Crates.io | symbolic_math |
lib.rs | symbolic_math |
version | 0.1.2 |
source | src |
created_at | 2023-08-01 20:21:57.586466 |
updated_at | 2024-03-19 18:43:38.389749 |
description | A Rust library for performing symbolic mathematics. Supports basic arithmetic operations, expression simplification, and expansion, and evaluation. |
homepage | |
repository | https://github.com/nathan-barry/symbolic_math |
max_upload_size | |
id | 932184 |
size | 31,005 |
symbolic_math
is a Rust library that facilitates representation and manipulation of mathematical expressions. The library offers structures to model various mathematical operations, including addition, subtraction, multiplication, division, and exponentiation. These expressions can contain constants, symbols, or other complex expressions. Furthermore, it provides tools to evaluate and simplify these expressions.
Expr
: An enum representing different types of mathematical expressions.Symbol
: A struct representing a symbolic variable.This library also provides several implementations for Expr
, including:
Expr
.Display
implementation to convert an Expr
instance to a string.simplify
method to simplify an Expr
instance.expand
method for basic expansion of an Expr
instance.eval
method to evaluate an Expr
instance.The operators
module includes operator overloads for Expr
, enabling the combination of Expr
instances using standard mathematical operators.
To include symbolic_math
in your project, add the following to your Cargo.toml
:
[dependencies]
symbolic_math = "0.1.1"
You can then use it in your code as follows:
use symbolic_math::expr::Expr;
use symbolic_math::symbol::Symbol;
use std::collections::HashMap;
let x = Expr::new_var("x");
let y = Expr::new_var("y");
let z = Expr::new_var("z");
let res = (x.clone() + x.clone() + y.clone() * y.clone()).pow(z);
println!("{}", res); // prints: "(2x + y^2)^z"
println!("{}", res.simplify()); // prints: "(2x + y^2)^z"
let mut vars: HashMap<Symbol, f64> = HashMap::new();
vars.insert(Symbol::new("x"), 4.0);
vars.insert(Symbol::new("y"), 3.0);
vars.insert(Symbol::new("z"), 2.0);
println!("{}", res.eval(&vars).unwrap()); // prints: "289"
For more detailed information on how to use symbolic_math
, refer to the documentation for each individual type and method.