![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте, вот собственно код. Помогите пожалуйста его реализовать, кого не сильно затруднит может показать в Delphi с исходниками! Мне просто сдавать надо, а я никак не могу понять! Очень, очень прошу вас о помощи!
Код:
procedure LinearRegression(ValueArray, ArgumentArray: TDoubleArray;
SourceSeries,
DestSeries: TChartSeries; var MainCoef, FreeCoef: double;
SeriesColor: TColor; var Hint: string);
var
b0, b1, xsum, ysum, pxy, xsqua: double;
y, x: array of double;
i, N: integer;
s: string;
begin
if ValueArray <> nil then
N := Length(ValueArray)
else
N := SourceSeries.XValues.Count;
pxy := 0;
xsqua := 0;
SetLength(x, N);
SetLength(y, N);
for i := 0 to N - 1 do
begin
if ValueArray <> nil then
begin
y[i] := ValueArray[i];
x[i] := ArgumentArray[i];
end
else
begin
y[i] := SourceSeries.YValues.Value[i];
x[i] := SourceSeries.XValues.Value[i];
end;
pxy := pxy + x[i] * y[i];
xsqua := xsqua + x[i] * x[i];
end;
xsum := Sum(x);
ysum := Sum(y);
b1 := (xsum * ysum - N * pxy) / (xsum * xsum - N * xsqua);
b0 := (ysum - b1 * xsum) / N;
MainCoef := b1;
FreeCoef := b0;
if DestSeries <> nil then
for i := 0 to N - 1 do
if ValueArray <> nil then
DestSeries.AddXY(ArgumentArray[i],
b1 * ArgumentArray[i] + b0, '', SeriesColor)
else
DestSeries.AddXY(SourceSeries.XValues.Value[i],
b1 * SourceSeries.XValues.Value[i] + b0, '', SeriesColor);
if b0 < 0 then
s := ''
else
s := '+ ';
Hint := Format('%0.3f', [b1]) + '*X ' + s + Format('%0.3f', [b0]);
x := nil;
y := nil;
end; |
|
#2
|
|||
|
|||
|
Ребят пож помогите, очень прошу вас! Ну кому не сложно, очень буду признателен! Покажите как сделать, желательно с исходниками!
|
|
#3
|
|||
|
|||
|
Никто не поможет?? Ну хотя бы подскажите как сделать, ну что не будь даже ((((
|
|
#4
|
|||
|
|||
|
Вот из старого архива выкопал.
Вроде рабочий код был, но сейчас не проверял. Но Вам же еще вроде бы и на график надо положить... Код:
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; |
|
#5
|
|||
|
|||
|
Спасибо, но мне это ничего не дало..код то я и сам написал + мне надо с графиком! Я то написал уже готовый код! Прошу реализовать в дельфи, с исходниками! А может у кого уже есть исходники готовые этой программы!
Последний раз редактировалось Lenovo, 17.12.2010 в 07:34. |
|
#6
|
|||
|
|||
|
а где описание TDoubleArray?
Цитата:
улыбнуло.В чем проблема? у вас есть готовая процедура, загрузите дельфю, вставьте процедуру, она же кстати у вас и должна вырисовывать график, судя по коду. |
|
#7
|
|||
|
|||
|
Цитата:
|