Hallo Michail,
also hier mal eine Lösung mit For und dann die Lösung von Stephen Wolfram
persönlich:
data = Table[Random[], {i, 1, 1000}]
GleitenderDurchschnitt[data_List, (n_Integer)?Positive] := Block[{s, e =
{}},
Do[s = 0;
Do[s = s + data[[l]], {l, i - n + 1, i}];
AppendTo[e, s/n // N],
{i, n, Length[data]}]; e]
ergebnis$gleitender$Durchschnitt =
ListPlot[GleitenderDurchschnitt[data, 100]] // Timing
Das dauert {1.682 Second,
\[SkeletonIndicator]Graphics\[SkeletonIndicator]}!!
Nun im Mathematica Stil:
MovingAverage[data_List, (n_Integer)?Positive] :=
Drop[Apply[Plus, NestList[RotateRight, data, n - 1]], n - 1]/n
ergebnis$MovingAverage = ListPlot[MovingAverage[data, 100]] // Timing
Das dauert nur noch {0.03 Second,
\[SkeletonIndicator]Graphics\[SkeletonIndicator]}!!
ergebnis$gleitender$Durchschnitt[[1]]/ergebnis$MovingAverage[[1]]
Das ganze ist auf meiner lahmen Krücke 56 mal schneller!!!!!!!!!!!!
Gruß, Peter Klamser
-----Ursprüngliche Nachricht-----
Von: Michail Koslov [mailto:koslov@XXXXXXX.de]
Gesendet: Sonntag, 9. Juli 2000 14:11
An: Peter Klamser
Cc: dmug@XXXXXXX.ch
Betreff: Re: AW: For-Schleife/Neue Liste für Ergebnisse
Hallo Peter,
vielen Dank für diesen Hinweis. Mein Problem ist jedoch allgemeiner
Natur. Ich wollte wissen, wie man in einer For-Schleife das Ergebnis
der Berechnung EINER Funktion (gleitender Durchschnitt war nur ein
Beispiel) als eine neue Liste darstellen kann.
Ganz speziell geht es bei mir um folgende Aufgabenstellung. In einer
Datenreihe möchte ich gleitend für jeweils 20 Beobachtungen
einige Funktionen berechnen lassen und dann die Ergebnisse grafisch
Darstellen.
Gruß
MK