sequential_integration/
calculation_functions.rs

1use fehler::throws;
2
3use crate::{engine, errors::Error};
4
5#[throws]
6pub fn calculate_single_integral_simpson<E: Fn(f64) -> f64>(
7    equation: E,
8    first_integral_begin: f64,
9    first_integral_end: f64,
10    first_integral_step: f64,
11) -> f64 {
12    let simpson_quadrature = engine::quadrature::simpson::SimpsonQuadratureSingleIntegral::new(
13        equation,
14        first_integral_step,
15    )?;
16
17    engine::calculate_single_integral(simpson_quadrature, first_integral_begin, first_integral_end)?
18}
19
20#[throws]
21pub fn calculate_double_integral_simpson<
22    E: Fn(f64, f64) -> f64,
23    F1: Fn(f64) -> f64,
24    F2: Fn(f64) -> f64,
25>(
26    equation: E,
27    first_integral_begin: f64,
28    first_integral_end: f64,
29    first_integral_step: f64,
30    second_integral_begin: F1,
31    second_integral_end: F2,
32    second_integral_step: f64,
33) -> f64 {
34    let simpson_quadrature = engine::quadrature::simpson::SimpsonQuadratureDoubleIntegral::new(
35        equation,
36        first_integral_step,
37        second_integral_step,
38    )?;
39
40    engine::calculate_double_integral(
41        simpson_quadrature,
42        first_integral_begin,
43        first_integral_end,
44        second_integral_begin,
45        second_integral_end,
46    )?
47}
48
49#[throws]
50pub fn calculate_triple_integral_simpson<
51    E: Fn(f64, f64, f64) -> f64,
52    F1: Fn(f64) -> f64,
53    F2: Fn(f64) -> f64,
54    F3: Fn(f64, f64) -> f64,
55    F4: Fn(f64, f64) -> f64,
56>(
57    equation: E,
58    first_integral_begin: f64,
59    first_integral_end: f64,
60    first_integral_step: f64,
61    second_integral_begin: F1,
62    second_integral_end: F2,
63    second_integral_step: f64,
64    third_integral_begin: F3,
65    third_integral_end: F4,
66    third_integral_step: f64,
67) -> f64 {
68    let simpson_quadrature = engine::quadrature::simpson::SimpsonQuadratureTripleIntegral::new(
69        equation,
70        first_integral_step,
71        second_integral_step,
72        third_integral_step,
73    )?;
74
75    engine::calculate_triple_integral(
76        simpson_quadrature,
77        first_integral_begin,
78        first_integral_end,
79        second_integral_begin,
80        second_integral_end,
81        third_integral_begin,
82        third_integral_end,
83    )?
84}