Sunteți pe pagina 1din 20

Universitatea Tehnică a Moldovei

Facultatea Energetică şi Inginerie Electrică

Soluţionarea sistemelor de
ecuaţii algebrice

dr.conf. Victor Gropa


« Metode Numerice şi Informatică Aplicată »
Cuprins
• Sisteme de ecuaţii algebrice liniare
• Metode directe de soluţionare
– Metoda eliminării a lui Gauss
• Metode iterative de soluţionare
– Metoda lui Gauss-Seidel
• Sisteme de ecuaţii algebrice neliniare
Sisteme de ecuaţii algebrice liniare

Considerăm sistemul de ecuaţii algebrice liniare:

Acest sistem poate fi scris sub formă matricială:

unde:

A rezolva sistemul de ecuaţii dat înseamnă a determina toate


necunoscutele x din sistemul de ecuaţii prezentat.
Sisteme de ecuaţii algebrice liniare
Pentru orice sistem de ecuaţii liniare pot exista 3 posibilităţi:
1. Sistemul de ecuaţii are o soluţie unică (în acest caz se spune că
sistemul este compatibil determinat).
3
ORIGIN 1

2
1 1 
A   
 2 1 
1

2
B   
0 1

1
lsolve ( A B)  
1
0 0.5 1 1.5 2
1

Se observă că dreptele se intersectează numai într-un punct.


Sisteme de ecuaţii algebrice liniare

2. Sistemul de ecuaţii are o infinitate de soluţii (în acest caz se


spune că sistemul este compatibil nedeterminat).
g ( x) 
( 2  2x)
2
1

0.5

 0.5

1
0 0.5 1 1.5 2

Se observă că soluţiile descriu una şi aceeaşi dreaptă.


Sisteme de ecuaţii algebrice liniare

3. Sistemul de ecuaţii nu are soluţii (adică este incompatibil).


( 2  x3) ( 7  2x3)
f ( x3)  g ( x3) 
2 4
2

1.5

0.5

0
0 0.5 1 1.5 2

Se observă că dreptele sunt paralele.


Sisteme de ecuaţii algebrice liniare
Considerăm sistemul de n - ecuaţii liniare algebrice:
A∙x = b

a 11 ... a 1n  b 1 
   
A :  ...........  b :  . . 
   
a n1 . . . a nn  b n 
 
Sistemul de ecuaţii este compatibil determinat dacă determinantul
matricii A este diferit de 0 (matricea este nesingulară).
Soluţia sistemului poate fi scrisă sub forma:
x = A-1 b
Sisteme de ecuaţii algebrice liniare
Soluţia sistemului de ecuaţii poate fi obţinută, de asemenea, cu
funcţia predefinită a MathCAD-ului lsolve:
x:= lsolve(A,b)
Sistemul de ecuaţii liniare mai poate fi rezolvat utilizând blocurile
de instrucţiuni given/find sau given/minerr, pornind de la
nişte aproximaţii iniţiale ale rădăcinilor.
În MatLAB funcţia de calcul a matricei inverse este inv şi atunci:
x = inv(A)*b
Există 2 clase de metode de rezolvare a sistemelor algebrice liniare:
- metode directe sau exacte, care furnizează soluţia într-un număr
finit de paşi, în ipoteza că toate calculele se fac exact (Cramer,
eliminarea gaussiană, Cholesky) şi
- metode iterative, care aproximează soluţia generând un şir care
converge către aceasta (Jacobi, Gauss-Seidel, SOR).
Johann Carl Friedrich Gauss
(1777-1855)
A fost unul dintre cei mai mari matematicieni ai secolului al
nouăsprezecelea şi probabil ai tuturor timpurilor. A trăit
aproape toată viaţa în Gottingen, unde a fost directorul
observatorului astronomic 40 de ani. În timpul studenţiei la
Gottingen, Gauss a descoperit că poligonul cu 17 laturi
poate fi construit cu rigla şi compasul, rezolvând astfel o
problemă deschisă a antichităţii.
A avut contribuţii fundamentale în teoria numerelor, geometrie
diferenţială şi neeuclidiană, funcţii eliptice şi
hipergeometrice, mecanică cerească şi geodezie şi diverse
ramuri ale fizicii, în special magnetism şi optică.
Lucrările lui Gauss în domeniul cuadraturilor numerice continuă
munca predecesorilor săi Newton şi Cotes.
Metoda Gauss
Metoda constă în eliminarea succesivă a necunoscutelor într-o
manieră care conduce la un număr de operaţii mult mai redus
decât procedeul care ar utiliza regula lui Cramer şi calculul
determinanţilor corespunzători.
Metoda eliminării a lui Gauss are două etape:
- transformarea sistemului dat într-unul echivalent, triunghiular;
- rezolvarea sistemului triunghiular prin substituţie inversă.
Prima etapă se mai numeşte mersul direct al metodei Gauss şi
constă în excluderea consecutivă a necunoscutelor, începând
cu x1, din ecuaţiile sistemului: x1  a 1n 1  a 12 x 2  ...  a 1n x n  / a 11
Elementul ai,i plasat pe diagonala principală se numeşte pivot.
Start

