mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[apps/probability] Test on finite integral computations
This commit is contained in:
committed by
EmilieNumworks
parent
29b4c75227
commit
e828491171
@@ -19,7 +19,13 @@ void assert_cumulative_distributive_function_direct_and_inverse_is(Probability::
|
||||
quiz_assert(!std::isnan(r));
|
||||
quiz_assert(!std::isinf(r));
|
||||
quiz_assert(std::fabs(r-x) < FLT_EPSILON || std::fabs(r-x)/x < FLT_EPSILON);
|
||||
}
|
||||
|
||||
void assert_finite_integral_between_abscissas_is(Probability::Distribution * distribution, double a, double b, double result) {
|
||||
double r = distribution->finiteIntegralBetweenAbscissas(a, b);
|
||||
quiz_assert(!std::isnan(r));
|
||||
quiz_assert(!std::isinf(r));
|
||||
quiz_assert(std::fabs(r-result) < FLT_EPSILON || std::fabs(r-result)/result < FLT_EPSILON);
|
||||
}
|
||||
|
||||
//TODO other distributions
|
||||
@@ -37,6 +43,13 @@ QUIZ_CASE(binomial_distribution) {
|
||||
distribution.setParameterAtIndex(0.1, 1);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 0.0, 0.166771816996665822596668249389040283858776092529296875);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 1.0, 0.4817852491014791294077213024138472974300384521484375);
|
||||
|
||||
// B(21, 0.2)
|
||||
distribution.setParameterAtIndex(21.0, 0);
|
||||
distribution.setParameterAtIndex(0.2, 1);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 4.0, 4.0, 0.21563235015849934848);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 5.0, 4.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 4.0, 5.0, 0.398919847793223794688);
|
||||
}
|
||||
|
||||
QUIZ_CASE(chi_squared_distribution) {
|
||||
@@ -58,6 +71,12 @@ QUIZ_CASE(chi_squared_distribution) {
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 1.3, 0.047059684573231390369851823152202996425330638885498046875);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 2.9874567, 0.250530060451470470983537097708904184401035308837890625);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 4.987, 0.53051693435084168459781039928202517330646514892578125);
|
||||
|
||||
// Chi Squared distribution with 6 degrees of freedom
|
||||
distribution.setParameterAtIndex(6.0, 0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 4.0, 4.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 5.0, 4.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 4.0, 5.0, 0.1328633002997339414718);
|
||||
}
|
||||
|
||||
QUIZ_CASE(student_distribution) {
|
||||
@@ -79,6 +98,12 @@ QUIZ_CASE(student_distribution) {
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, -4.987, 0.00167496657737900025118837898929768925881944596767425537109375);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 1.3, 0.876837383157582639370275501278229057788848876953125);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 2.9874567, 0.98612148076325445433809591122553683817386627197265625);
|
||||
|
||||
// Student distribution with 6 degrees of freedom
|
||||
distribution.setParameterAtIndex(6.0, 0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 4.0, 4.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 5.0, 4.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 4.0, 5.0, 0.002333318101494775250);
|
||||
}
|
||||
|
||||
QUIZ_CASE(geometric_distribution) {
|
||||
@@ -92,6 +117,12 @@ QUIZ_CASE(geometric_distribution) {
|
||||
distribution.setParameterAtIndex(0.2, 0);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 7.0, 0.8322278399999998299563230830244719982147216796875);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 3.0, 0.5904);
|
||||
|
||||
// Geometric distribution with probability of success 0.4
|
||||
distribution.setParameterAtIndex(0.4, 0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 1.0, 1.0, 0.24);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 2.0, 1.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 1.0, 2.0, 0.384);
|
||||
}
|
||||
|
||||
QUIZ_CASE(fisher_distribution) {
|
||||
@@ -115,4 +146,10 @@ QUIZ_CASE(fisher_distribution) {
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 1.4, 0.94560850441205857);
|
||||
assert_cumulative_distributive_function_direct_and_inverse_is(&distribution, 1.425, 0.95425004959692871775);
|
||||
|
||||
// Fisher distribution with d1 = 4 and d2 = 2
|
||||
distribution.setParameterAtIndex(4.0, 0);
|
||||
distribution.setParameterAtIndex(2.0, 1);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 1.0, 1.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 2.0, 1.0, 0.0);
|
||||
assert_finite_integral_between_abscissas_is(&distribution, 1.0, 2.0, 0.19555555555555555);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user