Poczytaj też o regresji liniowej. Kiedyś w TP napisałem coś takiego:
PROCEDURE RegLin(DBx, DBy :ARRAY OF Double; VAR A, B :Double);
VAR SigX, SigY :Double; { sumy liczb }
SigXY :Double;
SigSqrX :Double;
n, i :Word; { liczba elementow tablic }
BEGIN
n := High(DBx)+1; { okreslam liczbe elementow }
SigX := 0; SigY := 0;
SigXY := 0;
SigSqrX := 0;
FOR i := 0 TO n-1 DO
BEGIN
SigX := SigX + DBx[i];
SigY := SigY + DBy[i];
SigXY := SigXY + (DBx[i]*DBy[i]);
SigSqrX := SigSqrX + Sqr(DBx[i]);
END;
A := (n*SigXY - SigX*SigY) / (n*SigSqrX - Sqr(Sigx));
B := 1/n * (SigY - A*SigX);
END;
FUNCTION Interpolacja(X1,Y1, X2,Y2, X :Double) :Double;
{ interpolacja liniowa }
VAR a, b :Double;
BEGIN
{ wspolczynnik kierunkowy prostej }
a:=(Y2 - Y1) / (X2 - X1);
{ parametr b }
b:=((-X1) * (Y2 - Y1) - (X2 - X1) * (-Y1)) / (X2 - X1);
Interpolacja := A * X + b;
END;