Sunteți pe pagina 1din 25

101

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 y2
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

Fig. 6.1.1. Reprezentarea geometrică Fig. 6.1.2. Reprezentarea geometrică


a unui sistem de două ecuaţii liniare a unui sistem de două ecuaţii liniare
care are soluţie unică; cele două drepte care nu are soluţie; cele două drepte
se intersectează în punctul A. sunt paralele.

y y 3.1x  1.9 y  5.89


3 3x  3 y  9 3
2 2 3x  2 y  6
1 x y 3 1

0 1 2 3 4 5 x 0 1 2 3 4 5 x
1 1
2 2
3 3

Fig. 6.1.3. Reprezentarea geometrică Fig. 6.1.4. Reprezentarea geometrică


a unui sistem de două ecuaţii liniare, a unui sistem de două ecuaţii liniare
care are un număr infinit de soluţii; slab convergent; cele două drepte au
cele două drepte sunt identice. pantele apropiate.

c) Sistemul are o infinitate de soluţii.


Fie sistemul de ecuaţii liniare
3 x  3 y  9;

 x  y  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.

6.2. METODE EXACTE PENTRU REZOLVAREA


SISTEMELOR DE ECUAŢII LINIARE

6.2.1. Metoda matricei inverse

Fie sistemul de ecuaţii liniare

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.

Se cere să se determine soluţia sistemului de ecuaţii liniare dat, folosind


metoda matricei inverse.

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
%____________________________________________________________

După rularea programului de calcul din tabelul 6.2.1, rezultă soluţia


sistemului de ecuaţii liniare, şi anume:

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 .

6.2.2. Metoda eliminării gaussiene (metoda lui Gauss)


Fie sistemul de ecuaţii liniare (6.2.1)
Metoda eliminării a lui Gauss constă în eliminarea necunoscutelor situate
sub diagonala principală, după care se determină soluţia sistemului începând cu
105
x n şi terminând cu x1 .
Obţinerea sistemului triunghiular superior se face în (n-1) etape, după cum
urmează:
- etapa 1: presupunem că cel puţin unul din coeficienţii a11 , a 21 , ... , a n1 este
diferit de zero (dacă a11  0 , atunci se reorganizează ecuaţiile sistemului astfel
încât coeficientul lui x1 , de pe prima linie, să fie diferit de zero). După
reorganizarea ecuaţiilor (dacă este cazul), se definesc (n-1) multiplicatori de
forma:
ai1
mi  , i  2, n . (6.2.5)
a11

Prin înmulţirea liniei 1 cu multiplicatorul mi şi scăderea elementelor acestei


linii din elementele liniei i, se obţine:
a ij(1)  aij  mi  a1 j , bi(1)  bi  mi  b1 , i  2, n , j  1, n . (6.2.6)
După prima etapă, sistemul de ecuaţii arată astfel:

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

Prin înmulţirea liniei k cu multiplicatorul mi şi scăderea elementelor acestei linii


din elementele liniei i, se obţine:
aij( k )  a ij( k 1)  mi  a kj
( k 1)
, bi( k )  bi( k 1)  mi  bk( k 1) , (6.2.9)
unde: i  k  1, n , j  k, n .
După efectuarea etapei k sistemul iniţial arată astfel:
a 11 x1  a 12 x
 0  a (1)
x
 22
 0  0

. . . . . . . . .
 0  0

 0  0

. . . . . . . . .
 0  0

