simsam 0.1.0

Sample from custom discrete and continuous distributions (SciPy-like API)
Documentation
//! Sample from an arbitrary PDF on a bounded interval.
//!
//! This example uses an unnormalized PDF on [0, 1]:
//!   g(x) = exp(-10 * x)
//! simsam will normalize it numerically and sample via inverse transform.

use simsam::{from_pdf_fn, Interval};

fn main() {
    let support = Interval::new(0.0, 1.0).expect("valid interval");
    let dist = from_pdf_fn(|x| (-10.0 * x).exp(), support).expect("build dist");

    let n = 20_000;
    let mut sum = 0.0;
    for _ in 0..n {
        sum += dist.sample().expect("sample");
    }
    let mean = sum / n as f64;

    println!("arbitrary PDF example: g(x)=exp(-10x) on [0,1] (unnormalized)");
    println!("mean ≈ {mean:.6}");
    println!("interval(0.9) = {:?}", dist.interval(0.9).unwrap());
}