bayesian_quadrature/
bayesian_quadrature.rs1use uncertain_numerics::{BayesianQuadrature, GaussianMeasure, RbfKernel};
6
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8 let kernel = RbfKernel::new(1.0, 1.0)?; let measure = GaussianMeasure::new(0.0, 1.0)?;
12 let quadrature = BayesianQuadrature::new(kernel, measure, 1.0e-10);
14
15 let nodes = [-3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0];
17 let values: Vec<f64> = nodes.iter().copied().map(f64::cos).collect();
18 let exact = (-0.5_f64).exp();
19
20 let posterior = quadrature.posterior(&nodes, &values)?;
21 let standardized_error = (posterior.mean() - exact).abs() / posterior.standard_deviation();
22
23 println!("E[I | y] = {:.6}", posterior.mean());
24 println!(
25 "sd[I | y] = {:.3e}",
26 posterior.standard_deviation()
27 );
28 println!("exact integral = {exact:.6}");
29 println!("standardized error = {standardized_error:.3}");
30
31 assert!((posterior.mean() - exact).abs() < 3.0 * posterior.standard_deviation());
34 Ok(())
35}