(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( n1 2)  a n( n1,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( n1,2n)1 j
a (jjj 1)
n
b1   a1i  xi
x1  i2 . (6.2.12)
a11

Conform algoritmului prezentat, s-a întocmit fişierul funcţie resol.m,


prezentat in tabelul 6.2.2.
Tabelul 6.2.2
% Program pentru rezolvarea unui sistem de ecuatii liniare, folosind
% metoda eliminarii gaussiene

% 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

Fig. 6.2.1. Mecanism planetar utilizat la realizarea unei freze de abataj

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

Rezolvarea sistemului de ecuaţii liniare obţinut se face cu ajutorul funcţiei


resol.m.
Programul principal de calcul este prezentat în tabelul 6.2.3
Tabelul 6.2.3
% Program pentru rezolvarea unui sistem de ecuatii liniare
% cu ajutorul functiei resol
clear;
X = zeros(4); a = zeros(14);b = zeros(4);
Z1=31; Z2=40; Z2P=20; Z2PP=21; Z3=91; Z4=20; Z5=61; OM1=1;
a(1) = 0; a(5) = 0; a(9) = 0; a(13) = Z1*Z2P+Z2*Z3;
a(2) = Z2; a(6) = 0; a(10) = 0; a(14) = -Z1-Z2;
a(3) = Z2PP; a(7) = Z4; a(11) = 0; a(15) = -Z2PP-Z4;
a(4) = 0; a(8) = Z4; a(12) = -Z5; a(16) = Z5-Z4;
b(1) = OM1*Z1*Z2P; b(2) = -OM1*Z1; b(3) = 0; b(4) = 0;
109
n = 4; eps = 1.e-8;
[X,kod] = resol(a,b,n,eps);
if kod > 0
fprintf('%s%i\n',' kod = ',kod);
return;
end
sol = [X(1) X(2) X(3) X(4)];
fis_resol_freza = fopen('fis_resol_freza.txt','w');
fprintf('\n');
fprintf('%s\n','Solutia finala:');
for i = 1 : n
fprintf('%s%i%s%10.5f\n',' X(',i,') = ',X(i));
fprintf(fis_resol_freza,'%s%i%s%10.5f\r\n',' X(',i,') = ',X(i));
end
fclose(fis_resol_freza);
%______________________________________________________________________

După rularea programului de calcul rezultă soluţia sistemului liniar, şi


anume:
Solutia finala:
X(1) = -0.51667
X(2) = 0.84086
X(3) = 0.37351
X(4) = 0.14554,

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

Fig. 6.2.2. Schema cinematică a unei freze de abataj.

6.2.3. Metoda Cholesky

Metoda Cholesky constă în determinarea unei matrice auxiliare L de tipul


triunghiular inferior, care permite reducerea sistemului iniţial (6.2.2) la forma:
TX C. (6.2.13)
Înmulţind ecuaţia (6.2.13), la stânga, cu matricea triunghiular inferioară L, o
va reduce la forma iniţială (6.2.2), adică:
LT X  LC, (6.2.14)
deci:
LT  A, LC  b. (6.2.15)
Pentru început, se consideră un sistem de trei ecuaţii liniare cu trei
necunoscute, şi anume:
a11 x1  a1 2 x 2  a13 x 3  b1 ;

a 21 x1  a 22 x 2  a 23 x 3  b2 ;

a 31 x1  a 32 x 2  a 33 x3  b3 .

(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

Elementele matricelor L, T şi C sunt obţinute succesiv.


Necunoscutele sistemului se obţin din ecuaţia matriceală T  X  C , adică:
 x1  t12  x 2  t13  x3  c1 ;

 x2  t 23  x 3  c2 ;
x  c3 ,
 3

(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

Conform algoritmului prezentat, s-a întocmit fişierul funcţie chols.m,


prezentat in tabelul 6.2.4.
Tabelul 6.2.4
112
% Program pentru rezolvarea unui sistem de ecuatii liniare, folosind
% metoda Choleski
%
% 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] = chols(a,b,n,eps)
kod = 0;
if abs(a(1)) < eps
for i = 2 : n
if abs(a(i)) > eps
i1 = i-n;
j1 = 1-n;
for j = 1 : n
j1 = j1+n;
i1 = i1+n;
c = a(j1);
a(j1) = a(i1);
a(i1) = c;
end
c = b(1);
b(1) = b(i);
b(i) = c;
break;
end
end
kod = 1;
error('ai<eps');
end
j1 = 1;
for j = 2 : n
j1 = j1+n;
a(j1) = a(j1)/a(1);
end
b(1) = b(1)/a(1);
n1 = n+1;
i1 = 2;
i2 = 0;
i3 = 1;
nn = 1-n;
j1 = 0;
for i = 2 : n
j1 = j1+n;
nj = j1;
nn = nn+1;
i1 = i1+1;
i2 = i2+1;
i3 = i3+n1;
ni = 0;
for j = 1 : i2
l1 = nn;
113
ni = ni+n;
l2 = ni;
ij = i+ni;
for k = 1 : j
l1 = l1+n;
l2 = l2+1;
a(ij) = a(ij)-a(l1)*a(l2);
end
end
if (abs(a(i3)) <= eps)
kod = 1;
error(' ai < eps');
end
if i ~= n
for j = i1 : n
nj = nj+n;
ij = i+nj;
l1 = nn;
l2 = nj;
for k = 1 : i2
l1 = l1+n;
l2 = l2+1;
a(ij) = a(ij)-a(l1)*a(l2);
end
a(ij) = a(ij)/a(i3);
end
end
l1 = nn;
for k = 1 : i2
l1 = l1+n;
b(i) = b(i)-a(l1)*b(k);
end
b(i) = b(i)/a(i3);
end
j = n;
nn = n*n;
for i = 2 : n
nj = j;
j = j-1;
nn = nn-n1;
l1 = nn;
for k = nj : n
l1 = l1+n;
b(j) = b(j)-b(k)*a(l1);
end
end
for i = 1 : n
X(i) = b(i);
end
end
%________________________________________________________________

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

Fig. 6.2.3. Mecanism planetar utilizat la realizarea unei maşini de şlefuit

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 ) 

Rezolvarea sistemului de ecuaţii liniare obţinut, se face cu ajutorul funcţiei


chols.m.
Programul principal de calcul este prezentat în tabelul 6.2.5
Tabelul 6.2.5
% Program de calcul pentru rezolvarea unui sistem de ecuatii liniare
% cu ajutorul functiei chols
clear;
X = zeros(4,1); a = zeros(16,1);b = zeros(4,1);
Z1=30; Z2=41; Z2P=21; Z3=91; Z4=20; Z5=61; Z6= 20; OM1=1;
a(1) = Z2; a(5) = 0; a(9) = -Z1-Z2; a(13) = 0;
a(2) = 0; a(6) = Z4; a(10) = Z3-Z4; a(14) = 0;
a(3) = 0; a(7) = Z5-Z6; a(11) = -Z5; a(15) = Z6;
a(4) = Z2P; a(8) = -Z2P-Z6; a(12) = 0; a(16) = Z6;
b(1) = -OM1*Z1; b(2) = 0; b(3) = 0; b(4) = 0;
n = 4; eps = 1.e-10;
[X,kod] = cholS(a,b,n,eps);
if kod > 0
fprintf('%s%i\n',' kod = ',kod);
return;
end
sol = [X(1) X(2) X(3) X(4)];
xlswrite('MN-solutia.xls',sol);
115
fis_resol_freza = fopen('fis_resol_freza.txt','w');
fprintf('\n');
fprintf('%s\n','Solutia finala:');
fprintf(fis_resol_freza,'%s\r\n','Solutia finala:');
for i = 1 : n
fprintf('%s%i%s%10.5f\n',' X(',i,') = ',X(i));
fprintf(fis_resol_freza,'%s%i%s%10.5f\r\n',' X(',i,') = ',X(i));
end
fclose(fis_resol_freza);
%____________________________________________________________________

După rularea programului de calcul rezultă:


Solutia finala:
X(1) = -0.66321
X(2) = -0.14042
X(3) = 0.03956
X(4) = 0.40851
adică:
 2  0.66321 [rad/s];
 4  0.14042 [rad/s];
5  0.03956 [rad/s];
6  0.40851 [rad/s].

6.3. METODE ITERATIVE PENTRU REZOLVAREA


SISTEMELOR DE ECUAŢII LINIARE

6.3.1. Metoda Jacobi

Această metodă se mai numeşte şi metoda iteraţiilor simple.


Fie sistemul de ecuaţii liniare (6.2.1).
Se presupune că elementele a ii  0 , i  1, n şi det A  0 , unde A este matricea
coeficienţilor ecuaţiilor liniare ale sistemului.
Dacă se explicitează fiecare necunoscută a sistemului (6.2.1), în funcţie de
celelalte necunoscute, se obţine:
 x1  (b 1  a12 x 2  a 1
 x 2  (b2  a 2 1x  a 2
 1
. . . . . . . . . . . . . . .
 xi  (b  a i x  a i
 i 1 1 2
. . . . . . . . . . . . . . .
 x n  (bn  a n x  a n
 1 1

Pentru o aproximaţie iniţială x (0)  ( x1(0) , x 2(0) ,  , x n(0) ) , se determină soluţia la


prima iteraţie x (1)  ( x1(1) , x 2(1) ,  , x n(1) ) , de forma:
 x
( 1)
 (b1  a12 x
( 0 )

1 2
 ( 1) ( 0 )
 x 2  (b2  a 2 1 x 1 

. . . . . . . . . . . . . . .
 ( 1) ( 0 )
 xi  (b i  a i 1 x1  a
. . . . . . . . . . . . . . .
 ( 1) ( 0 )

 x n  (bn  a n 1 x 1 

(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 DTS, (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

0 a12 a13 ... a1n


0 0 a 23 ... a 2n
 S  ... ... ... ... a1n .
0 0 0 ... a n 1,n
0 0 0 ... 0

Prin introducerea relaţiei (6.3.5) în relaţia (6.3.4), se obţine:


( D  T  S)  X  b , (6.3.6)
sau:
D  X  (T  S )  X  b . (6.3.7)
Dacă se înmulţeşte relaţia (6.3.7), la stânga, cu D 1 se obţine:
X (k 1 )  D 1 (T  S)  X ( k )  D 1  b . (6.3.8)
Procesul iterativ, de determinare a soluţiei, se opreşte atunci când
X ( k 1)  X ( k )   , (6.3.9)
unde  este un număr pozitiv foarte mic.
Conform algoritmului prezentat, s-a întocmit fişierul funcţie jacobi.m
(v.tabelul 6.3.1).
117
Tabelul 6.3.1
% Program pentru rezolvarea unui sistem de ecuatii liniare, folosind
% metoda iterativa Jacobi

% 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);

a(1) = 7; a(6) = -4; a(11) = 3; a(16) = -7; a(21) = 1;


a(2) = 4; a(7) = 7; a(12) = -3; a(17) = -2; a(22) = -3;
a(3) = -3; a(8) = -2; a(13) = 8; a(18) = 5; a(23) = -1;
a(4) = 1; a(9) = -3; a(14) = -4; a(19) = 9; a(24) = -2;
a(5) = 4; a(10) = -5; a(15) = 3; a(20) = -3; a(25) = 7;

b(1) = 0; b(2) = 3; b(3) = 7; b(4) = 1; b(5) = 6;

n = 5; eps = 1.e-6; iter = 1000;


[X,kod] = jacobi(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('MN-solutia.xls',sol);

fprintf('\n');
fprintf('%s\n','Solutia finala');
for i = 1 : n
fprintf('%s%i%s%10.5f\n',' X(',i,') = ',X(i));
end
%_______________________________________________________________

Pentru un   10 6 se obţine, în 41 de iteraţii, următoarea soluţie


119
aproximativă:

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.

Pentru un   10 8 se obţine, în 56 de iteraţii, următoarea soluţie


aproximativă:
X(1) = 1.000000000
X(2) = 0.999999996
X(3) = 0.999999993
X(4) = 0.999999995
X(5) = 1.000000000.

SOLUTIA REALĂ A SISTEMULUI ESTE:

x1  1;
x 2  1;
x3  1;
x 4  1;
x 5  1.

6.3.2. Metoda Gauss-Seidel


Această metodă se mai numeşte şi metoda iteraţiilor succesive.
Dacă în metoda Jacobi se foloseau, în exclusivitate, componentele vectorului
X (k )
la determinarea componentelor vectorului X ( k 1) , în metoda Gauss-Seidel,
la calculul componentelor xi( k 1) se folosesc şi componentele x (jk 1) , cu i  j ,
i  1, n , j  1, n  1 . În acest caz, relaţia de calcul este de forma:

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

Relaţia matriceală este de forma:


( D  T)  X ( k 1)  S  X ( k )  b , k  0 , (6.3.12)
unde matricele D, T şi S sunt cele cunoscute de la metoda Jacobi.
Dacă det(D  T)  0 (unde (D  T) este o matrice inferior triunghiulară), se
înmulţeşte relaţia (6.3.11), la stânga, cu (D  T) 1 , şi se obţine:
( X ( k 1)  (D  T) 1  S  X ( k )  (D  T) 1 b . (6.3.13)
Matricea P  (D  T) 1  S se numeşte matricea Gauss-Seidel asociată matricei
A, din sistemul (6.2.1). În acest caz, soluţia sistemului este de forma:
( X ( k 1)  P  X ( k )  (D  T) 1 b . (6.3.14)
Conform algoritmului prezentat, s-a întocmit fișierul funcție gaseidel.m,
prezentat în tabelul 6.3.3.

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.
%________________________________________________________________________

function [X,kod] =gaseidel(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 = 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 = X1-a(n*(j-1)+i)*X(j);
end
121
end
X1 = X1/a(n*(i-1)+i);
if abs(X1-X(i)) > eps
k1 = 1;
X(i) = X1;
end
end
if k1 == 0
return;
end
fprintf('%s%i%s\n',' Iteratia(',k,')');
for j = 1 : n
fprintf('%s%i%s%10.6f\n',' X(',j,') =',X(j));
end
end
error(' sistemul nu converge ');
end
%____________________________________________________________

În cazul utilizării metodelor iterative Jacobi şi Gauss-Seidel, este necesar ca


elementele de pe diagonala principală a matricei A să fie dominante pe linie.

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);

a(1) = 7; a(6) = -4; a(11) = 3; a(16) = -7; a(21) = 1;


a(2) = 4; a(7) = 7; a(12) = -3; a(17) = -2; a(22) = -3;
a(3) = -3; a(8) = -2; a(13) = 8; a(18) = 5; a(23) = -1;
a(4) = 1; a(9) = -3; a(14) = -4; a(19) = 9; a(24) = -2;
a(5) = 4; a(10) = -5; a(15) = 3; a(20) = -3; a(25) = 7;

b(1) = 0; b(2) = 3; b(3) = 7; b(4) = 1; b(5) = 6;

n = 5; eps = 1.e-8; iter = 1000;

[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
%_____________________________________________________________

Considerându-se precizia   10 8 , se obţine în 39 de iteraţii următoarea


soluţie aproximativă:

X(1) = 0.999999997
X(2) = 0.999999998
X(3) = 0.999999993
X(4) = 0.999999996
X(5) = 1.000000008.

Se observă că la aceeaşi precizie de calcul, numărul de iteraţii a scăzut de la


56 la 39.

6.4. REZOLVAREA SISTEMELOR DE ECUATII LINIARE


CU FUNCTII DIN BIBLIOTECA MATLAB
6.4.1. Funcţia Matlab „linsolve”

Funcţia linsolve are următoarele linii de definiţie:


x = linsolve(A,B);
x = linsolve(A,B,opts).

x = linsolve (A, B) rezolvă sistemul de ecuaţii liniare A * X = B, unde


A este matricea coeficienţilor necunoscutelor, iar B este matricea termenilor
liberi.
Descrierea completă a liniilor de definiţie ale funcţiei „linsolve” se găseşte în
help-ul MATLAB.

Exemplu de calcul

Se consideră următorul sistem de ecuaţii liniare (v. fig. 6.2.1):


 6 
( z1 z 2

 2 z 2   6 ( z1 

 2 
z 2   4 z 4   6 
( z 2 

  4 z 4  5 z 5  6 ( z 5 

(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
%___________________________________________________________

După rularea programului de calcul rezultă soluţia sistemului liniar, şi


anume:
Solutia finala:
X(1) = -0.51667;
X(2) = 0.84086;
X(3) = 0.37351;
X(4) = 0.14554.
Soluţia sistemului de ecuaţii (6.4.1) a fost introdusă şi în fisieril Excel „M-
solutia.xls”
Viteza unghiulară relativă 75 este dată de relaţia: 75  25 z 2/ z 7 , unde:
25   2  5  0.890178 [rad/s] (se foloseşte metoda axei instantanee [25] ).

6.4.2. Funcţia Matlab „lu”


124
Funcţia „lu” are următoarele linii de definiţie:
[L,U] = lu(A)
[L,U,P] = lu(A)
[L,U,P,Q] = lu(A)
[L,U,P,Q,R] = lu(A)
[...] = lu(A,'vector')
[...] = lu(A,thresh)
[...] = lu(A,thresh,'vector')

[L, U] = lu (A) returnează o matrice superior triunghiulară, U, și o matrice


inferior triunghiulară, L, astfel încât A = L * U. Soluţia x, a sistemului de ecuaţii
liniare, este dată de relaţiile: y = L\b, x = U\y.
Descrierea completă a liniilor de definiţie ale funcţiei „lu” este dată in help-ul
MATLAB.

Exemplu de calcul

Se consideră sistemul de ecuații liniare (6.4.1).


Se cere rezolvarea sistemului de ecuaţii folosind funcţia „lu”.

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;

a(1) = 0; a(5) = 0; a(9) = 0; a(13) = Z1*Z2P+Z2*Z3;


a(2) = Z2; a(6) = 0; a(10) = 0; a(14) = -Z1-Z2;
a(3) = Z2PP; a(7) = Z4; a(11) = 0; a(15) = -Z2PP-Z4;
a(4) = 0; a(8) = Z4; a(12) = -Z5; a(16) = Z5-Z4;

b(1) = OM1*Z1*Z2P; b(2) = -OM1*Z1; b(3) = 0; b(4) = 0;

[L,U] = lu(a);
y = L\b;
x = U\y;

sol = [x(1) x(2) x(3) x(4)];


xlswrite('M-solutia.xls',sol);
fprintf('\n');
fprintf('%s\n','Solutia finala:');
125
for i = 1 : n
fprintf('%s%i%s%8.5f\n',' x(',i,') = ',x(i));
end
%__________________________________________________________

După rularea programului rezultă:


Solutia finala:
x(1) = -0.51667
x(2) = 0.84086
x(3) = 0.37351
x(4) = 0.14554

S-ar putea să vă placă și