Thema: Delphi Moving Average

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Moving Average

  Alt 25. Aug 2008, 17:36
Hallo,

da die Zahlen im StringGrid als Zeichenketten vorliegen, musst du sie erst konvertieren:

Delphi-Quellcode:
uses
  Math,
  Types;

procedure DataToStrings(data: TDoubleDynArray; strings: TStrings; const fmt: string = '%f');
var
  i: Integer;
begin
  strings.Clear;
  for i := Low(data) to High(data) do
    strings.Add(Format(fmt, [Data[i]]));
end;

function StringsToData(strings: TStrings; default: Double = 0): TDoubleDynArray;
var
  i: Integer;
begin
  SetLength(Result, strings.Count);
   for i := Low(Result) to High(Result) do
     Result[i] := StrToFloatDef(strings[i], default);
end;
Als Parameter strings kannst du z.B. StringGrid.Rows[iRow] oder StringGrid.Cols[iCol] übergeben.

Die Berechnung des gleitenden Durchschnitts ist dann wahrscheinlich nicht mehr dein Problem.
Delphi-Quellcode:
uses
  Math,
  Types;

function SimpleMovingAverage(data: TDoubleDynArray; n: Word): TDoubleDynArray;
var
  i: Integer;
  temp: TDoubleDynArray;
begin
  SetLength(Result, Length(data));
  for i := Low(data) to High(data) do
  begin
    if i < n
      then temp := Copy(data, 0, Succ(i)) // was: i (off by one)
      else temp := Copy(data, Succ(i - n), n);
    Result[i] := Mean(temp);
  end;
end;
Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat