function BestFit(const AnArray: array of Double): Extended;
var n: Integer;
b,m: Double;
begin
n := Length(AnArray);
b := BestFitB(AnArray);
m := BestFitM(AnArray);
Result := b + (m * n);
end;
function BestFitLn(const AnArray: array of Double): Extended;
var n: Integer;
b,m: Double;
begin
n := Length(AnArray);
b := BestFitB(AnArray);
m := BestFitM(AnArray);
Result := b + (m * (n+1));
end;
function BestFitM(const AnArray: array of Double): Extended;
var n,i: Integer;
summation,m: Double;
begin
n := Length(AnArray);
summation := 0;
for i := 1 to n do summation := summation + (AnArray[i-1] * i);
m := ((12/(Power(n,3)-n))*summation) - ((6/(Sqr(n)-n))*Sum(AnArray));
Result := m;
end;
function BestFitB(const AnArray: array of Double): Extended;
var n,i: Integer;
summation,b: Double;
begin
n := Length(AnArray);
summation := 0;
for i := 1 to n do summation := summation + (AnArray[i-1] * i);
b := ((((4*n)+2)/(Sqr(n)-n))*Sum(AnArray)) - ((6/(Sqr(n)-n))*summation);
Result := b;
end;