FoldList for decaying local maximum?
- To: mathgroup at smc.vnet.net
- Subject: [mg113849] FoldList for decaying local maximum?
- From: Garapata <warsaw95826 at mypacks.net>
- Date: Mon, 15 Nov 2010 05:52:24 -0500 (EST)
Use the following to represent a list of 500 data points: data = RandomReal[ParetoDistribution[1, 4], 500]; Now, I need to find the decay from a local maximum (typically as time^. 05) The following illustrates my latest attempt to do this: data = RandomReal[ParetoDistribution[1, 4], 500]; =E2=80=A8maxData = Rest[FoldList[Max, 0, data]]; =E2=80=A8t = Flatten[Range[1, {#[[2]]}] & /@ Tally[maxData]]; maxDecayed = maxData - (t^.5)*.1; ListLinePlot[{data, maxData, maxDecayed}, PlotRange -> All] But this only shows the decay from the maximum data values. I need to set a local maximum when: maxData > data >= maxDecayed then begin the decay again from that point. Note: you may need to run the code a couple of times to see the condition where a data value exceeds the decay line, but has not produced a new maximum. I think I need a different approach to do this, which calculates what I need in one pass through the list, "data" rather than calculating maxData and t once then trying to calculate the decay. So, I think I need a function, which would include the conditions that either: 1. resets the local maximum and restarts the t count or 2. calculates the decays and increments the t count. It would include something like: Which[ data > decayedLocalMaximum, {data, 1}, (* new local maximum, restarts t at 1 *) data <= decayedLocalMaximum, {decayedLocalMax - (t + 1)^.05*.1, t + 1} (* local maximum still in effect so it decays and t increments *) ] This should give me what I'd need for each successive data point's calculation? Then I could use that function, call it "localMaxDecay", in something like: FoldList[localMaxDecay, 0, data]; But I'm stumped. - How do I set up the initial decayedLocalMaximum value (it should equal data[[1]])? - How do I keep track of t, the intervals since a local maximum occurred? - Will FoldList do this? I'm not clear how to approach this. Any suggestions appreciated. Thanks, G