n, a

i =1, n-1

c = ai,i xn=an,,n+1/an,n

k = n -1
j = i, n+1

ai,j = ai,j/c s=0

j = k+1, n
k = i+1, n
s =s + ak,jxj
D = ak,i
xk=ak,n+1-s
L = i, n+1

k = k -1
ak,L = ak,L-ai,,L*D

k>0
nu
x
Algoritmul Metodei Gauss
Stop
Metoda Gauss
 8 5 2 0 
  1 
Exemplu: 10 2 2  13 
A   b  
5
ORIGIN 1 n  length ( b )  4
 2 2 8 2   12 
0   8 
 2 2 5  
MTG( a n )  for i  1  n  1 b
n n 1
ca SOL( b )  x 
i i n b
n n
for j  i n  1 kn1
a while k  0
i j
a 
i j c s 0
for k  i  1  n for j  k  1  n
Da s s  b x
k i k j j
for h  i  n  1 x b s
k k n 1
a a a D
k h k h i h kk1
a x
 8 5 2 0 1  1 0.625 0.25 0 0.125  T
SOL( MTG( Cn) )  ( 1.543 2.379 0.726 2.261 )
10 2 2 13  0.109 0.291 1.8 
C  augment ( A b )   MTG( Cn )  
5 0 1
 2 2 8 2 12  0 0 1 0.299 1.402  8 1.543  5 ( 2.379)  ( 2)  0.726  0 2.261  1.003
5 1.543  10 ( 2.379)  ( 2)  0.726  2 2.261  13.005
 0   
 2 2 5 8  0 0 0 3.755 8.49 
Metoda Gauss
În fereastra de comenzi a MATLAB-ului, înainte
function metgauss (A,n), de apelul la funcţie, se determină A şi n, după
for i =1:n-1, cum urmează:
c = A[i,i];
for j = i:n+1
A[i,j] = A[i,j]/c;
end
[8 5 2 0  1;
for k = i+1:n, 5 10  2 2  13;
d = A[k,i]; A
for l = i:n+1; 2 2 8 2 12;
A[k,l] = A[k,l] - A[i,l]*d;
end 0 2 2 5 8 ];
end
x[n] = A[n,n+1]/A[n,n];
k = n-1;
while k > 0, n=4
s = 0; Apoi se efectuează apelul metgauss (A,n)
for j = k+1:n, şi se va obţine:
s = s + A[k,j]*x[j]; Rădcinile sistemului -1.543 -2.379 0.726 2.261
end
x[k] = A[k,n+1] - s;
k = k - 1;
end
rez = [Rădcinile sistemului -,num2str(x)];
disp (rez)
Metoda Gauss-Seidel
Principiul general al metodelor iterative poate fi prezentat analogic cu
metoda iteraţiilor, în care ecuaţia originală este transcrisă ca:
ce conduce la procedeul iterativ
Astfel, alegând aproximaţiile iniţiale ale rădăcinilor:
x 1( 0 ) , x (20 ) ... x (n0 )
şi substituindu-le în partea dreaptă a ecuaţiilor:
x 1  a 1,n 1  a 1,1 x 1  a 1, 2 x 2  ...  a 1,n x n  / a 1,1  x 1

x 2  a 2 ,n 1  a 2 ,1 x 1  a 2, 2 x 2  ...  a 2,n x n  / a 2, 2  x 2

...
x  a
 n n , n 1  a n ,1 x 1  a n , 2 x 2  ...  a n , n x n  / a n , n  x n

obţinem primele valori precizate ale rădăcinilor:


