simsym 0.1.0

A simple symbolic computation library.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use crate::calculus::diff::diff;
use crate::expr::Expr;
use crate::symbol::Symbol;

pub fn gradient(expr: Expr, vars: &[Symbol]) -> Vec<Expr> {
    vars.iter()
        .map(|&v| diff(expr.clone(), v))
        .collect()
}

pub fn hessian(expr: Expr, vars: &[Symbol]) -> Vec<Vec<Expr>> {
    let grad = gradient(expr, vars);
    grad.into_iter()
        .map(|g| vars.iter().map(|&v| diff(g.clone(), v)).collect())
        .collect()
}