Практикалық жұмыс №4
Тақырыбы: Сызықты теңдеулер жүйесін шешу. Гаусс әдісі.
Мақсаты: Сызықтық теңдеулер жүйесін Гаусс әдісі арқылы шешіп үйрену.
Кейде бас элементі барлық матрица бойынша таңдалынатын Гаусс әдісі де пайдаланылады. Мұнда жетекші элемент ретінде жүйе матрицасы элементтерінің ішіндегі модулі бойынша ең максимал элемент таңдалынады.
Мысалы:
теңдеулер жүйесін шешу үшін қолданылатын бас элементтер әдісінің схемасы төменде келтірілген:
mi
|
Белгісіздердің коэффициенттері
|
Босмүшелер
|
Қосынды ∑
|
х1
|
х2
|
х3
|
m1
-1
m3
|
a11
a21
a31
|
a12
a22
a32
|
a13
a23
a33
|
a14
a24
a34
|
a15
a25
a35
|
-1
m′3
|
a′11
a′31
|
a′12
a′32
|
|
a′14
a′34
|
a′15
a′35
|
|
|
a″32
|
|
a″34
|
a″35
|
|
х1
|
х2
|
х3
|
|
|
Берілген схемада│a23│= max│aij│, мұндағы i=1,2,3; j=1,2,3;
│a′11│= max│a′ij│, i=1,3; j=1,2.
Есептеулерді мына формулалар бойынша орындайды:
m1=-a13/a23, m3=-a33/a23;
a′1j=a1j+m1a2j (j=1,2,4,5); a′3j=a3j+m3a2j (j=1,2,4,5);
m′3=- a′31/a′11;
a″3j=a′3j+m′3a′1j (j=2,4,5);
Белгісіздерді келесі қатынастар бойынша анықтайды:
x2= a″34/ a″32;
x1=( a′14- a′12x2)/ a′11;
x3=(a24-a21x1-a22x2)/a237
Программасы:
Мысал:
Есеп №1
const nn=6;
type matr=array[1..nn,1..nn]of real;
vek=array[1..nn]of real;
vekint=array[1..nn]of integer;
var
a:matr;
n:integer;
b,x:vek;
p:vekint;
procedure first;
var i:integer;
begin
a[1,1]:=0.34;
a[1,2]:=0.71;
a[1,3]:=0.63;
a[2,1]:=0.71;
a[2,2]:=-0.65;
a[2,3]:=-0.18;
a[3,1]:=1.17;
a[3,2]:=-2.35;
a[3,3]:=0.75;
b[1]:=2.08;
b[2]:=0.17;
b[3]:=1.28;
n:=3;
for i:=1 to n do p[i]:=i;
end;
procedure vivod;
var i:integer;
begin
for i:=1 to n do writeln('x',i,'= ',x[i]:2:3)
end;
procedure gl(a:matr;b:vek;p:vekint;n1:integer);
var t,ki,kj,i,j,mi,mj:integer;
c:matr;
bb,m:vek;
tr:boolean;
pp:vekint;
begin
tr:=true;
for i:=1 to nn do begin
for j:=1 to nn do c[i,j]:=0;
bb[i]:=0;
m[i]:=0;
end;
if n1=1 then begin
t:=p[1];
x[t]:=b[1]/a[1,1];
end
else begin
mi:=1;mj:=1;
for i:=1 to n1 do
for j:=1 to n1 do
if a[mi,mj]
for i:=1 to n1 do m[i]:=0-a[i,mj]/a[mi,mj];
ki:=0;
for i:=1 to n1 do
if i<>mi then begin ki:=ki+1;
kj:=0;
bb[ki]:=b[i]+m[i]*b[mi];
for j:=1 to n1 do
if j<>mj then begin kj:=kj+1;
c[ki,kj]:=a[i,j]+m[i]*a[mi,j];
end;end;
t:=p[mj];
pp:=p;
for i:=mj to n1 do pp[i]:=p[i+1];
gl(c,bb,pp,n1-1);
x[t]:=b[mi];
for i:=1 to n1 do
if i<>mj then begin
x[t]:=x[t]-a[mi,i]*x[p[i]];
end;
x[t]:=x[t]/a[mi,mj];
end;
end;
BEGIN
first;
gl(a,b,p,n);
vivod;
readln;
END.
Достарыңызбен бөлісу: |