x1(1) , x (21) ... x (n1)
Metoda Gauss-Seidel
Procedând în aşa mod şi în continuare se obţin valori tot mai precise
ale rădăcinilor (procesul poate fi optimizat dacă se utilizează
precizări ale rădăcinilor, determinate la pasul curent de iteraţie):
x 1( i 1)  1 ( x 1( i ) , x (2i ) ... x (ni ) )  x 1( i 1)  1 ( x 1( i ) , x (2i ) ... x (ni ) )
  ( i 1)
x 2   2 ( x 1 , x 2 ... x n )
( i 1) ( i 1)
x 2   2 ( x 1 , x 2 ... x n ) 
(i ) (i ) (i) (i ) (i)

 
.....  .....
x (ni 1)   n ( x 1( i ) , x (2i ) ... x (ni ) ) x ( i 1)   ( x ( i 1) , x ( i 1) ... x ( i 1) , x ( i ) )
 n n 1 2 n n
metoda iteraţiilor simple metoda Seidel
Relaţia iteraţională de calcul a rădăcinilor sistemului de ecuaţii
liniare prin metoda Seidel poate fi scrisă în felul următor:
k 1 n
a k ,n 1   a kj x ( i 1)
j   a kj x (ji )
j1 j k
x (ki 1)   x (ki )
a kk
Procesul se va întrerupe când se va satisface condiţia: x (ki 1)  x (ki )  
Start

A,x,n,

L=0

nu
L=0

x
L=1

k = 1, n Stop

S = ak,n+1

j = 1, n

S = S - ak,jxj

S =S/ak,,k

xk = xk+ S

|S| > 
L=0 nu
Algoritmul Metodei
Gauss-Seidel
Metoda Gauss-Seidel
Exemplu:  8 5 2 0 
  1 
10 2 2  13  eps  0.001
A   b  
5
ORIGIN 1
 2 2 8 2   12  n  length ( b )  4
0   8 
 2 2 5  
SDEL( a xn eps )  L  0
while L 0
L 1
 8 5 2 0 1   1  for k  1  n
10 2 2 13 
D  augment ( A b )   x   
5 2
sa
k n 1
 2 2 8 2 12  1
0  1 for j  1  n
 2 2 5 8   
ssa x
k j j
T s
SDEL( D xn eps )  ( 1.543 2.378 0.726 2.261 ) s
a
8 1.543  5 ( 2.378)  2 0.726  0  0.998 k k
x x s
k k
T L  0 if s  eps
lsolve( A b)  ( 1.543 2.379 0.726 2.261)
x
Metoda Gauss
În fereastra de comenzi a MATLAB-ului, înainte
de apelul la funcţie se determină A,x,n şi eps,
după cum urmează:
function seidel (A,x,n,eps),
L = 0;
while L = = 0; [8 5 2 0  1;
L =1;
5 10  2 2  13;
for k =1:n,
A
s = A(k,n+1);
for j =1:n,
2 2 8 2 12;
s = s – A(k,j)*x(j); 0 2 2 5 8 ];
end
s = s/A(k,k);
x(k) = x(k) + s;
x = [1 2 1 1];
if abs(s) > eps,
L = 0; n = 4;
end
end eps = 0.001;
rez =[Radacinile sistemului -,num2str(x)];
disp (rez)
Apoi se efectuează apelul seidel (A,x,n,eps)
şi se va obţine:
Rădcinile sistemului -1.543 -2.379 0.726 2.261
Sisteme de ecuaţii algebrice neliniare

În MathCAD, cu ajutorul funcţiilor find sau minerr se pot obţine


soluţii pentru un sistem de n-ecuaţii neliniare algebrice cu n
necunoscute, pornind de la nişte aproximaţii iniţiale.
Programul MathCAD pentru soluţionarea sistemului format
din 3 ecuatii neliniare cu 3 necunoscute este:
x: = a y: = b z: = c (a,b şi c prezintă valori concrete)
f (x,y,z) := expresia de calcul a lui f
g (x,y,z) := expresia de calcul a lui g
h (x,y,z) := expresia de calcul a lui h
Given
f (x,y,z)=0 (pentru a obţine „=„ se tastează < Ctrl > şi < = >)
g (x,y,z)=0
h (x,y,z)=0
Soluţia va fi afişată utilizând instrucţiunile find(x,y,z)= sau minerr(x,y,z)=
!!! Succesul rezolvării depinde de alegerea adecvată a aproximaţiilor iniţiale.
Întrebări ?

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