| 1 | initial version |
Okay. Assuming this is not homework, you have at least two ways:
This uses explicitly the symbolic sum function, this might be handy in situations where you want to keeep the algorithm explicit (e. g. the upper pound is a parameter).
sage: var("j, k", domain="integer")
(j, k)
sage: P(k)=sum(x^j,j,0,k); P
k |--> (x^(k + 1) - 1)/(x - 1)
Surprise : Sage has done an interesting simplification to your input...
sage: P1=P(50); P1
(x^51 - 1)/(x - 1)
sage: P1(x=1.00001)
51.0127520827452
If you care only about the (algebraically pristine) result:
sage: P2=sum([x^u for u in (0..50)])
sage: P2
x^50 + x^49 + x^48 + x^47 + x^46 + x^45 + x^44 + x^43 + x^42 + x^41 + x^40 + x^39 + x^38 + x^37 + x^36 + x^35 + x^34 + x^33 + x^32 + x^31 + x^30 + x^29 + x^28 + x^27 + x^26 + x^25 + x^24 + x^23 + x^22 + x^21 + x^20 + x^19 + x^18 + x^17 + x^16 + x^15 + x^14 + x^13 + x^12 + x^11 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x + 1
No nice surprise here...
sage: P2(x=1.00001)
51.0127520827500
sage: P2(x=1+1/100000)
Note that this floating-point approximation is different from the one obtained on the "simplified" formula above (the firs one involves less computations, hence less roundings).
But you can get an exact result:
sage: P1(x=1+1/100000) 510127520827499234924010617814679347440131881460455152630970806236978089841760065377401299770935099052810457413019360896761286548194142590173663162246727753486333322365757658529375175723866161447474229318717642077528009483490624990020825012750005100001/10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 sage: P1(x=1+1/100000).n() 51.0127520827499
which is again slightly different of the 17-digits numerical approximation given by default by the use of floating-point quantities...
Unless you have serious reasons to do otherwise, you should try to :
take advantage of (valid) algebraic simplifications, and
keep your calculations exact, approximating only to get manageable expressions in writing...
HTH,
| 2 | No.2 Revision |
Okay. Assuming this is not homework, you have at least two ways:
This uses explicitly the symbolic sum function, this might be handy in situations where you want to keeep the algorithm explicit (e. g. the upper pound is a parameter).
sage: var("j, k", domain="integer")
(j, k)
sage: P(k)=sum(x^j,j,0,k); P
k |--> (x^(k + 1) - 1)/(x - 1)
Surprise : Sage has done an interesting simplification to your input...
sage: P1=P(50); P1
(x^51 - 1)/(x - 1)
sage: P1(x=1.00001)
51.0127520827452
If you care only about the (algebraically pristine) result:
sage: P2=sum([x^u for u in (0..50)])
sage: P2
x^50 + x^49 + x^48 + x^47 + x^46 + x^45 + x^44 + x^43 + x^42 + x^41 + x^40 + x^39 + x^38 + x^37 + x^36 + x^35 + x^34 + x^33 + x^32 + x^31 + x^30 + x^29 + x^28 + x^27 + x^26 + x^25 + x^24 + x^23 + x^22 + x^21 + x^20 + x^19 + x^18 + x^17 + x^16 + x^15 + x^14 + x^13 + x^12 + x^11 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x + 1
No nice surprise here...
sage: P2(x=1.00001)
51.0127520827500
sage: P2(x=1+1/100000)
Note that this floating-point approximation is different from the one obtained on the "simplified" formula above (the firs one involves less computations, hence less roundings).
But you can get an exact result:
sage: P1(x=1+1/100000)
510127520827499234924010617814679347440131881460455152630970806236978089841760065377401299770935099052810457413019360896761286548194142590173663162246727753486333322365757658529375175723866161447474229318717642077528009483490624990020825012750005100001/10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
sage: P1(x=1+1/100000).n()
which is again slightly different of the 17-digits numerical approximation given by default by the use of floating-point quantities...
Unless you have serious reasons to do otherwise, you should try to :
take advantage of (valid) algebraic simplifications, and
keep your calculations exact, approximating only to get manageable expressions in writing...
HTH,
| 3 | No.3 Revision |
Okay. Assuming this is not homework, you have at least two ways:
This uses explicitly the symbolic sum function, this might be handy in situations where you want to keeep the algorithm explicit (e. g. the upper pound is a parameter).
sage: var("j, k", domain="integer")
(j, k)
sage: P(k)=sum(x^j,j,0,k); P
k |--> (x^(k + 1) - 1)/(x - 1)
Surprise : Sage has done an interesting simplification to your input...
sage: P1=P(50); P1
(x^51 - 1)/(x - 1)
sage: P1(x=1.00001)
51.0127520827452
If you care only about the (algebraically pristine) result:
sage: P2=sum([x^u for u in (0..50)])
sage: P2
x^50 + x^49 + x^48 + x^47 + x^46 + x^45 + x^44 + x^43 + x^42 + x^41 + x^40 + x^39 + x^38 + x^37 + x^36 + x^35 + x^34 + x^33 + x^32 + x^31 + x^30 + x^29 + x^28 + x^27 + x^26 + x^25 + x^24 + x^23 + x^22 + x^21 + x^20 + x^19 + x^18 + x^17 + x^16 + x^15 + x^14 + x^13 + x^12 + x^11 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x + 1
No nice surprise here...
sage: P2(x=1.00001)
51.0127520827500
sage: P2(x=1+1/100000)
Note that this floating-point approximation is different from the one obtained on the "simplified" formula above (the firs one involves less computations, hence less roundings).
But you can get an exact result:
sage: P1(x=1+1/100000)
510127520827499234924010617814679347440131881460455152630970806236978089841760065377401299770935099052810457413019360896761286548194142590173663162246727753486333322365757658529375175723866161447474229318717642077528009483490624990020825012750005100001/10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
sage: P1(x=1+1/100000).n()
51.0127520827499
which is again slightly different of the 17-digits numerical approximation given by default by the use of floating-point quantities...
Unless you have serious reasons to do otherwise, you should try to :
take advantage of (valid) algebraic simplifications, and
keep your calculations exact, approximating only to get manageable expressions in writing...
HTH,
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.