Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculating the sum of a series?

This is my assignment and for the life of me i cant seem to think of a way to do it. This is the code I have so far:

sum = 0
k = 1
while k <= 0.0001:
     if k % 2 == 1:
       sum = sum + 1.0/k
     else:
      sum = sum - 1.0/k
 k = k + 1
 print()

This is my assignment :

Create a python program named sumseries.py that does the following: Put comments at the top of your program with your name, date, and description of what the program does.

Write a program to calculate and display the sum of the series:

1 - 1/2 + 1/3 - 1/4 + ...

until a term is reached that is less than 0.0001.

The answer with 10,000 iterations appears to be 0.6930971830599583

I ran the program with 1,000,000,000 (billion) iterations and came up with a number of 0.6931471810606472. I need to create a loop to programmably create the series.

like image 534
Jamie Schwiderski Avatar asked Sep 18 '16 16:09

Jamie Schwiderski


1 Answers

Actually, you could write this shorter:

Answer = sum(1.0 / k if k % 2 else -1.0 / k for k in range(1, 10001))

What this code does:

  • the innermost part is a generator expression, which computes the elements of a series 'on the fly'
    • 1.0 / k if k % 2 else -1.0 / k results in 1.0 / k if k is odd and -1.0 / k otherwise (a - b is the same as a + (-b))
    • for k in range(1, 10001) goes through all ks in range from 1 (included) to 10001 (excluded)
  • sum can compute the sum of any sequence (any iterable, to be precise), be it a list, a tuple, or a generator expression

The same without generator expressions:

Answer = 0
for k in range(1, 10001):
    if k % 2:
        Answer += 1.0 / k
    else:
        Answer -= 1.0 / k

    # or simply:
    # Answer += 1.0 / k if k % 2 else -1.0 / k
like image 180
ForceBru Avatar answered Oct 12 '22 10:10

ForceBru