From dd37aa3eae1e2a9e7bb6cbb04ceae6654fc68adf Mon Sep 17 00:00:00 2001 From: Chris O <46587501+ChrisO345@users.noreply.github.com> Date: Sat, 22 Oct 2022 23:17:47 +1300 Subject: [PATCH 1/3] renamed maclaurin_sin.py to maclaurin_series.py and included function for cos approximation --- .../{maclaurin_sin.py => maclaurin_series.py} | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) rename maths/{maclaurin_sin.py => maclaurin_series.py} (50%) diff --git a/maths/maclaurin_sin.py b/maths/maclaurin_series.py similarity index 50% rename from maths/maclaurin_sin.py rename to maths/maclaurin_series.py index 3c27ccf63d70..c4530d3b0e7f 100644 --- a/maths/maclaurin_sin.py +++ b/maths/maclaurin_series.py @@ -57,8 +57,65 @@ def maclaurin_sin(theta: float, accuracy: int = 30) -> float: ) +def maclaurin_cos(theta: float, accuracy: int = 30) -> float: + """ + Finds the maclaurin approximation of cos + + :param theta: the angle to which cos is found + :param accuracy: the degree of accuracy wanted minimum ~ 1.5 theta + :return: the value of cose in radians + + + >>> from math import isclose, cos + >>> all(isclose(maclaurin_cos(x, 50), cos(x)) for x in range(-25, 25)) + True + >>> maclaurin_cos(5) + 0.28366218546322675 + >>> maclaurin_cos(-5) + 0.2836621854632266 + >>> maclaurin_cos(10, 15) + -0.8390715290764525 + >>> maclaurin_cos(-10, 15) + -0.8390715290764521 + >>> maclaurin_cos("10") + Traceback (most recent call last): + ... + ValueError: maclaurin_cos() requires either an int or float for theta + >>> maclaurin_cos(10, -30) + Traceback (most recent call last): + ... + ValueError: maclaurin_cos() requires a positive int for accuracy + >>> maclaurin_cos(10, 30.5) + Traceback (most recent call last): + ... + ValueError: maclaurin_cos() requires a positive int for accuracy + >>> maclaurin_cos(10, "30") + Traceback (most recent call last): + ... + ValueError: maclaurin_cos() requires a positive int for accuracy + """ + + if not isinstance(theta, (int, float)): + raise ValueError("maclaurin_cos() requires either an int or float for theta") + + if not isinstance(accuracy, int) or accuracy <= 0: + raise ValueError("maclaurin_cos() requires a positive int for accuracy") + + theta = float(theta) + div = theta // (2 * pi) + theta -= 2 * div * pi + return sum( + (((-1) ** r) * ((theta ** (2 * r)) / factorial(2 * r))) + for r in range(accuracy) + ) + + if __name__ == "__main__": print(maclaurin_sin(10)) print(maclaurin_sin(-10)) print(maclaurin_sin(10, 15)) print(maclaurin_sin(-10, 15)) + print(maclaurin_cos(5)) + print(maclaurin_cos(-5)) + print(maclaurin_cos(10, 15)) + print(maclaurin_cos(-10, 15)) From eb473a5bf747225db1121c712fb4fe8285ff1e33 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 22 Oct 2022 10:21:33 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/maclaurin_series.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/maths/maclaurin_series.py b/maths/maclaurin_series.py index c4530d3b0e7f..63c4df239419 100644 --- a/maths/maclaurin_series.py +++ b/maths/maclaurin_series.py @@ -105,8 +105,7 @@ def maclaurin_cos(theta: float, accuracy: int = 30) -> float: div = theta // (2 * pi) theta -= 2 * div * pi return sum( - (((-1) ** r) * ((theta ** (2 * r)) / factorial(2 * r))) - for r in range(accuracy) + (((-1) ** r) * ((theta ** (2 * r)) / factorial(2 * r))) for r in range(accuracy) ) From af61e574d34558e012b4c4088faf9696f437d0a2 Mon Sep 17 00:00:00 2001 From: Chris O <46587501+ChrisO345@users.noreply.github.com> Date: Sat, 22 Oct 2022 23:42:45 +1300 Subject: [PATCH 3/3] attempt to fix pytest error --- maths/maclaurin_series.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/maths/maclaurin_series.py b/maths/maclaurin_series.py index 63c4df239419..57edc90bf676 100644 --- a/maths/maclaurin_series.py +++ b/maths/maclaurin_series.py @@ -9,7 +9,7 @@ def maclaurin_sin(theta: float, accuracy: int = 30) -> float: Finds the maclaurin approximation of sin :param theta: the angle to which sin is found - :param accuracy: the degree of accuracy wanted minimum ~ 1.5 theta + :param accuracy: the degree of accuracy wanted minimum :return: the value of sine in radians @@ -62,8 +62,8 @@ def maclaurin_cos(theta: float, accuracy: int = 30) -> float: Finds the maclaurin approximation of cos :param theta: the angle to which cos is found - :param accuracy: the degree of accuracy wanted minimum ~ 1.5 theta - :return: the value of cose in radians + :param accuracy: the degree of accuracy wanted + :return: the value of cosine in radians >>> from math import isclose, cos @@ -114,6 +114,7 @@ def maclaurin_cos(theta: float, accuracy: int = 30) -> float: print(maclaurin_sin(-10)) print(maclaurin_sin(10, 15)) print(maclaurin_sin(-10, 15)) + print(maclaurin_cos(5)) print(maclaurin_cos(-5)) print(maclaurin_cos(10, 15))