Tajriba natijalariga asoslanib regressiya tenglamasini tuzishning dasturiy ta’minoti




Download 0.54 Mb.
bet16/19
Sana13.06.2021
Hajmi0.54 Mb.
#14988
1   ...   11   12   13   14   15   16   17   18   19
2.3. Tajriba natijalariga asoslanib regressiya tenglamasini tuzishning dasturiy ta’minoti.

Ma’lumki, hozirgi paytda jarayonlarni kompyuter ekranida harakatli tarzda ko’rsatish uchun turli dasturiy muhitlar yaratilgan. Ana shunday muhitlardan biri bu DELPHI muhitidir. Biz ham tajriba natijalariga asoslanib regressiya tenglamasini tuzishning dasturini avval Paskal dasturlash tilida yaratib, so’ng DELPHI muhitiga o’tkazdik.



Bunda avvalambor ekranga Forma yaratib, unga kerakli komponentalarni tashlab, qulay holda joylashtiramiz. Avvalambor tajriba natijalarini ko’rsatish uchun formaga Stringgrid komponentasini tashlaymiz. Buning uchun Additional komponentalar palitrasidan foydalanamiz. Jadvalda 3 ta satr qoldiramiz, birinchi satr x lar uchun, ikkinchi satr tajriba natijalari bo’lgan y lar uchun, uchinchi satr esa nazariy hisoblangan qiymatlar uchun. Bu topilgan regressiya tenglamasi bo’yicha hisoblangan qiymatlar va tajriba natijalarini solishtirishga qulay.

2.3.1-chizma. Stringgrid komponentasini formaga tashlash.

Endi tajriba nuqtalari soni, hisoblangan korrelyatsiya qiymati kabilarni ekranda ko’rish uchun ikkita Label, ikkita Edit komponentalarini formaga tashlaymiz. Dasturni ishga tushirganda jadvalda dastlabki qiymatlar ko’rinib tursin uchun forma ekranida sichqoncha tugmasini bosib, hosil bo’lgan oynada quyidagi dastur qismini yozamiz:

procedure TForm1.FormCreate(Sender: TObject);

VAR I:INTEGER; begin

STRINGGRID1.Cells[0,0]:='X';STRINGGRID1.Cells[0,1]:='Y';

STRINGGRID1.Cells[0,2]:='Y(NAZ)';

FOR I:=1 TO 6 DO BEGIN

STRINGGRID1.Cells[I,0]:=INTTOSTR(I);X[I]:=I; END;

//y[1]:=1;y[2]:=3;y[3]:=6;y[4]:=8;y[5]:=11; Y[6]:=13;// y=ax+b

//y[1]:=1;y[2]:=4;y[3]:=9;y[4]:=16;y[5]:=25; Y[6]:=36; // y=ax^b //y[1]:=3;y[2]:=9;y[3]:=27;y[4]:=81;y[5]:=243; Y[6]:=729; // y=ab^x

//Y[1]:=2;Y[2]:=1.5; Y[3]:=1.33; Y[4]:=1.15; Y[5]:=1.2; Y[6]:=1.17; // y=a+b/x //Y[1]:=0.5;Y[2]:=0.33;Y[3]:=0.25;Y[4]:=0.2;Y[5]:=0.17;Y[6]:=0.14;// Y=1/(AX+B)//Y[1]:=0.5;Y[2]:=0.67;Y[3]:=0.75; [4]:=0.8; Y[5]:=0.83;Y[6]:=0.86; // Y=X/(AX+B) Y[1]:=1;Y[2]:=1.3; Y[3]:=1.48; Y[4]:=1.6; Y[5]:=1.7;Y[6]:=1.78; // Y=A*LOG(X)+B

//y[1]:=1;y[2]:=3;y[3]:=10;y[4]:=15;y[5]:=23; Y[6]:=29;

FOR I:=1 TO 6 DO STRINGGRID1.Cells[I,1]:=FLOATTOSTR(Y[I]);



