473,218 Members | 1,772 Online

# calculate the series and print

I would like to calculate the value of this series (for limited number of n)
s=2(1/1 - 1/3 + 1/5 -1/7 + 1/9 - 1/11+...)

I tried for-lop but it did not work well since the sign alternative (+, - , +, -...). Please help me

My second question is
how can I obtain this when using for loop to make a series
Expand|Select|Wrap|Line Numbers
1. >>>[1,2,4,8,16...]
2.
3. # I can only print
4. 1
5. 2
6. 4
7. 8
8. 16
9. ...
10.
Oct 11 '07 #1
8 1446
rhitam30111985
112 100+
only then can someone point out your mistake
Oct 11 '07 #2
bartonc
6,596 Expert 4TB
I would like to calculate the value of this series (for limited number of n)
s=2(1/1 - 1/3 + 1/5 -1/7 + 1/9 - 1/11+...)

I tried for-lop but it did not work well since the sign alternative (+, - , +, -...). Please help me

My second question is
how can I obtain this when using for loop to make a series
Expand|Select|Wrap|Line Numbers
1. >>>[1,2,4,8,16...]
2.
3. # I can only print
4. 1
5. 2
6. 4
7. 8
8. 16
9. ...
10.
For the second question:
Expand|Select|Wrap|Line Numbers
1. >>> [2**i for i in range(28)]
2. [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728]
Oct 11 '07 #3
bartonc
6,596 Expert 4TB
I would like to calculate the value of this series (for limited number of n)
s=2(1/1 - 1/3 + 1/5 -1/7 + 1/9 - 1/11+...)

I tried for-lop but it did not work well since the sign alternative (+, - , +, -...). Please help me
Expand|Select|Wrap|Line Numbers
1. >>> n = 6
2. >>> numerators = (i for i in range(n * 2) if i%2)
3. >>> series = [(1/float(j), -1/float(j))[i%2] for i, j in enumerate(numerators)]
4. >>> series
5. [1.0, -0.33333333333333331, 0.20000000000000001, -0.14285714285714285, 0.1111111111111111, -0.090909090909090912]
6. >>> 2 * sum(series)
7. 1.4880230880230882
8. >>>
Oct 11 '07 #4
bvdet
2,851 Expert Mod 2GB
I would like to calculate the value of this series (for limited number of n)
s=2(1/1 - 1/3 + 1/5 -1/7 + 1/9 - 1/11+...)

I tried for-lop but it did not work well since the sign alternative (+, - , +, -...). Please help me
A for loop works fine. You just need a way to alternate the + and -.
Expand|Select|Wrap|Line Numbers
1. factor = -1
2. series = range(1, 1000000, 2)
3. seq = []
4. for value in series:
5.     factor *= -1
6.     seq.append(factor*(1/float(value)))
7.
8. print sum(seq)
9.
10. # >>> 0.785397663397
Oct 11 '07 #5
Motoma
3,237 Expert 2GB
I would like to calculate the value of this series (for limited number of n)
s=2(1/1 - 1/3 + 1/5 -1/7 + 1/9 - 1/11+...)
Check it:
Expand|Select|Wrap|Line Numbers
1. >>> sum([(((-1)**n)*(float(1)/(1+2*n))) for n in range(0, 8)])
2. 0.75426795426795445
3.
If you need some help understanding this, let me know.
Oct 11 '07 #6
bartonc
6,596 Expert 4TB
Check it:
Expand|Select|Wrap|Line Numbers
1. >>> sum([(((-1)**n)*(float(1)/(1+2*n))) for n in range(0, 8)])
2. 0.75426795426795445
3.
If you need some help understanding this, let me know.
Very nice! To increase efficiency and reduce syntactic clutter, use a generator instead of a list (I also dumped one set of parens on GPs):
Expand|Select|Wrap|Line Numbers
1. >>> sum(((-1)**n)*(float(1)/(1+2*n)) for n in xrange(8))
2. 0.75426795426795445
3. >>>
[EDIT: actually two generators, by using xrange() rather than range()]
Oct 11 '07 #7
Motoma
3,237 Expert 2GB
Very nice! To increase efficiency and reduce syntactic clutter, use a generator instead of a list (I also dumped one set of parens on GPs):
Expand|Select|Wrap|Line Numbers
1. >>> sum(((-1)**n)*(float(1)/(1+2*n)) for n in xrange(8))
2. 0.75426795426795445
3. >>>
[EDIT: actually two generators, by using xrange() rather than range()]
FANTASTIC!
This is the first time I have been introduced to generators!
I honestly learn something new every time I post in this forum.
Oct 11 '07 #8
bartonc
6,596 Expert 4TB
FANTASTIC!
This is the first time I have been introduced to generators!
I honestly learn something new every time I post in this forum.
From what I understand, generators are something to get used to.
They are efficient because they return values instead of storing them.
This means that you can't index into them nor print the entire contents; You must iterate over them.
They are required learning because Python 3.0 uses them in many places where lists were used in 2.5.
Oct 11 '07 #9