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