#On the name of ALLAH and may the blessing and peace of Allah
#be upon the Messenger of Allah Mohamed Salla Allahu Aliahi Wassalam.
#Author : Fouad Teniou
#Date : 10/07/10
#version :2.6
"""
maclaurin_ln is a function to compute ln(x) using maclaurin series
and the interval of convergence is -1 < x < +1
ln(y) = ln(1+x/1-x)= 2(x + x^3/3 + x^5/5 + x^7/7 ...........)
"""
def maclaurin_ln(value, k):
"""
Compute maclaurin's series approximation for ln(value).
"""
global first_value
first_value = 0.0
#attempt to Approximate sinh(x) for a given value
try:
value_x = (value - 1)/float(value + 1)
for item in xrange(1,k,2):
next_value = value_x **item/item
first_value += next_value
return 2*(first_value)
#Raise TypeError if input is not a number
except TypeError:
print 'Please enter an integer or a float value'
if __name__ == "__main__":
maclaurin_ln_1 = maclaurin_ln(2,100)
print maclaurin_ln_1
maclaurin_ln_2 = maclaurin_ln(5,100)
print maclaurin_ln_2
maclaurin_ln_3 = maclaurin_ln(777,10000)
print maclaurin_ln_3
print
for arg in xrange(7,28,10):
print "ln(%s) = %s " %\
(arg, maclaurin_ln(arg,10000))
###########################################################################
"C: python \Maclaurin_ln
0.69314718056
1.60943791243
6.65544035037
ln(7) = 1.94591014906
ln(17) = 2.83321334406
ln(27) = 3.295836866
######################################################################################
>>>On the name of ALLAH and may the blessing and peace of Allah
>>>be upon the Messenger of Allah Mohamed Salla Allahu Aliahi Wassalam.
>>>Author : Fouad Teniou
from decimal import Decimal as D,Context, localcontext
def maclaurin_ln(value, k):
"""
Compute maclaurin's series approximation for ln(value).
"""
first_value = 0
#attempt to Approximate sinh(x) for a given value
try:
value_x = (value - D("1.0"))/(value + D("1.0"))
for item in xrange(1,k,2):
next_value = value_x**item/item
first_value += next_value
return 2*(first_value)
#Raise TypeError if input is not a number
except TypeError:
print 'Please enter an integer or a float value'
if __name__ == "__main__":
with localcontext(Context(prec=67)):
for arg in xrange(7,28,10):
print "ln(%s) = %s " %\
(arg, maclaurin_ln(arg,D("10000")))
#######################################################################
FT "C:\Maclaurin_lndecimal1.py"
ln(7) = 1.945910149055313305105352743443179729637084729581861188459390149937
ln(17) = 2.833213344056216080249534617873126535588203012585744787297237737878
ln(27) = 3.295836866004329074185735710767577113942471673468248355204083000896
Diff to Previous Revision
--- revision 2 2010-07-15 10:46:28
+++ revision 3 2010-07-15 10:48:40
@@ -54,3 +54,41 @@
ln(7) = 1.94591014906
ln(17) = 2.83321334406
ln(27) = 3.295836866
+######################################################################################
+>>>On the name of ALLAH and may the blessing and peace of Allah
+>>>be upon the Messenger of Allah Mohamed Salla Allahu Aliahi Wassalam.
+>>>Author : Fouad Teniou
+
+from decimal import Decimal as D,Context, localcontext
+def maclaurin_ln(value, k):
+ """
+ Compute maclaurin's series approximation for ln(value).
+ """
+
+ first_value = 0
+
+ #attempt to Approximate sinh(x) for a given value
+ try:
+ value_x = (value - D("1.0"))/(value + D("1.0"))
+ for item in xrange(1,k,2):
+ next_value = value_x**item/item
+ first_value += next_value
+
+ return 2*(first_value)
+
+ #Raise TypeError if input is not a number
+ except TypeError:
+ print 'Please enter an integer or a float value'
+
+if __name__ == "__main__":
+ with localcontext(Context(prec=67)):
+ for arg in xrange(7,28,10):
+ print "ln(%s) = %s " %\
+ (arg, maclaurin_ln(arg,D("10000")))
+
+#######################################################################
+
+FT "C:\Maclaurin_lndecimal1.py"
+ln(7) = 1.945910149055313305105352743443179729637084729581861188459390149937
+ln(17) = 2.833213344056216080249534617873126535588203012585744787297237737878
+ln(27) = 3.295836866004329074185735710767577113942471673468248355204083000896