Documente Academic
Documente Profesional
Documente Cultură
liniare
Metoda Gauss
Exemplu
Fie dat sistemul de ecuaii liniare:
1 2
1 2
2 3 7
4 5 13
x x
x x
+ =
+ =
2
1 2 1 1
7 3
2 3 7 2
2
x
x x x x
+ = = =
Acum putem determina valoarea variabilei x
2
din a doua ecuaie
a sistemului:
2 2
1 1. x x = =
Urmtorul pas este determinarea valorii x
1
din prima ecuaie
(folosind valoarea deja calculat a variabilei x
2
):
Algoritmul general:
(pasul direct)
Excludem x
1
din toate ecuaiile, ncepnd cu a doua
Excludem x
2
din toate ecuaiile, ncepnd cu a treia
............
Excludem x
i
din toate ecuaiile, ncepnd cu (i+1)
............
Excludem x
n-1
din ecuaia cu indicele n
Algoritmul general:
(pasul invers)
Determinm x
n
din ecuaia cu indicele n
Determinm x
n-1
din ecuaia cu indicele n-1
........
Determinm x
i
din ecuaia cu indicele i
........
Determinm x
1
din ecuaia cu indicele 1
Avnd sistemul:
1,1 1 1,2 2 1, 1
2,1 1 2,2 2 2, 2
,1 1 ,2 2 2,
,1 1 ,2 2 ,
...
n n
n n
i i n n i
n n n n n n
a x a x a x b
a x a x a x b
a x a x a x b
a x a x a x b
+ + + =
+ + + =
+ + + =
+ + + =
+ + + =
+ + =
+ + =
+ + =
+ + =
+ + =
Dup transformrile
pasului direct avem:
* * * *
1,1 1 1,2 2 1, 1
* * *
2,2 2 2, 2
* * *
, ,
* *
,
...
...
...
...
...
n n
n n
i i i i n n i
n n n n
a x a x a x b
a x a x b
a x a x b
a x b
+ + + =
+ + =
+ + =
Urmeaz determinarea
soluiilor x
n
, x
n-1
, ... x
1
:
*
*
,
* *
1 1,
1
*
1, 1
* *
1
*
...
n
n
n n
n n n n
n
n n
n
i ij j
j i
i
ii
b
x
a
b a x
x
a
b a x
x
a
= +
=
=
Pentru a realiza aceasta vom utiliza
algoritmul:
Din ecuaia cu indicele (n) determinm x
n
Plasm valoarea calculat x
n
n ecuaia (n-1) i determinm x
n-1
...
n ecuaia (i) plam valorile x
n
, x
n-1
, ... , x
i+1
i determinm x
i
...
n ecuaia(1) plam valorile x
n
, x
n-1
, ... , x
2
i determinm x
1
Structuri de date:
1. Un tablou bidimensional A[n,n+1] pentru coeficienii i
termenii liberi ai sistemului. Linia i a tabloului va conine
coeficienii ecuaiei cu indicele i pe primele n coloane i
termenul liber al ecuaiei n coloana n+1
2. Tabloul unidimensional X[n] pentru stocarea soluiilor
sistemului. Elementul X[i] al tabloului va stoca componenta
x
i
a soluiei .
Exemplu de program:
program sys_equ;
const max = 50;
type mat = array[1..max, 1..max*1] of real;
Sol = array[1..max] of real;
var a: mat;
x: Sol;
n, i, j: integer;
procedure exclude(var AA:mat;i,j:integer);
var k: integer;
r: real;
begin
r:=-AA[j,i]/AA[i,i];
for k:=i to n+1 do
AA[j,k]:=AA[j,k]+AA[i,k]*r;
end;
function find(AA:mat;i:integer):integer;
var k:integer;
begin
find:=i;
for k:=i+1 to n do
if AA[k,i]<>0 then find:=k;
end;
procedure change(var AA:mat;i,j:integer);
var r:real;
k:integer;
begin
for k:=1 to n do
begin
r:=a[i,k];
a[i,k]:=a[j,k];
a[j,k]:=r;
end;
end;
procedure transform(var AA:mat);
var i,j,l:integer;
begin
for i:=1 to n-1 do
begin
if AA[i,i]= 0 then
begin
l:=find(AA,i);
if l<>i then change(AA,i,l)
else
begin
write('Not unique
solution');
readln;
halt;
end;
end;
for j:=i+1 to n do exclude(AA,i,j);
end;
end;
procedure readdata(var AA:mat; var n:integer);
var i,j : integer;
f : text;
begin
assign(f, 'gauss.in'); reset(f); readln(f,n);
for i:=1 to n do
for j:=1 to n+1 do
read(f, AA[i,j]);
close(f);
end;
procedure outputsol(X:sol);
var i: integer;
begin
for i:=1 to n do writeln('x[',i,']=',X[i]:0:3);
readln;
end;
procedure calculate(AA:mat; var X:sol);
var s : real;
i,j : integer;
begin
for i:=n downto 1 do
begin
s:=0;
for j:=i+1 to n do s:=s+AA[i,j]*x[j];
x[i]:=(AA[i,n+1]-s)/AA[i,i];
end;
end;
begin
readdata(A,n);
transform(A);
calculate(A,X);
outputsol(X);
end.