Показать сообщение отдельно
  #4  
Старый 17.12.2010, 00:23
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Вот из старого архива выкопал.
Вроде рабочий код был, но сейчас не проверял.
Но Вам же еще вроде бы и на график надо положить...

Код:
function Regresi1(TheArrayX,TheArrayY : ARRAY of real;Var A,B : real) : Boolean;
{Вычисление коэфф.A,B по Регресс-Функции : Y=A*X+B}
Var
  S1,S2,S3,S4,Z : DOUBLE;
  N,i : LongInt;
begin
  Result:=FALSE;
  A:=0;
  B:=0;
  if (HIGH(TheArrayX)-LOW(TheArrayX)) = (HIGH(TheArrayY)-LOW(TheArrayY)) then begin
     N:=HIGH(TheArrayX)-LOW(TheArrayX)+1;
     if N>2 then begin
        S1:=0;
        S2:=0;
        S3:=0;
        S4:=0;
        for i:=LOW(TheArrayX) to HIGH(TheArrayX) do
          begin
            s1:=s1+TheArrayX[i];
            s2:=s2+TheArrayY[i];
            s3:=s3+TheArrayX[i]*TheArrayY[i];
            s4:=s4+TheArrayX[i]*TheArrayX[i];
        end;
        Z:=N*s4-s1*s1;
        if Z<>0 then begin
           Result:=TRUE;
           A:=(N*s3-s1*s2)/z;
           B:=(s2*s4-s3*s1)/z;
        end;
     end;
  end;
end;


Код:
function Regresi2(TheArrayX,TheArrayY : ARRAY of real;Var A,B,C : real) : Boolean;
{Вычисление коэфф.A,B,C по Регресс-Функции : Y=A*X^2+B*X+C}
Var
  S1,S2,S3,S4,S5,S6,S7,Z : DOUBLE;
  N,i : LongInt;
begin
  Result:=FALSE;
  A:=0;
  B:=0;
  C:=0;
  if (HIGH(TheArrayX)-LOW(TheArrayX)) = (HIGH(TheArrayY)-LOW(TheArrayY)) then begin
     N:=HIGH(TheArrayX)-LOW(TheArrayX)+1;
     if N>3 then begin
        S1:=0;
        S2:=0;
        S3:=0;
        S4:=0;
        S5:=0;
        S6:=0;
        S7:=0;
        for i:=LOW(TheArrayX) to HIGH(TheArrayX) do
          begin
            s1:=s1+TheArrayX[i];
            s2:=s2+TheArrayX[i]*TheArrayX[i];
            s3:=s3+TheArrayX[i]*TheArrayX[i]*TheArrayX[i];
            s4:=s4+TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayX[i];
            s5:=s5+TheArrayY[i];
            s6:=s6+TheArrayX[i]*TheArrayY[i];
            s7:=s7+TheArrayX[i]*TheArrayX[i]*TheArrayY[i];
        end;
        Z:=N*(s2*s4-s3*s3)+s1*(s2*s3-s1*s4)+s2*(s1*s3-s2*s2);
        if Z<>0 then begin
           Result:=TRUE;
           A:=(s7*(N*s2-s1*s1)+s6*(s1*s2-N*s3)+s5*(s1*s3-s2*s2))/z;
           B:=(s7*(s1*s2-N*s3)+s6*(N*s4-s2*s2)+s5*(s2*s3-s1*s4))/z;
           C:=(s7*(s1*s3-s2*s2)+s6*(s2*s3-s1*s4)+s5*(s2*s4-s3*s3))/z;
        end;
     end;
  end;
end;


Код:
function Regresi3(TheArrayX,TheArrayY : ARRAY of real;Var A,B,C,D : real) : Boolean;
{Вычисление коэфф.A,B,C,D по Регресс-Функции : Y=A*X^3+B*X^2+C*X+D}
Var
  S1,S2,S3,S4,S5,
  S6,S7,S8,S9,S10,
  Z,Za,Zb,Zc,Zd : DOUBLE;
  N,i : LongInt;
