
17.12.2010, 00:23
|
Активный
|
|
Регистрация: 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;
|