Documente Academic
Documente Profesional
Documente Cultură
6. REZOLVAREA SISTEMELOR
DE ECUAŢII LINIARE
6.1. INTRODUCERE
Rezolvarea sistemelor de ecuaţii liniare este una dintre cele mai frecvente
aplicaţii în calculul numeric. Metodele de rezolvare a acestor sisteme se pot
grupa în două categorii, şi anume: metode exacte şi metode iterative.
Metodele exacte se utilizează, de regulă, în cazul sistemelor cu număr mic de
ecuaţii, deoarece soluţia este afectată de erorile de rotunjire, erori ce se propagă
de la o operaţie la alta.
În cazul sistemelor cu număr mare de ecuaţii se folosesc metodele iterative,
cu ajutorul cărora se poate controla eroarea soluţiei obţinute faţă de soluţia
exactă.
Să considerăm n ecuaţii liniare, dependente de n variabile. Aceste n ecuaţii
formează un sistem de n ecuaţii liniare. Un sistem de n valori, corespunzătoare
celor n variabile, este o soluţie a acestui sistem de ecuaţii, dacă înlocuind
variabilele cu aceste valori, toate cele n ecuaţii sunt satisfăcute simultan.
Până la rezolvarea propriu-zisă a unui sistem de ecuaţii liniare, este bine să
se facă un studiu privind existenţă şi unicitatea soluţiei. De altfel, nu are sens să
se caute o soluţie a sistemului de ecuaţii liniare dacă aceasta nu există.
În acest sens, în cazul sistemelor de ecuaţii liniare pot să apară mai multe
situaţii, şi anume:
a) Sistemul are soluţie unică.
Fie sistemul de ecuaţii liniare
2 x 3 y 6;
3 x 2 y 6,
(6.1.1)
a cărui reprezentare geometrică este dată în figura 6.1.1. Cele două drepte, ale
sistemului de ecuaţii liniare (6.1.1), se intersectează în punctul A, punct ale cărui
coordonate reprezintă soluţia sistemului.
b) Sistemul nu are soluţie.
Fie sistemul de ecuaţii liniare
x y 2;
x y 3.5,
(6.1.2)
a cărui reprezentare geometrică este prezentată în figura 6.1.2. Cele două drepte
102
ale sistemului de ecuaţii liniare (6.1.2) sunt paralele, astfel că sistemul nu are
soluţie.
y y
x y2
3
3
2
2 2x 3y 6 3 x 2 y 6 x y 3 .5
1
1
A
0 1 2 3 4 5 x
1
0 1 2 3 4 5 x
1 2
2 3
3
0 1 2 3 4 5 x 0 1 2 3 4 5 x
1 1
2 2
3 3
(6.1.3)
a cărui reprezentare geometrică este prezentată în figura 6.1.3. Sistemul (6.1.3)
are, de fapt, o sigură ecuaţie scrisă sub două forme. Orice punct de pe una din
drepte o verifică şi pe cealaltă, de unde rezultă că sistemul are o infinitate de
103
soluţii.
Sistemele de ecuaţii (6.1.2) şi (6.1.3) se numesc sisteme singulare. În cazul
unui sistem de ecuaţii liniare de mari dimensiuni, singularitatea se determină
prin calculul determinantului sistemului. Dacă determinantul este egal cu zero,
atunci sistemul este singular.
d) Sistemul este slab convergent.
Fie sistemul de ecuaţii liniare
3 x 2 y 6;
3.1x 1.9 y 5.89, (6.1.4)
a cărui reprezentare geometrică este prezentată în figura 6.1.4. Cele două drepte
ale sistemului liniar (6.1.4) au pantele foarte apropiate, ceea ce conduce la o
slabă condiţionare a sistemului.
a 11 x 1 a1 2 x 2 .
a x a x
2 1 1 22 2
. . . . . . . . . . . .
a x a i x .
i1 1 2 2
. . . . . . . . . . . .
a
n 1 x 1 a n 2 x 2
(6.2.1)
Matriceal sistemul poate fi scris sub forma:
A X b, (6.2.2)
unde:
a11 a12 a1n
a a 22 a2n
A 21 ; X x1 x2 xn
T
; b b1 b2 bn
T
a n1 an 2 a nn
(6.2.3)
Dacă det A 0 , atunci matricea A admite o inversă A 1 , iar soluţia
sistemului este de forma:
X A 1 b (6.2.4)
Sistemul are o soluţie unică pentru orice vector b . Dacă matricea A este
singulară, sistemul va avea soluţie numai pentru anumite valori speciale ale
vectorului b şi o astfel de soluţie nu este unică.
104
Exemplu de calcul
Fie sistemul de ecuaţii liniare
5 x1 x2 3 x3 9;
x1 7 x2 2 x3 10;
3 x1 2 x2 8 x3 13.
Rezolvare
Pentru rezolvarea sistemului de ecuaţii dat, se foloseşte funcţia MATLAB
inv.m.
Programul principal de calcul este prezentat în tabelul 6.2.1.
Tabelul 6.2.1
% Program pentru rezolvarea unui sistem de ecuatii liniare
% cu ajutorul functiei inv.m
clear;
n = 3;
a = zeros(3,3);b = zeros(3,1);
a(1,1) = 5; a(1,2) = 1; a(1,3) = 3;
a(2,1) = 1; a(2,2) = 7; a(2,3) = 2;
a(3,1) = 3; a(3,2) = 2; a(3,3) = 8;
b(1) = 9; b(2) = 10; b(3) = 13;
X = inv(a)*b;
sol = [X(1) X(2) X(3)];
fprintf('\n');
fprintf('%s\n','Solutia finala:');
for i = 1 : n
fprintf('%s%i%s%8.4f\n',' X(',i,') = ',X(i));
end
%____________________________________________________________
Solutia finala:
X(1) = 1.0000
X(2) = 1.0000
X(3) = 1.0000
unde:
X(1) = x1 , X(2) = x 2 , X(3) = x3 .
a 1 1 x1 a12 x 2
(1)
0 a 2 2 x 2
. . . . . . . . . . .
( 1)
0 a i 2 x 2
. . . . . . . . . . .
(1)
0 a n 2 x 2
(6.2.7)
- etapa 2: se consideră un nou sistem format din (n-1) ecuaţii în
(1)
necunoscutele xi , i 2, n , şi se presupune a 22 0 . Folosind algoritmul anterior
se elimină necunoscuta x 2 ;
- etapa k: se presupune că cel puţin unul din coeficienţii
( k 1) ( k 1)
a kk a k( k
, 1) ( k 1)
1, k , ... , a nk este diferit de zero (dacă a kk 0 , atunci se
reorganizează ecuaţiile sistemului astfel încât coeficientul lui x k , de pe linia k,
să fie diferit de zero). Se definesc multiplicatorii:
aik( k 1)
mi ( k 1) , i k 1, n . (6.2.8)
a kk
(6.2.10)
După (n-1) etape sistemul devine:
106
a 1 1 x1 a 1 2 x 2 a1 3 x3
(
a 21 )
x 2 (
a 21 )
x3
2 3
( 2 )
a 3 3 x 3
. . . . . . . . . . . . . . . .
(6.2.11)
iar determinarea necunoscutelor începe cu x n şi se termină cu x1 , după cum
urmează:
n
bn( n 1) bn( n1 2) a n( n1,2n) x n b (j j 1) a (jij 1) xi
xn ( n 1) , x n 1 ;…; x i j 1 ; …;
a nn a n( n1,2n)1 j
a (jjj 1)
n
b1 a1i xi
x1 i2 . (6.2.12)
a11
% Parametrii de intrare:
% a - tablou cu dimensiunea n^2, care contine coeficientii
% necunoscutelor;
% b - tablou cu dimensiunea n, care contine termenii liberi;
% n - numarul de ecuatii, egal cu cel al necunoscutelor;
% eps - limita sub care impartitorul unei operatii de impartire este
% considerat zero;
%
% Parametrii de iesire:
% X - solutia sistemului de ecuatii liniare;
% kod - cod de eroare, care rezulta cu valoarea zero daca rezolvarea
% este normala si cu valoarea unu daca sistemul este singular.
%________________________________________________________________________
function [X,kod] = resol(a,b,n,eps)
kod = 0;
jj = -n;
for j = 1 : n
jy = j+1;
jj = jj+n+1;
emax = 0;
it = jj-j;
for i = j : n
ij = it+i;
if abs(emax) <= abs(a(ij))
emax = a(ij);
ind = i;
else
end
end
if abs(emax) <= eps
kod = 1;
error(' emax < eps');
else
ii = j+n*(j-2);
it = ind-j;
107
for k = j : n
ii = ii+n;
ij = ii+it;
r = a(ii);
a(ii) = a(ij);
a(ij) = r;
a(ii) = a(ii)/emax;
end
r = b(ind);
b(ind) = b(j);
b(j) = r/emax;
if j == n
n1 = n-1;
it = n*n;
for j = 1 : n1
ia = it-j;
ib = n-j;
ic = n;
for k = 1 : j
b(ib) = b(ib)-a(ia)*b(ic);
ia = ia-n;
ic = ic-1;
end
end
else
i1 = n*(j-1);
for ik = jy : n
ikk = i1+ik;
it = j-ik;
for jk = jy : n
ikj = n*(jk-1)+ik;
jkk = ikj+it;
a(ikj) = a(ikj)-a(ikk)*a(jkk);
end
b(ik) = b(ik)-b(j)*a(ikk);
end
end
end
end
for i = 1 : n
X(i) = b(i);
end
end
%________________________________________________________
Exemplu de calcul
Fie mecanismul planetar din figura 6.2.1 [16].
108
75
G
4
5 L
3 C F
E H K 7
2' 2" 25
2 D 2"'
B
A 6
Se cunosc:
- numerele de dinţi ale roţilor dinţate din componenţa mecanismului planetar,
şi anume: z1 31; z 2 40 ; z 2 20 ; z 2 21 ; z 2 21 ; z3 91 ; z 4 20 ; z5 61 ;
z 7 21 ;
- viteza unghiulară a elementului 1 se consideră egală cu unitatea, adică:
1 1 [rad/s].
Se cer vitezele unghiulare absolute ale elementelor 2, 4, 5 şi 6, precum şi
viteza unghiulară relativă 75 .
Rezolvare
Pentru determinarea vitezelor unghiulare absolute 2 , 4 , 5 şi 6 se
aplica metoda lui Willis şi se obţine următorul sistem de ecuaţii liniare
6
( z1 z 2
z 6 ( z1 z 2
2 2
2
z 2 4 z 4 6
( z 2 z 4
4 z 4 5 z 5 6 ( z 5 z 4
adică:
2 0.51667 [rad/s];
4 0.84086 [rad/s];
5 0.37351 [rad/s];
6 0.14554 [rad/s].
Viteza unghiulară relativă 75 este dată de relaţia (se foloseşte metoda axei
instantanee [23] ): 75 25 z 2/ z 7 , unde: 25 2 5 0.890178 [rad/s].
Schema cinematica completă a mecanismului planetar este prezentată în
figura 6.2.2.
110
75
G
4
5 L
3C F
E
2' 2" H K 7 25
2 D 2"'
B
A 6
1
(6.2.16)
Determinarea elementelor matricelor L, T şi C se face uşor dacă se aşează
matricele sub forma:
111
a11 a12 a13 b1 l11 0 0 1 t12 t13 c1
a 21 a 22 a 23 b2 l 21 l 22 0 0 1 t 23 c 2 ,
a 31 a 32 a 33 b3 l 31 l 32 l 33 0 0 1 c3
de unde rezultă:
a) ai1 l i1 1 l i 2 0 li3 0 li1 , i 1,3 , (6.2.17)
adică, prima coloană a matricei L este identică cu prima coloană a matricei A;
b) a1 j l11 t1 j 0 t 2 j 0 t 3 j l11 t1 j , j 1,3 , (6.2.18)
adică, prima linie a matricei T este egală cu prima linie a matricei A împărţită cu
a11 ;
c) a 22 l 21 t12 l 22 1 l 22 a 22 l 21 t12
a 23 l 21 t13 l 22 t 23 t 23 (a 23 l 21 t13 ) / l 22 (6.2.19)
a 32 l31 t12 l32 1 l32 a32 l 31 t12
a 33 l31 t13 l32 t 23 l33 1 l33 a33 l31 t13 l32 t 23
b1 l11 c1 c1 b1 / l11
b2 l 21 c1 l 22 c 2 c 2 (b2 l 21 c1 ) / l 22 (6.2.20)
b3 l31 c1 l32 c 2 l33 c3 c3 (b3 l 31 c1 l 32 c 2 ) / l 33
(6.2.21)
începând cu ultima necunoscută şi terminând cu prima.
Formulele generale de calcul sunt:
j 1
l i1 a i1 , i 1, n ; l ij a ij l ir t rj , i j , i 2, n , j 2, n ; (6.2.22)
r 1
i 1
t1 j a1 j / a11 , t ij ( a ij l ir t rj ) / l ii , i j , i 2, n , j 2, n ; (6.2.23)
r 1
i 1
ci (bi lir cr ) / lii , i 1, n ; (6.2.24)
r 1
n
x n c n , xi ci t ir x r , i n 1, 1 . (6.2.25)
r i 1
Exemplu de calcul
Fie mecanismul planetar din figura 6.2.3.
114
5 G H
6
3 4 F 4 J
D E 2'
2
C
A,B 1 5
Se cunosc:
- numerele de dinţi ale roţilor dinţate, şi anume: z1 30 ; z 2 41 ; z 2 21 ;
z 3 91 ; z 4 20 ; z 5 61 ; z 6 20 ;
- viteza unghiulară a elementului 1 se consideră egală cu unitatea, adică:
1 1 [rad/s].
Se cer: vitezele unghiulare absolute ale elementelor 2, 4, 5 şi 6.
Rezolvare
Pentru determinarea vitezelor unghiulare absolute 2 , 4 , 5 şi 6 se
aplica metoda lui Willis şi se obţine următorul sistem de ecuaţii liniare
2 z 2 5 ( z1 z 2 )
4 z 4 5 ( z 3 z 4 )
4 ( z5 z 6 ) 5 z 5
2
z 2 4
( z 2 z 6 )
(6.3.1)
Soluţia la iteraţia (k 1) este de forma:
x ( k 1 ) ( k )
1 (b1 a12 x 2
( k 1 ) ( k )
x 2 (b2 a 21 x1
. . . . . . . . . . . . . . .
( k 1 ) ( k )
xi (b i a i1 x 1
. . . . . . . . . . . . . . .
( k 1 ) ( k )
x n
(bn a n1 x1
116
(6.3.2)
Dacă toate elementele de pe diagonala principală a matricei A sunt diferite
de zero, rezultă o metodă iterativă de forma:
n
xi( k 1) (bi aij x (jk ) ) / aii
j 1
j i
, i 1, n , k 0. (6.3.3)
Matriceal, sistemul (6.2.1) are forma:
A X b. (6.3.4)
Pentru stabilirea unei relaţii matriceale de determinare iterativă a soluţiei
sistemului (6.3.4), se descompune matricea A în trei matrice, şi anume:
A DTS, (6.3.5)
unde:
a11 0 0 ... 0 0 0 ... 0 0
0 a 22 0 ... 0 a 21 0 ... 0 0
D 0 0 a33 ... 0 ; T a 31 a 32 ... 0 0 ;
... ... ... ... ... ... ... ... ... ...
0 0 0 ... a nn a n1 an2 ... a n, n 1 0
% Parametrii de intrare:
% a - tablou cu dimensiunea n^2, care contine coeficientii
% necunoscutelor;
% b - tablou cu dimensiunea n, care contine termenii liberi;
% n - numarul de ecuatiilor, egal cu cel al necunoscutelor;
% eps - eroarea absoluta admisa pentru care solutia se considera
% suficient de exacta;
% iter - numarul de iteratii admis de catre utilizator;
%
% Parametrii de iesire:
% X - solutia sistemului de ecuatii liniare;
% kod - cod de eroare, care rezulta cu valoarea zero daca rezolvarea
% este normala si cu valoarea unu daca elementele de pe
% diagonala principala sunt egale cu zero.
%________________________________________________________________________
function [X,kod] = jacobi(a,b,n,eps,iter)
kod = 0;
for i = 1 : n
X(i) = 0.;
end
for k = 1 : iter
k1 = 0;
for i = 1 : n
X1(i) = b(i);
if abs(a(n*(i-1)+i)) < 1.e-15
kod = 1;
return;
end
for j = 1 : n
if (i < j) || (i > j)
X1(i) = X1(i)-a(n*(j-1)+i)*X(j);
end
end
X1(i) = X1(i)/a(n*(i-1)+i);
end
for i = 1 : n
if abs(X1(i)-X(i)) > eps
k1 = 1;
end
end
if k1 == 0
return;
end
for j = 1 : n
X(j) = X1(j);
end
fprintf('%s%i%s\n',' Iteratia(',k,')');
for j = 1 : n
fprintf('%s%i%s%10.6f\n',' X(',j,')=',X(j));
end
fprintf('\n')
end
error(' sistemul nu converge ');
return;
end
%______________________________________________________________________
118
Exemplu de calcul
Fie sistemul de ecuaţii liniare
7 x1 4 x 2 3 x3 7 x 4 x
4 x1 7 x 2 3 x3 2 x 4 3
3 x 1 2 x 2 8 x3 5 x 4
x1 3 x 2 4 x3 9 x 4 2 x
4 x 5 x 2 3 x3 3 x 4 7
1
(6.3.10)
Se cere să se determine soluţia sistemului, folosind metoda Jacobi. De
asemenea, se cere ca eroarea absolută dintre două aproximaţii succesive să fie
mai mică sau egală cu 10 6 , adică:
X ( k 1) X ( k ) 10 6 .
Rezolvare
Pentru rezolvarea sistemului de ecuaţii liniare de mai sus se foloseşte
procedura jacobi, prezentată în tabelul 6.3.1.
Programul principal de calcul este prezentat în tabelul 6.3.2.
Tabelul 6.3.2
% Program pentru rezolvarea unui sistem de ecuatii liniare
% cu ajutorul functiei jacobi
clear;
X = zeros(5); a = zeros(25);b = zeros(5);
fprintf('\n');
fprintf('%s\n','Solutia finala');
for i = 1 : n
fprintf('%s%i%s%10.5f\n',' X(',i,') = ',X(i));
end
%_______________________________________________________________
X(1) = 0.999999538
X(2) = 0.999999361
X(3) = 0.999999500
X(4) = 0.999998964
X(5) = 1.000000567,
adică:
x1 0.999999538;
x2 0.999999361;
x3 0.999999500;
x4 0.999998964;
x3 1.000000567.
x1 1;
x 2 1;
x3 1;
x 4 1;
x 5 1.
i 1 n
xi( k 1) (bi a ij x (jk 1) aij x (jk ) ) / aii , i 1, n , k 0. (6.3.11)
j 1 j i 1
120
Tabelul 6.3.3
% Program pentru rezolvarea unui sistem de ecuatii liniare, folosind
% metoda Gauss-Seidel
% Parametrii de intrare:
% a - tablou cu dimensiunea n^2, care contine coeficientii
% necunoscutelor;
% b - tablou cu dimensiunea n, care contine termenii liberi;
% n - numarul de ecuatiilor, egal cu cel al necunoscutelor;
% eps - eroarea absoluta admisa pentru care solutia se considera
% suficient de exacta;
% iter - numarul de iteratii admis de catre utilizator;
%
% Parametrii de iesire:
% X - solutia sistemului de ecuatii liniare;
% kod - cod de eroare, care rezulta cu valoarea zero daca rezolvarea
% este normala si cu valoarea unu daca elementele de pe
% diagonala principala sunt egale cu zero.
%________________________________________________________________________
Exemplu de calcul
Pentru a se observa superioritatea metodei Gauss-Seidel faţă de metoda
Jacobi, se va considera acelaşi sistem de ecuaţii (6.3.10). Folosind funcţia
gaseidel.m, se întocmeşte programul principal de calcul prezentat în tabelul
6.3.4.
Tabelul 6.3.4
% Program pentru rezolvarea unui sistem de ecuatii liniare
% cu ajutorul functiei gaseidel
clear;
X = zeros(5); a = zeros(25);b = zeros(5);
[X,kod] = gaseidel(a,b,n,eps,iter);
if kod > 0
fprintf('%s%i\n',' kod = ',kod);
return;
end
sol = [X(1) X(2) X(3) X(4) X(5)];
xlswrite('M-solutia.xls',sol);
fprintf('\n');
fprintf('%s\n','Solutia finala');
for i = 1 : n
122
fprintf('%s%i%s%15.9f\n',' X(',i,') = ',X(i));
end
%_____________________________________________________________
X(1) = 0.999999997
X(2) = 0.999999998
X(3) = 0.999999993
X(4) = 0.999999996
X(5) = 1.000000008.
Exemplu de calcul
(6.4.1)
Se cunosc:
- numerele de dinţi ale roţilor dinţate din componenţa mecanismului planetar,
şi anume: z1 31; z 2 40 ; z 2 20 ; z 2 21 ; z 2 21 ; z3 91 ; z 4 20 ; z5 61 ;
z 7 21 ;
- viteza unghiulară a elementului 1 se consideră egală cu unitatea, adică:
123
1 1 [rad/s].
Se cer vitezele unghiulare absolute ale elementelor 2, 4, 5 şi 6, precum şi
viteza unghiulară relativă 75 .
Rezolvare
Pentru rezolvarea sistemului de ecuaţii liniare (6.4.1) se foloseşte funcţia
MATLAB linsolve.m Programul principal de calcul este prezentat în tabelul
6.4.1.
Tabelul 6.4.1
% Program pentru rezolvarea unui sistem de ecuatii liniare
% cu ajutorul functiei "linsolve"
clear;
X = zeros(4); a = zeros(4,4);B = zeros(4);
n = 4;
Z1=31; Z2=40; Z2P=20; Z2PP=21; Z3=91; Z4=20; Z5=61; OM1=1;
A = [0 0 0 Z1*Z2P+Z2*Z3;
Z2 0 0 -Z1-Z2;
Z2PP Z4 0 -Z2PP-Z4;
0 Z4 -Z5 Z5-Z4];
B = [OM1*Z1*Z2P;
-OM1*Z1;
0;
0];
X = linsolve(A,B);
sol = [X(1) X(2) X(3) X(4)];
xlswrite('M-solutia.xls',sol);
fprintf('\n');
fprintf('%s\n','Solutia finala');
for i = 1 : n
fprintf('%s%i%s%8.5f\n',' X(',i,') = ',X(i));
end
%___________________________________________________________
Exemplu de calcul
Rezolvare
Pentru rezolvarea sistemului de ecuaţii s-a întocmit programul principal de
calcul din tabelul 6.4.2.
Tabelul 6.4.2
% Program pentru rezolvarea unui sistem de ecuatii liniare
% cu ajutorul factorizarii LU"
clear;
n = 4;
a = zeros(n,n); b = zeros(n,1); x = zeros(n,1);
Z1=31; Z2=40; Z2P=20; Z2PP=21; Z3=91; Z4=20; Z5=61; OM1=1;
[L,U] = lu(a);
y = L\b;
x = U\y;