From 1f03223571af91424381195b5ea8618d2815b3c6 Mon Sep 17 00:00:00 2001 From: Arijit Kumar Das Date: Thu, 24 Oct 2024 01:00:15 +0530 Subject: [PATCH] Create logarithmic_series.py This is an implementation of logarithmic series in Python. Reference: https://math.stackexchange.com/questions/3973429/what-is-a-logarithmic-series --- maths/series/logarithmic_series.py | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 maths/series/logarithmic_series.py diff --git a/maths/series/logarithmic_series.py b/maths/series/logarithmic_series.py new file mode 100644 index 000000000..5e0a5c47e --- /dev/null +++ b/maths/series/logarithmic_series.py @@ -0,0 +1,48 @@ +""" +This is an implementation of logarithmic series in Python. +Reference: https://math.stackexchange.com/questions/3973429/what-is-a-logarithmic-series +""" + +def logarithmic_series(x: float, n_terms: int = 5, expand: bool = False) -> list: + """ + Returns the logarithmic series for a number x (log x) upto n terms. + + Parameters: + x: a floating point number for log(x) + n_terms: number of terms to be computed + expand: Set this flag to get the terms as real numbers, unset for unsolved expressions + + Examples: + >>> logarithmic_series(3) + ['(2^1)/1', '-(2^2)/2', '(2^3)/3', '-(2^4)/4', '(2^5)/5'] + + >>> logarithmic_series(-3) + ['-(4^1)/1', '(4^2)/2', '-(4^3)/3', '(4^4)/4', '-(4^5)/5'] + + >>> logarithmic_series(3, 10) + ['(2^1)/1', '-(2^2)/2', '(2^3)/3', '-(2^4)/4', '(2^5)/5', '-(2^6)/6', '(2^7)/7', '-(2^8)/8', '(2^9)/9', '-(2^10)/10'] + + >>> logarithmic_series(3, expand=True) + [2.0, -2.0, 2.6666666666666665, -4.0, 6.4] + """ + n_times_x_minus_1: float = x-1 + n: int = 1 + series: list = [] + for _ in range(n_terms): + if (expand): + series.append(((-1)**(n+1))*(n_times_x_minus_1/n)) + n_times_x_minus_1 *= (x-1) + else: + sign: str = '-' if (-1)**(n+1) == -1 else '' + term: str = sign+'('+str(x-1)+'^'+str(n)+')'+'/'+str(n) + if (term.startswith("-(-")): + term = '('+term[3::] + elif (term.startswith("(-")): + term = "-("+term[2::] + series.append(term) + n += 1 + return series + +if (__name__ == "__main__"): + import doctest + doctest.testmod()