Agar shu holda dasturni ishga tushirsak, jadvalda boshlang’ich ma’lumotlar namoyon bo’ladi:

2.3.2-chizma. Jadvalda boshlang’ich qiymatlar chiqarilgan hol.

Dasturdan foydalanuvchi bu boshlang’ich qiymatlarni o’zining ma’lumotlari bilan almashtirishi mumkin. Bu imkoniyatni yaratish uchun Stringgrid properties – xossalar bo’limidagi Options menusidan Goediting almashtirgichini Falsedan Truega almashtiramiz. Ekrandagi o’zgartirishlarni massivga o’zlashtirib olish uchun formaga Button1 komponentasini tashlab, uni “Ekrandan ma’lumotlarni o’zlashtirish” deb nomlaymiz va unga quyidagi dastur qismini yozamiz:

rocedure TForm1.Button1Click(Sender: TObject);

VAR J:INTEGER;SUM:REAL;

Begin n:=strtoint(edit2.Text); FOR J:=1 TO n DO begin X[J]:=J;

Y[J]:=STRTOFLOAT(STRINGGRID1.Cells[J,1]); END;

Bunda tajriba natijalari soni va tajriba natijalarining o’zi jadvaldagi kataklardan massivga o’zlashtiriladi.

Endi ikki o`zgaruvchi o`rtasidagi bog’lanish zichligining umumlashtirilgan bahosi bo’lgan korrelyatsiya koeffisientini aniqlashga o’tamiz. Korrelyasiya koeffisientini aniqlash va uning ko’rinishi 1-bobda keltirilgan va uning ko’rinishi 1.3.9-formulada berilgan edi. Ana shu formula orqali korrelyasiya koeffisientini Stringgrid komponentida berilgan tajriba natijalaridan foydalanib hisoblash dasturini tuzamiz.

Buning uchun Formaga navbatdagi Button tugmasini tashlab, uni “Korrelyasiya koeffisientini hisoblash” deb nomlaymiz. Dasturda hisoblanadigankorrelyasiya koeffisientini ko’rsatish uchun ekranga Edit komponentasini tashlaymiz va uni yuqorisiga Label komponentasini tashlab, “Koorelyasiya koeffisienti” deb nomlaymiz. Button komponentasida sichqonchani chiqillatib, quyidagi dastur qismini yozamiz:

procedure TForm1.Button2Click(Sender: TObject);

VAR i:integer; xurta,yurta,cyrat,maxraj,maxraj1,maxraj2,k:real;

Begin xurta:=0;yurta:=0;

for i:=1 to n do begin xurta:=xurta+X[i]; yurta:=yurta+y[i]; end;

xurta:=xurta/n;yurta:=yurta/n; cyrat:=0; maxraj:=0; maxraj1:=0;maxraj2:=0;

for i:=1 to n do begin

cyrat:=cyrat+(X[i]-xurta)*(y[i]-yurta);

maxraj1:=maxraj1+(X[i]-xurta)*(X[i]-xurta);

maxraj2:=maxraj2+(y[i]-yurta)*(y[i]-yurta);end;

maxraj:=sqrt(maxraj1*maxraj2); k:=cyrat/maxraj;

EDIT1.Text:=FLOATTOSTRF(K,FFFIXED,5,3);

Bu yerda 1.3.9 – formula boyicha korrelyasiya koeffisientini aniqlash operatorlari keltirilgan. Korrelyasiya koeffisienti hisoblangandan keyin uning sifatini aniqlash uchun quyidagi dastur qismi yoziladi:

if K=0 then begin s0:='x va y o''rtasida chiziqli bog''liqlik yo''q';

label4.caption:=s0; goto 10; end;

if K<0 then s2:='x va y o''rtasida chiziqli bog''liqlik teskari';

if K>0 then s2:='x va y o''rtasida chiziqli bog''liqlik to''g''ri';

