M ETODE NUM ERICE DE CALCUL
A L DETERM INANŢILO R SI REZOLVAREA
SISTEMELOR DE ECUAŢII LINIARE
După studierea acestui capitol, veţi fi capabili să:
• descrieţi metodele numerice de calcul al determinanţilor şi algoritmii pentru
implementarea acestor metode;
• descrieţi metodele numerice de rezolvare a sistemelor de ecuaţii liniare;
• descrieţi algoritmii de rezolvare a sistemelor de ecuaţii liniare prin metoda
Cramer şi metoda Gauss;
• elaboraţi programe pentru calculul determinanţilor de ordinul n;
• elaboraţi programe pentru rezolvarea sistemelor de ecuaţii liniare de ordinul n;
• combinaţi metodele studiate pentru elaborarea algoritmilor eficienţi de rezolvare
a sistemelor de ecuaţii liniare şi a programelor care realizează aceşti algoritmi.
4.1. Determinanţi numerici
Fie dată o matrice pătratică arbitrară de ordinul n:
«1,1 «1,2 - «!,„"
A = «2,1 «2,2 - «2,n
• (1)
,«„,1 «„,2 •" «n,n,
Fiecărei din matricele de acest tip îi este asociată o valoare numerică numită determinant.
Determinantul poate fi definit în mod inductiv. Notaţia folosită pentru determinantul
matricei A este det(A).
Pentru a defini determinantul unei matrice de ordinul n, se va folosi noţiunea de minor.
Se numeşte m in o r d e o rd in u l n -1 al elementului a al matricei A de rang n(n>1) determinantul matricei de rang n-1, obţinută din matricea A prin excluderea rîndului i şi a
coloanei j. Vom nota minorul elementului a prin A,, unde i indică rîndul, iar j - coloana
la intersecţia cărora se află elementul ay.
Astfel, pentru a calcula în matricea din exemplu minorul A12 al elementului a1,2 se
exclude din matrice linia 1 şi coloana 2:
A = 0
-1
- f r
-2-
A, 2 = det
2^
1
= 2.
36
Se numeşte determinant al matricei A de rang n
n
valoarea expresiei ^ ( —1 ) U Ja XjA l y..
------- 7=1
Conform definiţiei
«u «1,2 ' • «l,o
A = det(T) = «2,1 «2,2 •• «2,o
= î( - i r j^ A ,j j=i
««,1 «n,2 •• «0,0
Astfel, pentru matricea de ordinul 4:
' « u « 1 ,2 «1,3 «1,4 "
A =
« 2 ,1 « 2 , 2 «2,3 «2,4
«3,1 «3,2 «3,3 «3,4
v« 4 ,l «4,2 «4,3 «4,4
det(A) = a, i4,i - “n A, 2 + « 1
A _
3^1,3
Fiecare dintre minorii Ax-, j = 1, ..., 4 este determinantul unei matrice de ordinul 3 şi poate fi
calculat direct.
Algoritmul de calcul al determinanţilor numerici
Fie dată matricea (1).
Algoritmul de calcul al determinantului unei matrice de ordinul n se bazează direct pe definiţia determinantului:
det(^) = £ ( - l ) 1+X A 7 -
„ 7-1 În această formulă elementele necunoscute sînt
minorii elementelor din prima linie. Fie un minor
arbitrar A . El este determinantul unei matrice de ij
ordinul n-1. Pentru a-l calcula, urmează să fie rezolvată
o problemă echivalentă cu problema iniţială, dar de
dimensiune mai mică. Deoarece la un moment dat se
ajunge la calculul unui determinant de ordinul 1,2
sau 3, care se calculează direct, se respectă regula de
consistenţă şi poate fi aplicat un algoritm recursiv:
Fie matricea A are ordinul R.
ALGORITM CRD (A, R)
{Calcul recursiv determinant al matricei A de
ordin R.}
Cazul elementar
Dacă ordinul matricei A este 1, (R = 1), atunci
CRD <= axj, altfel:
Ne amintim!
Pentru matricea A de ordinul 1, formată dintr-un singur element au ,
determinantul va fi chiar valoarea
acestui element.
Exemplu: A = (7); det(A) = 7.
Pentru o matrice de ordinul 2,
A =
V «21 *11J
determinantul va fi egal cu valoarea expresiei fl11fl22 - a12a21.
Exemplu: A ■
2 5
; det(A) = 9.
vl 7,
Pentru o matrice de ordinul 3,
' « i i « 1 2 «13
A = « 2 1 « 2 2 «23
^«31 «32 «33 y
determinantul poate fi calculat folosind regula lui Sarrus (regula diagonalelor şi a triunghiurilor).
Astfel, pentru o matrice de ordinul 3 determinantul poate fi calculat
direct după formula:
det(A) = flUfl2,2fl3,3+flUfl2,1fl3,2+
Exemplu:
\ 0 3 7
0 0 2
V-l 2 1,
; det(A) = -10.
Regula de consistenţă:
1. Există un caz elementar: matricea ce corespunde minorului curent
are ordinul 1.
2. La nivelul kse fac k apeluri pentru calculul determinanţilor de
ordinul k-1. Prin urmare, procesul
converge spre un caz elementar.
37
Cazul de reducere
1. Valoarea determinantului A se iniţializează cu 0 (A<=0).
2. Pentru toţi j de la 1 la R:
a) Se formează matricea MXj prin excluderea din matricea curentă A a liniei 1 şi a
coloanei j. (Ordinul M1j. este R-1. Matricea dată corespunde minorului A j)
b) Se calculează determinantul D: . al matricei MXj prin apelul CRD (M1j, R-1).
c) Se actualizează valoarea A ^ A+ (-1)1+j x D1 ..
3. . SFÎRŞIT. , j
Implementarea algoritmului
Fie date declaraţiile:
const nmax=10;
type matrice=array[1..nm ax,1..nm ax] of rea l;
Matricea pentru care se calculează determinantul va fi stocată în tabloul X de tip m at .
Ordinul maxim al matricei pentru care se calculează determinantul este limitat de constanta
nmax . Minorul M . care se generează în cadrul apelului curent, este stocat în variabila m inor ,
de tip m at . Semnul valorii (-1)* 1+j CRD (M , R-1) este determinat de paritatea variabileij ,
prin urmare, valoarea calculată va fi adăugată pentru j impar şi scăzută pentru j par.
O realizare posibilă în limbajul Pascal a funcţiei recursive de calcul al determinanţilor
este următoarea:
function cdet( var x : m a t r i c e ; t : i n t e g e r ) : r e a l ;
var
i , j, k: in te g e r;
s : r e a l ;
m i n o r : m a t r i c e ;
begin
if t=1 then cdet:=x[1,1] {caz elementar}
else begin
s : =0;
for k:=1 to t do
begin
{Se e x c l u d e l i n i a 1 s i c o l o a n a k p e n t r u a f o r m a m a t r i c e a ,
care corespunde minorului elementului x[1,k]}
for i:=1 to t-1 do
for j:=1 to k-1 do
m inor[i , j ] : =x[i+1, j ];
for i:=1 to t-1 do
for j:=k to t-1 do
m i n o r [i , j ] : = x [i + 1 , j + 1 ] ;
{apelul recursiv}
if odd(k) then s:=s+x[1,k]*cdet(m inor, t-1)
else s:=s-x[1,k]*cdet(m inor, t-1 );
end;
c d e t : = s ;
end;
end;
38
Numărul de operaţii necesare pentru calculul recursiv al determinantului unei matrice
de ordinul n este determinat de numărul de apeluri recursive, precum şi de numărul de
operaţii în cadrul unui apel.
Dezvoltarea unei matrice de ordinul n după o linie presupune formarea a n minori de
ordinul n-1. Consecutiv, la dezvoltarea fiecăruia dintre ei vor apare n-1 minori de ordinul
n-2 şi aşa mai departe. Numărul total de apeluri va fi determinat de valoarea n x (n-1) x
x (n-2) x ... x 3 x 2 x 1 = n! Numărul de operaţii în cadrul fiecărui apel este proporţional
cu n Prin urmare, complexitatea finală a subprogramului recursiv este O(n2n!), ceea ce
face ca algoritmul să fie puţin eficient pentru valori mari ale lui n.
Există şi un algoritm de complexitate polinomială, care permite calculul iterativ al determinanţilor. Algoritmul foloseşte transformările elementare aplicate consecutiv asupra
matricei iniţiale pentru a o transforma într-o matrice triunghiulară. Determinantul acesteia
din urmă este egal cu produsul valorilor elementelor de pe diagonala principală.
Pentru a obţine elemente cu valoare nulă sub elementul diagonal din coloana
j (j =1, ..., n-1), elementele liniei i (i = j+1, ..., n) se vor aduna cu elementele respective
-a..
ale liniei j înmulţite cu coeficientul - ^ . Dacă elementul a . are valoarea 0, se încearcă
permutarea liniei j şi a liniei k (j < k), astfel încît akj ^ 0. Dacă o asemenea linie nu există,
se poate spune cu certitudine că determinantul matricei este zero.
Neajunsul metodei este numărul considerabil de împărţiri efectuate, care în cazul
oscilaţiilor mari ale valorilor elementelor matricei pot genera erori, ceea ce nu se întîmplă
în cazul algoritmului recursiv.
O posibilă implementare a acestui algoritm este realizată în funcţia CID:
function CID(x:matrice; r:integer): real;
var i,j,k:integer;
q:real;
begin {CID}
for i: =1 to r-1 do
begin
{se verifica valoarea elementului diagonal din linia i} if x[i,i]=0
then {daca e nula, se cauta o linie pentru inlocuire}
begin
k: =i;
for j:=i+1 to r do
if x[j,i]<>0 then k:=j;
{daca nu exista linie pentru inlocuire}
if k=i then begin CID:=0; exit; end
{altfel are loc permutarea liniilor i, k}
else
for j :=1 to r do
begin
q :=x[i, j ] ;
x [ i,j ] :=x[k,j] ;
x[k, j] :=-q;
end;
end;
{modificarea liniilor in scopul obtinerii elementelor cu
valoare nula in coloana i}
39
for j:=i+1 to r do
begin
q:=-x[j,i]/x [i,i] ;
for k:=i to r do x[j,k]:=x[j,k]+x[i,k]*q
end;
end;
{calculul valorii determinantului pentru matricea triunghiulara}
q : =1;
for i:=1 to r do q:=q*x[i,i];
CID:=q;
end;
Întrebări si exerciţii y >
O Explicaţi legătura dintre matrice si determinantul ei.
e Elaboraţi o funcţie pentru calculul determinanţilor de ordinul 3, utilizînd regula lui Sarrus.
e Descrieţi algoritmul de calcul al determinanţilor de ordinul n prin dezvoltare după elementele
unei linii arbitrare.
O Elaboraţi un program pentru calculul determinanţilor de ordinul n (n< 10), în care veţi folosi
funcţia cdet, descrisă în paragraful curent. Ordinul matricei şi valorile elementelor sale se vor
introduce de la tastatură.
e Calculaţi, cu ajutorul programului elaborat, determinanţii următoarelor matrice:
a) ' 2 5' b) (1 0 3' c) ( \ 2 3
4)
,4 - l
/
5 8 2 /
2 1 0 5
,6 -1 4y 3 6 9 6
/
,4 5 8 7,
d) ' l 2 3 0' e ) (1 1 1 f | f ) f - 4 9 -4 6 - 5'
0 0 0 2 1 -1 1 -1 - 1 7 5 5 8
0 6 0 6
/
2 -3 4 1
/
9 -6 8 - 6 2
,4 4 3 o, ,3 4 -3 9,
2 5 2 3 9
g ) '1 -1 3 2 ' h) ' 6 5 3 -2 -7 r
V 1
3 1 5 - 2,
1 -1 6 5 1 4 -1 8 -6 -5
1 -1 -9 - 10 /
4 -3 1 10 9 -3
,1 -1 2 - K 6 4 6 7 7 9
-8 6 4 -1 -5 6
, 1 4 5 6 - 6 3 ,
© În programul realizat în exerciţiul 4, transformaţi parametrul variabilă x al funcţiei cdet în
parametru valoare. Observaţi ce se va întîmpla în cazul calculului aceluiaşi determinant pentru
diferite tipuri ale parametrului x. Explicaţi diferenţa observată.
© Încercaţi să aplicaţi programul realizat pentru calculul determinanţilor matricelor cu dimensiuni n, n > 20, cu elemente de tip real. Ce se va întîmpla? Explicaţi.
40
4.2. Metoda Cramer de rezolvare a sistemelor
de ecuaţii liniare *
Formulele Cramer1
Capacitatea de a calcula determinanţii numerici de ordinul n permite rezolvarea unei
game largi de probleme din diverse domenii. Una dintre aplicaţiile practice ale calculului
determinanţilor este rezolvarea sistemelor de ecuaţii liniare.
Fie dat sistemul din n ecuaţii liniare cu n necunoscute:
aux1+al2x2+... + aknxn=b1 '
(1)
+ an,2X2 + ' . + a x , nji i = b
Pentru transcrierea sistemului în formă matriceală vor fi folosite următoarele notaţii:
A =
fll,l a i,2 •
a 2 ,l a 2,2 •
r R R
cT ţT
- matricea
. , o =
h
- vectorul
termenilor
V
*2
^a n ,\ a n,2 ■■ U n ,n ,
coeficienţilor,
A ,
liberi,
- vectorul
soluţiilor.
În formă matriceală sistemul (1) poate fi scris
Ax = b. (2)
În cazul cînd determinantul A este diferit de 0, există matricea inversă A"1. În urma
înmulţirii ambelor părţi ale egalităţii (2) la A-1, se obţine:
ceea ce este echivalent cu
A 1Ax = A 1b,
x = A-1b.
Această formulă permite calculul soluţiilor sistemului (1) în cazul în care matricea A a sistemului este
nesingulară. Formula detaliată pentru calcularea
componentelor vectorului soluţie rezultă nemijlocit
din (3) şi proprietăţile matricei inverse:
X i =
A*
A
2 = 1, .
a i,i • ■ • a \,i-\ b\ a i,i+l 0 then
begin for p:=1 to n do sol[p]:= transforma(a,n,p)/de;
for p:=1 to n do writeln('x[',p,']=',sol[p]:0:3);
end
else writeln('Calcul imposibil');
end.
Rezultate: x[1]=1.000
x[2]=3.000
x[3]=2.000
[3
Întrebări si exerciţii y >
O Pentru rezolvarea căror probleme pot fi folosite formulele Cramer? Care sînt condiţiile cînd ele
nu pot fi aplicate?
© Explicaţi sensul elementelor A si A, din formulele Cramer.
© În baza exemplului cn11 elaboraţi un program pentru calculul soluţiei unui sistem din n
ecuaţii liniare cu n (n < 10) necunoscute, utilizînd formulele Cramer:
a) Numărul de ecuaţii n, valorile coeficienţilor ecuaţiilor sistemului si ale termenilor liberi se
introduc de la tastatură;
b) Datele iniţiale vor fi citite din fişierul text sistem.in care va conţine pe prima linie un
număr întreg n - numărul de ecuaţii în sistem. Fiecare din următoarele n linii va conţine cîte
n+1 numere întregi, separate prin spaţiu: coeficienţii ecuaţiilor în ordinea apariţiei lor şi
termenii liberi.
© Rezolvaţi următoarele sisteme de ecuaţii, utilizînd programul realizat în exerciţiul 3:
a)
c)
e)
x ,+ x 2 + x 3 + x 4 = 10 -4 x j + 9 x2 - 4 x3 + 6 x 4 - 5x5 = - 8
xI - x 2+ x3- x 4 = - 2 -Xj + 7 x2 + 5x3 + 5x4 + 8 x 5 = 199
2xx - 3x2 + 4x3 +x4 = 12 b) 1 9xj - 6 x 2 + 8 x 3 - 6 x 4 + 2 x 5 = 52
3x1+4x2- 3 x3+9x4 = 38 2 xj + 5x2 + 2 x3 + 3x4 + 9x5 = 198
x, + 3x2 + Xj + 5x4 - 2 x5 = 33
6xj + 5x2 + 3x3 - 2 x4 - 7 x5 + x 6 = —48 Xj - x 2 + 3 x3 + 2 x4 = 1
X[ + 4 x2 - x3 + 8 x 4 - 6 x 5 - 5x6 = --106 Xj - x 2 + 6 x 3 + 5x4 = 0
4 x j - 3 x2 + x 3 + 1 0 x4 + 9 x5 - 3 x6 = 70 d )i) pentru care ari * 0. Dacă o
astfel de linie nu există, se trece la pasul 3.
b) Pentru fiecare din liniile j de la i+1 la n se repetă procedura (P):
-a , t
I. se calculează ;
au,
II. pentru toţi l de la 1 la n+1 ajt ^ ajt + k x ajV
Pasul 3. Dacă i0 then k:=j;
if k=i then goto linie_urmatoare
else
for j:=1 to t+1 do
begin
r :=x[i,j]; x [i,j]:=x[k,j]; x[k,j]:=r;
end;
end;
for j:=i+1 to t do
begin r :=-x[j,i]/x[i,i];
for k:=i to t+1 do x[j,k]:=x[j,k]+x[i,k]*r;
end;
linie_urmatoare: end;
end; {direct}
procedure invers (var q:vect);
var i,j: integer;
s: real;
47
begin
for i:=n downto 1 do
begin
s : =0;
for j:=i+1 to n do s:=s+a[i,j]*q[j];
if a [i,i]<>0 then q[i]:=(a[i,n+1] -s)/a[i,i] else q[i]:=0;
end;
end;
begin citeste(a,n);
direct(a,n);
invers(s);
for i:=1 to n do writeln('x[',i,']=',s[i]:0:3);
end.
Teste:
3 x j + 2 x 2 - x 3 = 1
■ 6 x , + 4x2 - 2x3 = 1 4
X j - 6 x 2 + 2 x 3 = - 1 3
- 8 X [ + 9 x 2 - x 3 + 9 x 4 - 5 x 5
- 4 x j - 9 x 2 + 9 x 3 + 2 x 4 - 2 x 5
■ -4xj - 4 x2 + 7x3 + 3x4 + 4 x5
- 3 xj + 6 x 2 - 7x3 - 6 x 4 + 9x5
X j - 9 x 2 - 9 x 3 - 7 x 4 - 6 x 5
Întrebări si exerciţii j j
Rezultate:
x [1 ]= 0 .8 0 0
x [2 ]= 2 .3 0 0
x [3 ]= 0 .0 0 0
= -111 x [1 ]= 9 .0 0 0
= 88 x [2 ]= -3 .0 0 0
= 64 x [3 ]= 1 1 .0 0 0
= -1 1 0 x [4 ]= 1 .0 0 0
= -8 2 x [5 ]= 2 .0 0 0
Note:
Se observă prezenţa a două ecuaţii cu
coeficienţi proporţionali. Programul
detectează variabila liberă x [ 3 ] , pe
care o stabileşte fiind egală cu 0.
Determinantul matricei coeficienţilor sistemului este diferit de 0. Prin
urmare există o singură soluţie a sistemului. Prin verificare directă se stabileşte corectitudinea soluţiei date de
program.
O Descrieţi etapele algoritmului de calcul al soluţiei unui sistem din n ecuaţii liniare cu n necunoscute, utilizînd metoda Gauss.
e Indicaţi care sînt resursele de memorie necesare pentru calculul soluţiei unui sistem din n ecuaţii
liniare cu n necunoscute prin metoda Gauss.
e Elaboraţi un program pentru calculul soluţiei unui sistem din n ecuaţii liniare cu n (n < 10)
necunoscute prin metoda Gauss.
O Estimaţi complexitatea temporală a algoritmului de rezolvare a sistemelor de ecuaţii liniare
prin metoda Gauss. Folosiţi programul cn12.
© Efectuaţi o modificare a programului cn12, care ar permite determinarea soluţiilor sistemelor
de forma:
a)
«1,1*1 + « 1 ,2 *2 + «1,3*3 + ••• + « l,n * n = k
« 2 ,2 * 2 « 2 ,3 *3 + ••■ + « 2 ,n *n = ^2
« n - l,n - l* n - l « n -l,n * n ^ B -l
a „ „ x „ = h
n,n n n
b)
«1,1*1 =h
Q>2 + ^2 2^2 = ^2
« n - l,2 *2 « n - l,3*3 + ■••+ « „ - !,„ * „ = ^n-1
« n ,l* l + « n ,2 *2 + « n ,3*3 + - + « n ,n *n = K
© Realizaţi o modificare a programului cn12, care ar permite atribuirea aleatorie a valorilor
variabilelor libere.
48
Test de evaluare
l î Selectaţi răspunsul corect:
1. Determinantul este o caracteristică numerică, pe care o posedă matricele:
a) numai de rangul 1;
b) de orice rang;
c) numai de rang mai mic sau egal cu 3.
2. Pentru calculul determinanţilor pot fi folosiţi algoritmi recursivi:
a) adevărat; b) fals.
3. Pentru a stoca în memoria calculatorului o matrice de dimensiunea 10 x 10, elementele căreia
sînt numere reale, vor fi necesari:
a) 640 octeţi; d) 400 octeţi;
b) 1 024 octeţi; e) 200 octeţi.
c) 600 octeţi;
4. Metoda Cramer poate fi utilizată doar în cazul cînd determinantul matricei coeficienţilor
sistemului este:
a) diferit de 0; c) pozitiv;
b) egal cu 0; d) un număr întreg.
5.
6.
Fie A - determinantul matricei coeficienţilor unui sistem din n ecuaţii liniare cu n necunoscute, iar A1 - determinantul matricei coeficienţilor sistemului, în care prima coloană a fost
înlocuită cu vectorul termenilor liberi. Metoda Cramer utilizează următoarea formulă de calcul
pentru componenta x1 a vectorului soluţie:
A
c) ;
Ai 1 A
K
(A i - A )
d) .
A i ;
Metoda Gauss de rezolvare a sistemelor de ecuaţii liniare conţine:
a) o singură etapă; c) trei etape;
b) două etape; d) numărul etapelor nu poate fi estimat apriori.
7. În cadrul metodei Gauss, la etapa directă, pentru un sistem cu n ecuaţii, necunoscuta x. este
exclusă din toate ecuaţiile cu indicii:
a) de la 1 la ;
b) de la 1 la i +1;
c) de la la n;
d) de la +1 la n.
8. Fie sistemul de ecuaţii liniare, unde a.. ^ 0 (i = 1,..., n).
«1, 1*1 + «1, 2* 2 + «1, 3*3 + - + « 1, »- ! * »- ! + « l , n * n
« 2 , 2 * 2 + « 2, 3* 3 + - + «2, n—l * n —1 + « 2 , n X n
= k
= b2
a , i + u„ i „x„ n —i tn —i n —i n —i , n n
«n,M*n
[9
Metoda Gauss presupune determinarea componentei x, a vectorului soluţie prin formula:
b, ~ Z avxj
a) ; c)
b i ~ Z a V x J
j= i+ i
bi + Z avxj - b t + X
b) x ,.= ------ ^ -------; d) .
a u ' a u
Ci Calculaţi folosind programele elaborate anterior. Pentru fiecare soluţie calculată se va
afişa o linie care va conţine cuvîntul „Răspuns:", urm at, după un spaţiu, de soluţia
calculată:
1. Determinanţii matricelor:
■ 1 4 0 ' '4 -1 2 5'
a) 2 3 7 ; b) 2 2 1 4
-4 1 - 2 0 3 5 6
_2 -1 4 1
2. Soluţiile sistemelor (metoda Cramer):
-6 x j - 3x 2 - 3x 3 = -6 3
-7 x ! + 8x2 + 6x3 = 10 b)
2xj + 6x2 - 7 x 3 = - 6 4
9x2 - 8 x 3 + 2x 4
8x, - 7 x2+ 9x3 + 8x4
- 3 x t - 7 x2 + 3x3 + 4x 4
- x l - 9x3 + x4
3. Soluţiile sistemului (metoda Gauss):
5x 2 + x4 + 5x 5 = 89
- 8 x 3 + 4x 2 - x4 + 4x 5 = 87
1 Oxj + 3x2 - 9x3 - 3x 4 - 2x5 = -1 3
-7 x j + 6 x 2 - 6 x 3 + 7x 4 + 7x 5 = 217
-7 X j + 6 x 2 + 8 x 3 - 7x 4 + x5 =
scoala scoala de soferi scoala auto scoala de soferi pret scoala soferi scoala de soferi categoria b sofer cat b scoala de soferi categoria a cat costa scoala de soferi scoala de soferi sector 4 pret scoala de soferi examen auto școală de șoferi scoala de soferi categoria c pret scoala de soferi categoria b scoala soferi categoria a scoala de soferi profesionisti soferi profesionisti scoala auto online cursuri auto scoala de soferi ieftina scoala de soferi categoria d scoala particulara
Abonați-vă la:
Postare comentarii (Atom)
Niciun comentariu:
Trimiteți un comentariu