
16.12.2010, 20:24
|
Прохожий
|
|
Регистрация: 16.12.2010
Сообщения: 39
Репутация: -2254
|
|
Линейная регрессия
Здравствуйте, вот собственно код. Помогите пожалуйста его реализовать, кого не сильно затруднит может показать в 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;
|