Re: Help please: Summing a list

*To*: mathgroup at smc.vnet.net*Subject*: [mg13494] Re: [mg13480] Help please: Summing a list*From*: "Clemens Frey" <Clemens.Frey at uni-bayreuth.de>*Date*: Fri, 31 Jul 1998 04:33:14 -0400*Sender*: owner-wri-mathgroup at wolfram.com

Rob: I think you made three mistakes in PP[[i]]:=Sum[P[[n]],{n,0,i}]; 1st: you tried to make up a list by PP[[i]]= ..., but PP was not known by Mathematica, so the you came up this error message 2nd: part 0 of an expression is its head, so the range specification in Sum is wrong, too. (e.g.: {1,2,3}[[1]] gives List, the head of {1,2,3}) 3nd: you used a delayed set (:=) instead of an immediate one (=). (more about this later in the 'PS' section) So I have the correction and an advice: (where a definition of P=Table[6,{x,0,110}]; is supposed) CORRECTION: PP = le[ Sum[P[[n]],{n,1,i}], {i,1,Length[P]} ]; ADVICE: PPP = Table[ Plus @@ Take[P,i], {i,1,Length @ P} ]; where @@ is a shortcut for Apply[]. It is better to use the 2nd alternative since it is ten times faster and yields an equal result, as the following shows: Timing[ PP = Table[ Sum[P[[n]],{n,1,i}], {i,1,Length @ P} ]; ] gives: {0.44 Second, Null} Timing[ PPP = Table[ Plus @@ Take[P,i], {i,1,Length @ P} ]; ] gives: {0.06 Second, Null} and finally, PP == PPP yields True. regards Clemens clemens.frey at uni-bayreuth.de ------------------------------------------------------------------------------------------ PS: If you want to use a delayed set and thus define a function, use: func[P_List] := Table[ Plus @@ Take[P,i], {i,1,Length[P]} ]; and compare with the upper results: func[P] == PPP == PP True