Added doctests for monte_carlo.py

This commit is contained in:
Pablito 2024-12-07 16:11:56 +01:00
parent 27c1840095
commit 9b229ed229

View File

@ -18,6 +18,10 @@ def pi_estimator(iterations: int):
4. After all the dots are placed, divide the dots in the circle by the total. 4. After all the dots are placed, divide the dots in the circle by the total.
5. Multiply this value by 4 to get your estimate of pi. 5. Multiply this value by 4 to get your estimate of pi.
6. Print the estimated and numpy value of pi 6. Print the estimated and numpy value of pi
>>> pi_estimator(1000)
The estimated value of pi is 3.145
The numpy value of pi is 3.141592653589793
The total error is 0.003
""" """
# A local function to see if a dot lands in the circle. # A local function to see if a dot lands in the circle.
@ -61,8 +65,11 @@ def area_under_curve_estimator(
c. Expected value = average of the function evaluations c. Expected value = average of the function evaluations
4. Estimated value of integral = Expected value * (max_value - min_value) 4. Estimated value of integral = Expected value * (max_value - min_value)
5. Returns estimated value 5. Returns estimated value
>>> def test_function(x):
>>> return x * x
>>> area_under_curve_estimator(1000, test_function)
0.334 (estimated value should be close to 1/3)
""" """
return mean( return mean(
function_to_integrate(uniform(min_value, max_value)) for _ in range(iterations) function_to_integrate(uniform(min_value, max_value)) for _ in range(iterations)
) * (max_value - min_value) ) * (max_value - min_value)
@ -77,12 +84,19 @@ def area_under_line_estimator_check(
1. Calls "area_under_curve_estimator" function 1. Calls "area_under_curve_estimator" function
2. Compares with the expected value 2. Compares with the expected value
3. Prints estimated, expected and error value 3. Prints estimated, expected and error value
>>> area_under_line_estimator_check(1000)
******************
Estimating area under y=x where x varies from 0.0 to 1.0
Estimated value is 0.332
Expected value is 0.5
Total error is 0.168
******************
""" """
def identity_function(x: float) -> float: def identity_function(x: float) -> float:
""" """
Represents identity function Represents identity function
>>> [function_to_integrate(x) for x in [-2.0, -1.0, 0.0, 1.0, 2.0]] >>> [identity_function(x) for x in [-2.0, -1.0, 0.0, 1.0, 2.0]]
[-2.0, -1.0, 0.0, 1.0, 2.0] [-2.0, -1.0, 0.0, 1.0, 2.0]
""" """
return x return x
@ -103,6 +117,13 @@ def area_under_line_estimator_check(
def pi_estimator_using_area_under_curve(iterations: int) -> None: def pi_estimator_using_area_under_curve(iterations: int) -> None:
""" """
Area under curve y = sqrt(4 - x^2) where x lies in 0 to 2 is equal to pi Area under curve y = sqrt(4 - x^2) where x lies in 0 to 2 is equal to pi
>>> pi_estimator_using_area_under_curve(1000)
******************
Estimating pi using area_under_curve_estimator
Estimated value is 3.141
Expected value is 3.141592653589793
Total error is 0.0004
******************
""" """
def function_to_integrate(x: float) -> float: def function_to_integrate(x: float) -> float: