Function Evaluation
MathHook provides a unified, intelligent function evaluation system that handles both symbolic and numerical computation. The system uses the Universal Function Registry architecture to dispatch function calls to specialized implementations while maintaining mathematical correctness.
Code Examples
Elementary Functions
Evaluating basic trigonometric and exponential functions
use mathhook::prelude::*;
let x = symbol!(x);
let sin_x = expr!(sin(x));
let cos_x = expr!(cos(x));
let exp_x = expr!(exp(x));
let log_x = expr!(log(x));
Special Value Evaluation
Automatic simplification of known exact values
use mathhook::prelude::*;
// Trigonometric special values
let sin_0 = expr!(sin(0));
assert_eq!(sin_0.simplify(), expr!(0));
let cos_0 = expr!(cos(0));
assert_eq!(cos_0.simplify(), expr!(1));
// Exponential and logarithmic
let exp_0 = expr!(exp(0));
assert_eq!(exp_0.simplify(), expr!(1));
let log_1 = expr!(log(1));
assert_eq!(log_1.simplify(), expr!(0));
Composite Expression Evaluation
Mixed symbolic and numeric evaluation
use mathhook::prelude::*;
let x = symbol!(x);
let y = symbol!(y);
// sqrt(4) evaluates to 2, symbolic parts preserved
let composite = expr!((sin((x^2) + 1) * cos(y)) - sqrt(4));
let result = composite.simplify();
// Result: sin(x^2 + 1) * cos(y) - 2
Function Composition
Nested and composed functions
use mathhook::prelude::*;
let x = symbol!(x);
// sin(cos(x))
let nested = expr!(sin(cos(x)));
// exp(log(x)) simplifies to x
let exp_log = expr!(exp(log(x)));
let simplified = exp_log.simplify();
// Result: x (identity simplification)
Bulk Evaluation
Efficient numerical evaluation over multiple points
use mathhook::functions::FunctionEvaluator;
let evaluator = FunctionEvaluator::new();
let points = vec![0.0, 0.5, 1.0, 1.5, 2.0];
// SIMD-optimized evaluation
if let Some(results) = evaluator.evaluate_bulk_f64("sin", &points) {
println!("Results: {:?}", results);
}