Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Create a cumulative list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg93386] Re: Create a cumulative list
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Wed, 5 Nov 2008 04:57:03 -0500 (EST)

On 11/4/08 at 6:19 AM, cadieux_jp at hotmail.com (philipp) wrote:

>So here is my problem. I have a list of values let's say ValueList =
>{1,2,3,4,5,6,7,8,9} What I want is Compilation =
>{1,3,6,10,15,21,28,36,45} created in adding Compilation[[1]] with
>ValueList[[2]] to create Compilation[[2]]. In the same way,
>Compilation[[7]] = Compilation[[6]] + ValueList[[7]].

In version 6 of Mathematica this is easily accomplished using
Accumulate. That is

In[22]:= Accumulate@{1, 2, 3, 4, 5, 6, 7, 8, 9}

Out[22]= {1,3,6,10,15,21,28,36,45}

In earlier versions of Mathematica, the same result can be
obtained using FoldList, i.e,

In[23]:= Rest@FoldList[Plus, 0, {1, 2, 3, 4, 5, 6, 7, 8, 9}]

Out[23]= {1,3,6,10,15,21,28,36,45}

>If that wasn't enough, I need to add a difficulty to that. If, at
>any time, a value of Compilation[[i]] is bigger that XYZ, then that
>Compilation[[i]] should be equal to 0.

This can be done using Clip. For example to set all of the
values greater than 6 to zero in the last result do:

In[24]:= Clip[%, {0, 6}, {0, 0}]

Out[24]= {1,3,6,0,0,0,0,0,0}

Or I could zero all the values less than 6 and greater than 20
by doing:

In[25]:= Clip[%%, {6, 20}, {0, 0}]

Out[25]= {0,0,6,10,15,0,0,0,0}

>To help you understand (sorry but English is not my first language
>and explaining it in my first language is already tough), here is
>the results I am looking for.

>My ValueList = {0.0032833, -0.000654511, -0.0065494, 0.00103598,
>-0.00112899, 0.00386173, 0.00365922, 0.00551557, -0.0138527,
>0.00471387, 0.00497326, -0.00140056, -0.00187003, -0.0195785,
>-0.00210204, -0.00900038, 0.000289855, 0.000289771, -0.00135187,
>0.00386772}

>My Compilation = {0, -0.000654511, 0, 0.00103598,
>-0.0000930101, 0, 0, 0, 0, 0, 0, -0.00140056, 0, 0, 0, 0,
>0.000289855, 0.000579626, -0.000772247, 0} and the additionnal
>criteria is >0.002 and <-0.002  (or >0.002 in absolute value)

Hmm... I don't understand what you are doing here. If I first
use Accumulate to get the cumulative sums then apply Clip to
zero the values outside the range {-0.002, 0.002} I get

In[32]:= Clip[Accumulate[ValueList], {-0.002, 0.002}, {0, 0}]

Out[32]= {0,0,0,0,0,-0.000151891,0,0,0,-0.000115931,0,0,0.00158674,0,0,0,=
0,0,0,0}

which is clearly different from what you indicate should result.


  • Prev by Date: Re: Design by Contracts in Mathematica
  • Next by Date: Re: Design by Contracts in Mathematica
  • Previous by thread: Re: Create a cumulative list
  • Next by thread: Trouble solving system of first order, two variable PDEs in