Fayl unit2.pas modulidir _
birlik 2;
interfeys
const maxr = 20;
arys turi = realning [1..maxr] massivi;
ary2s = realning [1..maxr, 1..maxr] massivi;
gauss1 protsedurasi (a: ary2s; y: arys; var koef: arys; ncol: integer; var xatosi: mantiqiy);
gaussj protsedurasi (var b: ary2s; y: arys; var koef: arys; ncol: integer; var xatosi: mantiqiy);
amalga oshirish
{Chiziqli tenglamalar tizimini yechishning Gauss usuli}
{**************************************************** **** *********}
gauss1 protsedurasi (a: ary2s; y: arys; var koef: arys; ncol: integer; var xatosi: mantiqiy);
var b: ary2s;
w:arys;
i,j,i1,k,l,n:integer;
ushlab, yig‘indi, t, ab, katta: haqiqiy;
boshlash
xato:=false;
n:=ncol;
i:=1 uchun n qilish
boshlash
j:=1 uchun n qilish
b[i,j]:=a[i,j];
w[i]:=y[i]
oxiri;
i uchun:=1 dan n-1 gacha
boshlash
katta:=abs(b[i,i]);
l:=i;
i1:=i+1;
j:=i1 uchun n qilish
boshlash
ab:=abs(b[j,i]);
agar ab>katta bo'lsa
boshlash
katta:=ab;
l:=j
oxiri
oxiri;
agar big=0,0 bo'lsa, xato:= rost
boshqa
boshlash
agar l<>i bo'lsa
boshlash
j:=1 uchun n qilish
boshlash
ushlab turing:=b[l,j];
b[l,j]:=b[i,j];
b[i,j]:=ushlab turing
oxiri;
ushlab turing:=w[l];
w[l]:=w[i];
w[i]:=ushlab turing
oxiri;
j:=i1 uchun n qilish
boshlash
t:=b[j,i]/b[i,i];
uchun k:=i1 to n do
b[j,k]:=b[j,k]-t*b[i,k];
w[j]:=w[j]-t*w[i]
oxiri
oxiri
oxiri;
agar b[n,n]=0.0 bo'lsa, xato:=to'g'ri
boshqa
boshlash
koef[n]:=w[n]/b[n,n];
i:=n-1;
takrorlang
yig'indisi:=0,0;
j:=i+1 uchun n qilish
summa:=sum+b[i,j]*koef[j];
koef[i]:=(w[i]-sum)/b[i,i];
i:=i-1
i=0 ga qadar
oxiri
oxiri;
{**************************************************** ******** *********}
{Chiziqli tenglamalar tizimini Jordan-Gauss usulida yechish}
{**************************************************** ******** *********}
procedure gaussj(var b:ary2s; y: arys; var coef:arys; ncol:integer; var error: boolean);
var w:array[1..maxr,1..maxr] of real;
indeks:massiv [1..maxr,1..3] butun son;
i,j,k,l,nv,irow,icol,n,l1:butun son;
aniqlash, aylanma, ushlab turish, yig‘indi, t, ab, katta: real;
{+++++++++++++++++++++++++++++++++++++++++++}
protsedurani almashtirish(var a,b: real);
var hold:real;
boshlash
ushlab turing:=a;
a:=b;
b:=ushlab turing
oxiri;
{+++++++++++++++++++++++++++++++++++++++++++}
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
gausj2 protsedurasi;
var i,j,k,l,l1:integer;
{=================================================}
gausj3 protsedurasi;
var l:integer;
boshlash
agar irow<>icol keyin
boshlash
aniqlash:=-aniqlash;
uchun l:=1 to n do
almashtirish(b[irow,l],b[icol,l]);
agar nv>0 bo'lsa
l:=1 uchun nv qilish
almashtirish(w[irow,l],w[icol,l])
oxiri
oxiri;
{=================================================}
boshlash
xato:=false;
nv:=1;
n:=ncol;
i:=1 uchun n qilish
boshlash
w[i,1]:=y[i];
indeks[i,3]:=0
oxiri;
aniqlash:=1,0;
i:=1 uchun n qilish
boshlash
katta:=0,0;
j:=1 uchun n qilish
boshlash
agar indeks[j,3]<>1 bo'lsa
boshlash
uchun k:=1 dan n gacha
boshlash
agar indeks[k,3]>1 bo'lsa
boshlash
xato:=true;
Chiqish;
oxiri;
agar indeks[k,3]<1 bo'lsa
agar abs(b[j,k])>katta bo'lsa
boshlash
irow:=j;
icol:=k;
katta:=abs(b[j,k])
oxiri
oxiri
oxiri
oxiri;
indeks[icol,3]:=index[icol,3]+1;
indeks[i,1]:=irow;
indeks[i,2]:=icol;
gausj3;
pivot:=b[icol,icol];
determ:=determ*pivot;
b[icol,icol]:=1,0;
uchun l:=1 to n do
b[icol,l]:=b[icol,l]/pivot;
agar nv>0 bo'lsa
l:=1 uchun nv qilish
w[icol,l]:=w[icol,l]/pivot;
l1:=1 uchun n qilish
boshlash
agar l1<>icol bo'lsa
boshlash
t:=b[l1,icol];
b[l1,icol]:=0,0;
uchun l:=1 to n do
b[l1,l]:=b[l1,l]-b[icol,l]*t;
agar nv>0 bo'lsa
l:=1 uchun nv qilish
w[l1,l]:=w[l1,l]-w[icol,l]*t;
oxiri
oxiri
oxiri;
oxiri;
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
boshlash
gausj2;
xato bo'lsa, chiqing;
i:=1 uchun n qilish
boshlash
l:=n-i+1;
agar indeks[l,1]<>indeks[l,2] bo'lsa
boshlash
irow:=indeks[l,1];
icol:=indeks[l,2];
uchun k:=1 dan n gacha
almashtirish(b[k,irow],b[k,icol])
oxiri
oxiri;
uchun k:=1 dan n gacha
agar indeks[k,3]<>1 bo'lsa
boshlash
xato:=true;
Chiqish;
oxiri;
i:=1 uchun n qilish
koef[i]:=w[i,1];
oxiri;
{**************************************************** ******** *********}
oxiri.
1>
Do'stlaringiz bilan baham: |