From 2e67da3a7b0f009f0c41c0f350a2a9207d3b5bba Mon Sep 17 00:00:00 2001 From: Julien RICHARD Date: Tue, 1 Oct 2024 19:28:17 +0200 Subject: [PATCH 1/8] chore: improve comments and add tests to trapezoidal rule --- maths/trapezoidal_rule.py | 77 +++++++++++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 12 deletions(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index 9a4ddc8af..7ac0771f1 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -1,17 +1,35 @@ """ Numerical integration or quadrature for a smooth function f with known values at x_i -This method is the classical approach of suming 'Equally Spaced Abscissas' +This method is the classical approach of summing 'Equally Spaced Abscissas' -method 1: -"extended trapezoidal rule" +Method 1: +"Extended Trapezoidal Rule" """ def method_1(boundary, steps): - # "extended trapezoidal rule" - # int(f) = dx/2 * (f1 + 2f2 + ... + fn) + """ + This function implements the extended trapezoidal rule for numerical integration. + The function f(x) is provided below. + + :param boundary: List containing the lower and upper bounds of integration [a, b] + :param steps: The number of steps (intervals) used in the approximation + :return: The numerical approximation of the integral + + >>> abs(method_1([0, 1], 10) - 0.33333) < 0.01 + True + + >>> abs(method_1([0, 1], 100) - 0.33333) < 0.01 + True + + >>> abs(method_1([0, 2], 1000) - 2.66667) < 0.01 + True + + >>> abs(method_1([1, 2], 1000) - 2.33333) < 0.01 + True + """ h = (boundary[1] - boundary[0]) / steps a = boundary[0] b = boundary[1] @@ -19,29 +37,64 @@ def method_1(boundary, steps): y = 0.0 y += (h / 2.0) * f(a) for i in x_i: - # print(i) y += h * f(i) y += (h / 2.0) * f(b) return y def make_points(a, b, h): + """ + Generates the points between a and b with spacing h for trapezoidal integration. + + :param a: The lower bound of integration + :param b: The upper bound of integration + :param h: The step size + :yield: The next x-value in the range (a, b) + + >>> list(make_points(0, 1, 0.1)) + [0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999] + """ x = a + h while x < (b - h): yield x x = x + h -def f(x): # enter your function here - y = (x - 0) * (x - 0) +def f(x): + """ + This is the function to integrate, f(x) = (x - 0)^2 = x^2. + + :param x: The input value + :return: The value of f(x) + + >>> f(0) + 0.0 + + >>> f(1) + 1.0 + + >>> f(0.5) + 0.25 + """ + y = float((x - 0) * (x - 0)) return y def main(): - a = 0.0 # Lower bound of integration - b = 1.0 # Upper bound of integration - steps = 10.0 # define number of steps or resolution - boundary = [a, b] # define boundary of integration + """ + Main function to test the trapezoidal rule. + :a: Lower bound of integration + :b: Upper bound of integration + :steps: define number of steps or resolution + :boundary: define boundary of integration + + >>> main() + y = 0.3349999999999999 + """ + a = 0.0 + b = 1.0 + steps = 10.0 + boundary = [a, b] y = method_1(boundary, steps) print(f"y = {y}") From aa5a8858ea37149651238286b9d7d3122006a61b Mon Sep 17 00:00:00 2001 From: Julien RICHARD Date: Tue, 1 Oct 2024 19:36:58 +0200 Subject: [PATCH 2/8] fix: too much characters in line --- maths/trapezoidal_rule.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index 7ac0771f1..629abb74e 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -52,7 +52,10 @@ def make_points(a, b, h): :yield: The next x-value in the range (a, b) >>> list(make_points(0, 1, 0.1)) - [0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999] + [0.1, 0.2, 0.30000000000000004, \ +0.4, 0.5, 0.6, 0.7, \ +0.7999999999999999, \ +0.8999999999999999] """ x = a + h while x < (b - h): From 79ed4e77f9d5bcdf18f5c8f355da62a2b038f862 Mon Sep 17 00:00:00 2001 From: Julien Richard Date: Sun, 6 Oct 2024 14:21:42 +0200 Subject: [PATCH 3/8] Update maths/trapezoidal_rule.py Co-authored-by: Tianyi Zheng --- maths/trapezoidal_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index 629abb74e..9c62bd4bb 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -9,7 +9,7 @@ Method 1: """ -def method_1(boundary, steps): +def trapezoidal_rule(boundary, steps): """ This function implements the extended trapezoidal rule for numerical integration. The function f(x) is provided below. From bda4d82da1f4207fdfba9c11f020305bde965760 Mon Sep 17 00:00:00 2001 From: Julien Richard Date: Sun, 6 Oct 2024 14:21:58 +0200 Subject: [PATCH 4/8] Update maths/trapezoidal_rule.py Co-authored-by: Tianyi Zheng --- maths/trapezoidal_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index 9c62bd4bb..ebb1ebe40 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -1,7 +1,7 @@ """ Numerical integration or quadrature for a smooth function f with known values at x_i -This method is the classical approach of summing 'Equally Spaced Abscissas' +The trapezoidal rule is the classical approach of summing 'Equally Spaced Abscissas' Method 1: "Extended Trapezoidal Rule" From 9190304498c9ed7e1ec4d2d880411cd5af9ddf01 Mon Sep 17 00:00:00 2001 From: Julien Richard Date: Sun, 6 Oct 2024 14:22:21 +0200 Subject: [PATCH 5/8] Update maths/trapezoidal_rule.py Co-authored-by: Tianyi Zheng --- maths/trapezoidal_rule.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index ebb1ebe40..35306259b 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -3,9 +3,6 @@ Numerical integration or quadrature for a smooth function f with known values at The trapezoidal rule is the classical approach of summing 'Equally Spaced Abscissas' -Method 1: -"Extended Trapezoidal Rule" - """ From 2409e252c8555bf4bcaf261636211447f54c0a2a Mon Sep 17 00:00:00 2001 From: Julien Richard Date: Sun, 6 Oct 2024 14:23:28 +0200 Subject: [PATCH 6/8] Update maths/trapezoidal_rule.py Co-authored-by: Tianyi Zheng --- maths/trapezoidal_rule.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index 35306259b..8e044eede 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -76,8 +76,7 @@ def f(x): >>> f(0.5) 0.25 """ - y = float((x - 0) * (x - 0)) - return y + return x**2 def main(): From 242b208029834ba1ab0d2ee9da9240b153e9f230 Mon Sep 17 00:00:00 2001 From: Julien RICHARD Date: Sun, 6 Oct 2024 14:26:13 +0200 Subject: [PATCH 7/8] fix: change function name in calls --- maths/trapezoidal_rule.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index 8e044eede..7bf11295e 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -15,16 +15,16 @@ def trapezoidal_rule(boundary, steps): :param steps: The number of steps (intervals) used in the approximation :return: The numerical approximation of the integral - >>> abs(method_1([0, 1], 10) - 0.33333) < 0.01 + >>> abs(trapezoidal_rule([0, 1], 10) - 0.33333) < 0.01 True - >>> abs(method_1([0, 1], 100) - 0.33333) < 0.01 + >>> abs(trapezoidal_rule([0, 1], 100) - 0.33333) < 0.01 True - >>> abs(method_1([0, 2], 1000) - 2.66667) < 0.01 + >>> abs(trapezoidal_rule([0, 2], 1000) - 2.66667) < 0.01 True - >>> abs(method_1([1, 2], 1000) - 2.33333) < 0.01 + >>> abs(trapezoidal_rule([1, 2], 1000) - 2.33333) < 0.01 True """ h = (boundary[1] - boundary[0]) / steps @@ -94,7 +94,7 @@ def main(): b = 1.0 steps = 10.0 boundary = [a, b] - y = method_1(boundary, steps) + y = trapezoidal_rule(boundary, steps) print(f"y = {y}") From d8c8acece9b004e134370db17b1f175e492b8753 Mon Sep 17 00:00:00 2001 From: Julien RICHARD Date: Sun, 6 Oct 2024 14:34:48 +0200 Subject: [PATCH 8/8] modify tests, changes numbers to remove coma --- maths/trapezoidal_rule.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py index 7bf11295e..0cee80ab1 100644 --- a/maths/trapezoidal_rule.py +++ b/maths/trapezoidal_rule.py @@ -68,10 +68,10 @@ def f(x): :return: The value of f(x) >>> f(0) - 0.0 + 0 >>> f(1) - 1.0 + 1 >>> f(0.5) 0.25