def L(x, n): s = 0 for i in range(1, n+1): s += (1.0/i)*(x/(1.0+x))**i return s def L2(x, n): s = 0 for i in range(1, n+1): s += (1.0/i)*(x/(1.0+x))**i value_of_sum = s first_neglected_term = (1.0/(n+1))*(x/(1.0+x))**(n+1) from math import log exact_error = log(1+x) - value_of_sum return value_of_sum, first_neglected_term, exact_error def table(x): from math import log print('\nx=%g, ln(1+x)=%g' % (x, log(1+x))) for n in [1, 2, 10, 100, 500]: value, next, error = L2(x, n) print('n=%-4d %-10g (next term: %8.2e '\ 'error: %8.2e)' % (n, value, next, error)) table(10) table(100) table(1000) def L3(x, epsilon=1.0E-6): x = float(x) i = 1 term = (1.0/i)*(x/(1+x))**i s = term while abs(term) > epsilon: i += 1 term = (1.0/i)*(x/(1+x))**i s += term return s, i def table2(x): from math import log for k in range(4, 14, 2): epsilon = 10**(-k) approx, n = L3(x, epsilon=epsilon) exact = log(1+x) exact_error = exact - approx print('epsilon: %5.0e, exact error: %8.2e, n=%d' % \ (epsilon, exact_error, n)) print('\n\n') table2(10)