if abs(K)>=0.5 then s3:='x va y o''rtasida chiziqli bog''liqlik kuchli';

if abs(K)<0.5 then s3:='x va y o''rtasida chiziqli bog''liqlik kuchsiz';

label4.Caption:=s2; label5.Caption:=s3;

Ushbu dastur qismi bajarilgandan keyin suhbu tajriba natijalari bo’yicha regressiya tenglamasini tuzish maqsadga muvofiq yoki muvofiq emasligi haqida xulosa chiqariladi.

Agar yuqoridagi dastur qismi bajarilganda korrelyasiya koeffisienti 0,5 dan katta bo’lsa, keying qadamga o’tsa bo’ladi. Keyingi qadam regressiya tenglamasini ko’rinishini aniqlash bo’lib hisoblanadi. Regressiya tenglamasini aniqlash uchun oldingi paragrafda keltirilgan matematik modeldan foydalaniladi. Ana shu holda tuzilgan dastur quyidagi ko’rinishga ega:

Xarif:=(x[1]+x[n])/2; Xgeo:=x[1]*x[n]; Xgeo:=sqrt(Xgeo);

Xgar:=2*x[1]*x[n]/(x[1]+x[n]); Yarif:=(y[1]+y[n])/2; Ygeo:=y[1]*y[n];

Ygeo:=sqrt(Ygeo); Ygar:=2*y[1]*y[n]/(y[1]+y[n]);

for i:=1 to n do begin

if Xarif=x[i] then begin KARIF:=1; yayul:=y[i];N3:=I; end;

if Xgeo=x[i] then begin KGEO:=1; ygoyul:=y[i]; N1:=I; end;

if Xgar=x[i] then begin KGAR:=1; ygayul:=y[i]; N2:=I; end;end;

IF KARIF<>1 THEN BEGIN // UYQORIDA N3 QIYMAT OLMADI