begin
  Result:=FALSE;
  A:=0;
  B:=0;
  C:=0;
  D:=0;
  if (HIGH(TheArrayX)-LOW(TheArrayX)) = (HIGH(TheArrayY)-LOW(TheArrayY)) then begin
     N:=HIGH(TheArrayX)-LOW(TheArrayX)+1;
     if N>4 then begin
        S1:=0;
        S2:=0;
        S3:=0;
        S4:=0;
        S5:=0;
        S6:=0;
        S7:=0;
        S8:=0;
        S9:=0;
        S10:=0;
        for i:=LOW(TheArrayX) to HIGH(TheArrayX) do
          begin
            s1:=s1+TheArrayX[i];
            s2:=s2+TheArrayX[i]*TheArrayX[i];
            s3:=s3+TheArrayX[i]*TheArrayX[i]*TheArrayX[i];
            s4:=s4+TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayX[i];
            s5:=s5+TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayX[i];
            s6:=s6+TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayX[i];
            s7:=s7+TheArrayY[i];
            s8:=s8+TheArrayX[i]*TheArrayY[i];
            s9:=s9+TheArrayX[i]*TheArrayX[i]*TheArrayY[i];
            s10:=s10+TheArrayX[i]*TheArrayX[i]*TheArrayX[i]*TheArrayY[i];
        end;
        za:=s10*(N*(s2*s4-s3*s3)+s1*(s2*s3-s1*s4)+
            s2*(s1*s3-s2*s2))+s9*(N*(s3*s4-s2*s5)+
            s1*(s1*s5-s3*s3)+s2*(s2*s3-s1*s4))+
            s8*(N*(s3*s5-s4*s4)+s1*(s3*s4-s2*s5)+
            s2*(s2*s4-s3*s3))+s7*(s1*(s4*s4-s3*s5)+
            s2*(s2*s5-s3*s4)+s3*(s3*s3-s2*s4));

        zb:=s10*(N*(s3*s4-s2*s5)+s1*(s1*s5-s3*s3)+
            s2*(s2*s3-s1*s4))+s9*(s1*(s3*s4-s1*s6)+
            s2*(N*s6-s3*s3)+s4*(s1*s3-N*s4))+
            s8*(N*(s4*s5-s3*s6)+s1*(s2*s6-s3*s5)+
            s3*(s3*s3-s2*s4))+s7*(s1*(s3*s6-s4*s5)+
            s2*(s3*s5-s2*s6)+s4*(s2*s4-s3*s3));

        Zc:=s10*(N*(s3*s5-s4*s4)+s1*(s3*s4-s2*s5)+
            s2*(s2*s4-s3*s3))+s9*(N*(s4*s5-s3*s6)+
            s1*(s2*s6-s3*s5)+s3*(s3*s3-s2*s4))+
            s8*(s2*(s3*s5-s2*s6)+s4*(N*s6-s3*s3)+
            s5*(s2*s3-N*s5))+s7*(s1*(s5*s5-s4*s6)+
            s2*(s3*s6-s4*s5)+s3*(s4*s4-s3*s5));

        zd:=s10*(s1*(s4*s4-s3*s5)+s2*(s2*s5-s3*s4)+
            s3*(s3*s3-s2*s4))+s9*(s1*(s3*s6-s4*s5)+
            s2*(s3*s5-s2*s6)+s4*(s2*s4-s3*s3))+
            s8*(s1*(s5*s5-s4*s6)+s2*(s3*s6-s4*s5)+
            s3*(s4*s4-s3*s5))+s7*(s2*(s4*s6-s5*s5)+
            s3*(s4*s5-s3*s6)+s4*(s3*s5-s4*s4));

        Z :=s6*(N*(s2*s4-s3*s3)+s1*(s2*s3-s1*s4)+
            s2*(s1*s3-s2*s2))+s5*(N*(s3*s4-s2*s5)+
            s1*(s1*s5-s3*s3)+s2*(s2*s3-s1*s4))+
            s4*(N*(s3*s5-s4*s4)+s1*(s3*s4-s2*s5)+
            s2*(s2*s4-s3*s3))+s3*(s1*(s4*s4-s3*s5)+
            s2*(s2*s5-s3*s4)+s3*(s3*s3-s2*s4));

        if Z<>0 then begin
           Result:=TRUE;
           A:=za/z;
           B:=zb/z;
           C:=zc/z;
           D:=zd/z;
        end;
     end;
  end;
end;
Ответить с цитированием