Median beregning
Har lavet en funktion til beregningen af medianen af en tal-række.function MedianDouble (dZ: array of Double): Double;
var
StringList: TStringList;
i, iNumPoints: integer;
dTemp1, dtemp2: double;
begin
iNumPoints := High(dZ);
StringList := TStringList.Create;
for i := 0 to iNumPoints - 1 do
begin
StringList.Insert(i,FloatToStr(dZ[i]));
end;
StringList.Sorted := TRUE; // sort to get the median value
if Odd(iNumPoints-1) then
begin
//ShowMessage('Odd');
Result := StrToFloat(StringList[iNumPoints div 2]);
end
else
begin
//ShowMessage('Even');
dTemp1 := StrToFloat(StringList[(iNumPoints div 2)-1]);
dTemp2 := StrToFloat(StringList[(iNumPoints div 2)]);
Result := (dTemp1 + dTemp2) / 2;
end;
StringList.Free;
end;
Den funker bare ikke helt. Nogle tal-genier der kan se hvorfor. EFGs har en algoritme, men den er langsom og kun til integers.
http://homepages.borland.com/efg2lab/Library/Delphi/MathFunctions/StatisticsLibrary.pas.TXT