for i:=2 to n do begin if (Xarif>x[i-1]) and (Xarif

Yayul:=y[n3-1]+((y[n3]-y[n3-1])/(x[n3]-x[n3-1]))*(Xarif-x[n3-1]); END;

IF KGEO<>1 THEN BEGIN

for i:=2 to n do begin if (Xgeo>x[i-1]) and (Xgeo

Ygoyul:=y[n1-1]+((y[n1]-y[n1-1])/(x[n1]-x[n1-1]))*(Xgeo-x[n1-1]); END;

IF KGAR<>1 THEN BEGIN

for i:=2 to n do if (Xgar>x[i-1]) and (Xgar

Ygayul:=y[n2-1]+((y[n2]-y[n2-1])/(x[n2]-x[n2-1]))*(Xgar-x[n2-1]);END;

p[1]:=abs(Yayul-Yarif);p[2]:=abs(Ygoyul-Ygeo);p[3]:=abs(Yayul-Ygeo);

p[4]:=abs(Ygayul-Yarif);p[5]:=abs(Yayul-Ygar);p[6]:=abs(Ygayul-Ygar);

p[7]:=abs(Ygoyul-Yarif);min:=p[1];for i:=1 to 7 do begin

if min>=p[i] then begin min:=p[i]; q:=i;end;end;

Bu dastur qismi bajarilganda ayirmalardan 7 ta elementdan iborat massiv hosil qilingan. Endi ana shu elementlar ichidan eng kichigini topamiz. Buning uchun massiv elementlaridan eng kichigini aniqlash algoritmidan foydalanamiz.

Regressiya tenglamasini aniqlashning ikkinchi yo’li bu har bir tenglama variantini olib, berilgan tajriba natijalari asosida eng kichik kvadratlar usulida a va b koeffisientlarni topishdir. Bu aniqlangan regressiya tenglamasi yordamida uning qiymatlari bilan tajriba nuqtalari orasidagi masofalar yig’indilari topiladi. Bu ish barcha ettita tenglama ko’rinishi uchun bajariladi. So’ng ana shu qiymatlar ichidan eng kichigi topiladi. Ana shu kichik songa to’g’ri keladigan tenglama biz izlagan tenglama bo’ladi.

Misol uchun quyidagi tajriba natijalarini kiritilgan holni ko’raylik:



2.3.3-chizma. Tajriba natijalari kiritilgan hol.



Ushbu qiymatlar uchun hisoblangan korrelyasiya koeffisienti quyidagi ko’rinishga ega:




2.3.4-chizma. Hisoblangan korrelyasiya koeffisienti va aniqlangan tenglama ko’rinishi.

Ana shu ettita tenglamalar koeffisientlarini massivga yig’ish va nazariy qiymatlarni hisoblash dastur qismi quyidagi ko’rinishga ega:

CASE Q OF

1: BEGIN KOEFA:=AKOEF[1]; KOEFB:=BKOEF[1];

for i:=1 to n do begin z[i]:=KOEFA*X[i]+KOEFB;

STRINGGRID1.Cells[I,2]:=FLOATTOSTRF(Z[I],FFFIXED,5,2);end; END;

2: BEGIN KOEFA:=AKOEF[2]; KOEFB:=BKOEF[2];

FOR I:=1 TO N DO BEGIN z[i]:=KOEFA*EXP(KOEFB*LN(X[I]));

STRINGGRID1.Cells[I,2]:=FLOATTOSTRF(Z[I],FFFIXED,5,2); END; END;

3: BEGIN KOEFA:=AKOEF[3]; KOEFB:=BKOEF[3];

for i:=1 to n do begin z[i]:=KOEFA*EXP(X[I]*LN(KOEFB));

STRINGGRID1.Cells[I,2]:=FLOATTOSTRF(Z[I],FFFIXED,5,2); END; END;

4: BEGIN KOEFA:=AKOEF[4]; KOEFB:=BKOEF[4];

for i:=1 to n do begin z[i]:=KOEFA+KOEFB/X[I];

STRINGGRID1.Cells[I,2]:=FLOATTOSTRF(Z[I],FFFIXED,5,2); END;END;

5: BEGIN KOEFA:=AKOEF[5]; KOEFB:=BKOEF[5];

for i:=1 to n do begin z[i]:=1/(KOEFA*X[i]+KOEFB);

STRINGGRID1.Cells[I,2]:=FLOATTOSTRF(Z[I],FFFIXED,5,2);END; END;

6: BEGIN KOEFA:=AKOEF[6]; KOEFB:=BKOEF[6];

for i:=1 to n do begin z[i]:=X[I]/(KOEFA*X[I]+KOEFB);

STRINGGRID1.Cells[I,2]:=FLOATTOSTRF(Z[I],FFFIXED,5,2); END; END;

7: BEGIN KOEFA:=AKOEF[7]; KOEFB:=BKOEF[7];

for i:=1 to n do begin z[i]:=KOEFA*ln(X[I])/ln(10)+KOEFB;

STRINGGRID1.Cells[I,2]:=FLOATTOSTRF(Z[I],FFFIXED,5,2);END; END;

Ana shu dastur qismi bajarilgandan so’ng aniqlangan regressiya tenglamasi orqali hisoblangan nazariy qiymatlar Stringgrid jadvaliga yoziladi:



2.3.5-chizma. Tajriba nuqtalari bilan nazariy qiymatlarni solishtirish.



Endi topilgan regressiya tenglamasi yordamida grafik chizishni bajaramiz. Buning uchun Delphining ekranda chiziq, nuqtalarni chiqarish imkoniyatlaridan foydalanamiz.

Endi koordinata o’qlari va ularga masshtab qiymatlarini ekranga beramiz:



Download 0.54 Mb.
1   ...   11   12   13   14   15   16   17   18   19




Download 0.54 Mb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Tajriba natijalariga asoslanib regressiya tenglamasini tuzishning dasturiy ta’minoti

Download 0.54 Mb.