arvindesign
05 / December / 2015, 11:26 AM
سلام من میخوام تابع رگرسیون رو داخل دلفی بنویسم
[VB]Unit stat;
interface
{$IFOPT N+}
Type Real=double;
{$ENDIF}
Type StatObject=Object
Procedure Clear;
Procedure Insert(x,y:real);
Function Cnt:Word;
Function SX:Real;
Function SX2:Real;
Function MX:Real;
Function SDX:Real;
Function SDXN:Real;
Function SY:Real;
Function SY2:Real;
Function MY:Real;
Function SDY:Real;
Function SDYN:Real;
Function LRA:Real;
Function LRB:Real;
Function COR:Real;
Private
sumx,sumy:real;
sumx2,sumy2:Real;
SumXY:Real;
n:word;
End;
Implementation
Procedure StatObject.Clear;
Begin
sumx:=0;
sumy:=0;
sumx2:=0;
sumy2:=0;
SumXY:=0;
n:=0;
End;
Procedure StatObject.insert(x,y:real);
Begin
sumx:=sumx+x;
sumy:=sumy+y;
sumx2:=sumx2+sqr(x);
sumy2:=sumy2+sqr(y);
SumXY:=sumXY+x*y;
inc(n);
End;
Function StatObject.Cnt; Begin cnt:=n; End;
Function StatObject.SX; Begin SX:=SumX; End;
Function StatObject.SX2; Begin SX2:=SumX2; End;
Function StatObject.SY; Begin SY:=SumY; End;
Function StatObject.SY2; Begin SY2:=SumY2; End;
Function StatObject.MX;
Begin
MX:=SumX/n
End;
Function StatObject.MY;
Begin
MY:=SumY/n
End;
Function StatObject.SDX;
Begin
SDX:=(SumX2-Sqr(sumx))/(n-1)
End;
Function StatObject.SDXN;
Begin
SDXN:=(SumX2-Sqr(sumx))/n
End;
Function StatObject.SDY;
Begin
SDY:=(SumY2-Sqr(sumy))/(n-1)
End;
Function StatObject.SDYN;
Begin
SDYN:=(Sumy2-Sqr(sumy))/n
End;
Function StatObject.Cor;
Begin
Cor:=(n*SumXY-Sumx*sumy)/Sqrt(((n*SumX2-sumx*sumx))*(n*sumy2-sumy*sumy))
End;
Function StatObject.LRA;
Begin
lra:=MY-LRB*MX;
End;
Function StatObject.LRB;
Begin
lrb:=(n*Sumxy-sumx*sumy)/(n*sumx2-sumx*sumx)
End;
end.
این کد تابع رگرسیون تو دلفی مشکل من اینکه الان باید x و y رو از درون دیبیگرید بخونه ک کدش مشابهشو با سرچ کردن پیدا کردم که کد جمع کنندس
function SUMSomething: Float;
var
i: Integer;
Sum: Currency;
begin
Sum := 0;
for i := 1 to DBGrid1.SelectedRows.Count do
begin
Table1.GotoBookMark
(Pointer(DBGrid1.SelectedRows.Items[i-1])) ;
{
The TDBGrid component keeps all the
selections as Bookmarks in a
TStringList, and all the Bookmarks
must be converted to a Pointer
(what they really are) before using it.
}
Sum := Sum +
Table1.FieldByName('AField').AsFloat;
end;
Result := Sum;
end;
سوالم اینه چطور اینارو باهم ادغام کنم وقتی کلیک کردم روی دکمم دیتا ها رو بخونه از دیتا بیس عملیات رگرسیون رو انجام بده و مقدار رو بهم برگردونه
یک راه دیگم داره من این تابع رو داخل اسکیوال با کوئری نوشتم حالا راهی باشه بتونم اون کوئری رو داخل برنامم بخونمش
create function gheimata(@z int)
returns float as
begin
declare @s1 float,@s2 float,@s3 float,
@s4 float,@s5 float,@a float,@b float,@j float,@n float
select @s1=SUM(x*y),@s2=SUM(x),@s3=SUM(y),@s4=SUM(x*x)
,@s5=(SUM(x)*SUM(x))from tbl1
set @n=(select COUNT(*) from tbl1)
set @b=((@n*@s1)-@s2*@s3)/((@n*@s4)-@s5)
set @a=((select AVG(y)from tbl1)-(select AVG(x)from tbl1)*@b)
set @j=(@a+(@b*@z))
return @j
end
اینم کوئری ممنون میشم پاسخ بدید <3
[VB]Unit stat;
interface
{$IFOPT N+}
Type Real=double;
{$ENDIF}
Type StatObject=Object
Procedure Clear;
Procedure Insert(x,y:real);
Function Cnt:Word;
Function SX:Real;
Function SX2:Real;
Function MX:Real;
Function SDX:Real;
Function SDXN:Real;
Function SY:Real;
Function SY2:Real;
Function MY:Real;
Function SDY:Real;
Function SDYN:Real;
Function LRA:Real;
Function LRB:Real;
Function COR:Real;
Private
sumx,sumy:real;
sumx2,sumy2:Real;
SumXY:Real;
n:word;
End;
Implementation
Procedure StatObject.Clear;
Begin
sumx:=0;
sumy:=0;
sumx2:=0;
sumy2:=0;
SumXY:=0;
n:=0;
End;
Procedure StatObject.insert(x,y:real);
Begin
sumx:=sumx+x;
sumy:=sumy+y;
sumx2:=sumx2+sqr(x);
sumy2:=sumy2+sqr(y);
SumXY:=sumXY+x*y;
inc(n);
End;
Function StatObject.Cnt; Begin cnt:=n; End;
Function StatObject.SX; Begin SX:=SumX; End;
Function StatObject.SX2; Begin SX2:=SumX2; End;
Function StatObject.SY; Begin SY:=SumY; End;
Function StatObject.SY2; Begin SY2:=SumY2; End;
Function StatObject.MX;
Begin
MX:=SumX/n
End;
Function StatObject.MY;
Begin
MY:=SumY/n
End;
Function StatObject.SDX;
Begin
SDX:=(SumX2-Sqr(sumx))/(n-1)
End;
Function StatObject.SDXN;
Begin
SDXN:=(SumX2-Sqr(sumx))/n
End;
Function StatObject.SDY;
Begin
SDY:=(SumY2-Sqr(sumy))/(n-1)
End;
Function StatObject.SDYN;
Begin
SDYN:=(Sumy2-Sqr(sumy))/n
End;
Function StatObject.Cor;
Begin
Cor:=(n*SumXY-Sumx*sumy)/Sqrt(((n*SumX2-sumx*sumx))*(n*sumy2-sumy*sumy))
End;
Function StatObject.LRA;
Begin
lra:=MY-LRB*MX;
End;
Function StatObject.LRB;
Begin
lrb:=(n*Sumxy-sumx*sumy)/(n*sumx2-sumx*sumx)
End;
end.
این کد تابع رگرسیون تو دلفی مشکل من اینکه الان باید x و y رو از درون دیبیگرید بخونه ک کدش مشابهشو با سرچ کردن پیدا کردم که کد جمع کنندس
function SUMSomething: Float;
var
i: Integer;
Sum: Currency;
begin
Sum := 0;
for i := 1 to DBGrid1.SelectedRows.Count do
begin
Table1.GotoBookMark
(Pointer(DBGrid1.SelectedRows.Items[i-1])) ;
{
The TDBGrid component keeps all the
selections as Bookmarks in a
TStringList, and all the Bookmarks
must be converted to a Pointer
(what they really are) before using it.
}
Sum := Sum +
Table1.FieldByName('AField').AsFloat;
end;
Result := Sum;
end;
سوالم اینه چطور اینارو باهم ادغام کنم وقتی کلیک کردم روی دکمم دیتا ها رو بخونه از دیتا بیس عملیات رگرسیون رو انجام بده و مقدار رو بهم برگردونه
یک راه دیگم داره من این تابع رو داخل اسکیوال با کوئری نوشتم حالا راهی باشه بتونم اون کوئری رو داخل برنامم بخونمش
create function gheimata(@z int)
returns float as
begin
declare @s1 float,@s2 float,@s3 float,
@s4 float,@s5 float,@a float,@b float,@j float,@n float
select @s1=SUM(x*y),@s2=SUM(x),@s3=SUM(y),@s4=SUM(x*x)
,@s5=(SUM(x)*SUM(x))from tbl1
set @n=(select COUNT(*) from tbl1)
set @b=((@n*@s1)-@s2*@s3)/((@n*@s4)-@s5)
set @a=((select AVG(y)from tbl1)-(select AVG(x)from tbl1)*@b)
set @j=(@a+(@b*@z))
return @j
end
اینم کوئری ممنون میشم پاسخ بدید <3