PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تابع رگرسیون داخل دلفی



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

arvindesign
07 / December / 2015, 11:42 PM
یعنی یک نفرم نبود یک توضیح کوتاه بده

meyti
08 / December / 2015, 12:51 AM
سلام
من از تابعی که گفتید سردر نمیارم . چیزی که تاپیک شما فهمیدم اینه دو تا عدد رو میخواهید بفرستید به یه تابع و جواب بگیرید .
حالا کی اینکار باید انجام بشه و نتیجه هم باید ذخیره بشه یا فقط برای نمایشه .
در مورد بدست آوردن اعداد . به دیبی گرید کاری نداشته باشید و از خود جدول واکشی کنید . هر دیبی گرید بالاخره به یه جدول وصله :


x:=table1[field1];
y:=table1[field2];

arvindesign
08 / December / 2015, 01:22 AM
یک عدد رو میخوام بفرستم در اون تابع
بعد با ایکس و وایهام ضرب بشه
ولی اینی ک شما نوشتین ک ارایه نیست ایکس باید به صورت ارایه باشه ایکس های من یک سری عدد هستن فقط یک عدد نیست

meyti
08 / December / 2015, 01:25 AM
مگه عدد های شما در بانک اطلاعاتی نیستند ؟ بترتیب همه رو فرخوانی کنید و در آرایه قرار بدید .

meyti
08 / December / 2015, 01:28 AM
شما مشکلت کجاست ؟ گرفتن اعداد از بانک اطلاعاتی ؟
فیلدهای بانک رو چند نمونه اینجا بزارید . اونایی که باهاش کار دارید ! بعد اعداد در یک سطر رو میخواهید .؟ یا در چند سطر مختلف هستند ؟ یعنی حتما باید با موس چند تا عدد از چند رکورد مختلف رو انتخاب کرد . لطفا کمی بیشتر توضیح بدین .

arvindesign
08 / December / 2015, 01:44 AM
بانک اطلاعاتی من مثلا به صورت زیره
sal car
50 0
40 -1
30 -2
20 -3
بعد من باید بیام اول مجموع این سال رو بدست بیارم ک میشه -6 بعد مجموع ماشین رو هم دربیارم ک مثلا میشه 140 بعد این -6 رو به توان دو برسونم ( در خودش ضرب کنم ) بعد دونه دونه مثلا 0در پنجاه -1 در 40 و -2 در سی ضرب بشه و مجموعش ک یک عدده رو به من بده امیدوارم درست توضیح داده باشم
تمام سال ها رو تو یک ارایه x بریزه تمام ماشین ها رو تو y بریزه بعد در هم ضرب کنه

meyti
08 / December / 2015, 09:46 AM
لطفا فایل بانک اطلاعاتی رو اینجا قرار بدین تا کمی قضیه روشن تر بشه .
من میخوام اینو بدونم که اعدادی که مورد نظر هستند در یک سطر از بانک قرار دارند ؟ چطوری ذخیره شدن ؟

تعداد اعداد متغیره هر بار ؟ یا یه تعداد مشخصه ؟ مثلا همیشه 4 تا عدد بررسی میشن ؟