From dccbba9d1b244117aefa80f607fce23f28e60fe6 Mon Sep 17 00:00:00 2001 From: Palash Tyagi <23239946+Magnus167@users.noreply.github.com> Date: Sat, 26 Jul 2025 23:05:25 +0100 Subject: [PATCH] Add examples for distribution helpers --- examples/distributions.rs | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 examples/distributions.rs diff --git a/examples/distributions.rs b/examples/distributions.rs new file mode 100644 index 0000000..d1b5f08 --- /dev/null +++ b/examples/distributions.rs @@ -0,0 +1,66 @@ +use rustframe::compute::stats::{binomial_cdf, binomial_pmf, normal_cdf, normal_pdf, poisson_pmf}; +use rustframe::matrix::Matrix; + +/// Demonstrates some probability distribution helpers. +fn main() { + normal_example(); + println!("\n-----\n"); + binomial_example(); + println!("\n-----\n"); + poisson_example(); +} + +fn normal_example() { + println!("Normal distribution\n-------------------"); + let x = Matrix::from_vec(vec![0.0, 1.0], 1, 2); + let pdf = normal_pdf(x.clone(), 0.0, 1.0); + let cdf = normal_cdf(x, 0.0, 1.0); + println!("pdf : {:?}", pdf.data()); + println!("cdf : {:?}", cdf.data()); +} + +fn binomial_example() { + println!("Binomial distribution\n---------------------"); + let k = Matrix::from_vec(vec![0_u64, 1, 2], 1, 3); + let pmf = binomial_pmf(4, k.clone(), 0.5); + let cdf = binomial_cdf(4, k, 0.5); + println!("pmf : {:?}", pmf.data()); + println!("cdf : {:?}", cdf.data()); +} + +fn poisson_example() { + println!("Poisson distribution\n--------------------"); + let k = Matrix::from_vec(vec![0_u64, 1, 2], 1, 3); + let pmf = poisson_pmf(3.0, k); + println!("pmf : {:?}", pmf.data()); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_normal_example() { + let x = Matrix::from_vec(vec![0.0, 1.0], 1, 2); + let pdf = normal_pdf(x.clone(), 0.0, 1.0); + let cdf = normal_cdf(x, 0.0, 1.0); + assert!((pdf.get(0, 0) - 0.39894228).abs() < 1e-6); + assert!((cdf.get(0, 1) - 0.8413447).abs() < 1e-6); + } + + #[test] + fn test_binomial_example() { + let k = Matrix::from_vec(vec![0_u64, 1, 2], 1, 3); + let pmf = binomial_pmf(4, k.clone(), 0.5); + let cdf = binomial_cdf(4, k, 0.5); + assert!((pmf.get(0, 2) - 0.375).abs() < 1e-6); + assert!((cdf.get(0, 2) - 0.6875).abs() < 1e-6); + } + + #[test] + fn test_poisson_example() { + let k = Matrix::from_vec(vec![0_u64, 1, 2], 1, 3); + let pmf = poisson_pmf(3.0, k); + assert!((pmf.get(0, 1) - 3.0_f64 * (-3.0_f64).exp()).abs() < 1e-6); + } +}