Re: Help please: Summing a list
- To: mathgroup at smc.vnet.net
- Subject: [mg13491] Re: Help please: Summing a list
- From: scottb (Scott Brown)
- Date: Fri, 31 Jul 1998 04:33:12 -0400
- Organization: Wolfram Research, Inc.
- References: <6pebm8$i6j@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
robpetersonSPAMME at iname.com writes:
>I make a list of numbers, eg:
>P=Table[6,{x,0,110}]; (I have a more interesting list to use later if I
>get this working)
>Now I want to make another list PP in which each entry PP[[i]] is the
>sum of P's first i entries.
If Plus, instead of Sum, will do, you could try this. If you
really want Sum, you can adapt this easily.
In[1]:= foo = Range[10]
Out[1]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
In[2]:= partsum[l_] := MapIndexed[ Apply[ Plus, Take[ l, First[#2]
]]&, l]
In[3]:= partsum[foo]
Out[3]= {1, 3, 6, 10, 15, 21, 28, 36, 45, 55}
Some specific comments about the problems you encountered follow.
Your approach was very C-like. Mathematica includes
lots of functions (e.g., MapIndexed) for manipulating Lists.
Using these functions is faster and more robust than writing
your own index-referencing code (you can avoid things like
off-by-one errors, for instance).
> I try
>PP[[i]]:=Sum[P[[n]],{n,0,i}];
Note: Mathematica Lists start their indices at 1. Also,
you would use i_, not i, on the left side of := to do
this. However, you shouldn't do this :), see above.
>At the definition, I get the following error: Part::"pspec":
> "Part specification \!\(n\) is neither an integer nor a list of
>integers."
The problem isn't due to Sum, it's because you're telling
Mathematica to assign to PP[[i]], and i is not defined to
have a numeric value yet.
In[1]:= somesum := Sum[ P[[n]], {n, 0, i} ]
In[2]:= PP[[i]] := somesum
SetDelayed::pspec:
Part specification i is neither an integer nor a list of integers.
Out[2]= $Failed
In[3]:= PP[[j]] := 2
SetDelayed::pspec:
Part specification j is neither an integer nor a list of integers.
Out[3]= $Failed
In[4]:= PP[[i_]] := 2
SetDelayed::pspec:
Part specification i_ is neither an integer nor a list of integers.
Out[4]= $Failed
>I don't know how to make n an integer. In the definition of Sum[], it
>seems n is an integer unless you add a forth parameter "di" in the
>specification list such as
>Sum[f, {i, imin, imax, di}]
>Can anyone help me to generate this second list?
>Thanks, Rob
------------------------------------------------------------------------
| Scott Brown | "I may be speaking from Wolfram Research, Inc.,
| | scottb at wolfram.com | but that doesn't mean I'm speaking for them."
|
------------------------------------------------------------------------