UNEI MATRICI
Se presupune a11 ≠ 0 . În caz contrar, se comută liniile până când este îndeplinită
această condiţie. Se definesc multiplicatorii:
a i1
mi = cu i = 2, n .
a11
'
Presupunând că a 22 ≠ 0 , se definesc în continuare multiplicatorii pentru a face
ai' 2
„zerouri” sub prima diagonală pe coloana a doua mi' = '
, cu i = 3, n şi se procedează ca
a 22
la prima coloană.
80 13. Algoritm pentru calculul determinantului unei matrici
n
al cărei determinant, egal cu ∏a
i =1
i −1
ii , diferă de determinantul matricii iniţiale doar prin
Exerciţiul 1. Să se scrie o funcţie care prin permutări asupra liniilor unei matrici să
aducă pe poziţia k, k un element nenul, cu k citit de la tastatură.
gauss ( a) := n←0
for k ∈ 1 .. cols ( a) − 1
for j ∈ k .. rows ( a) − 1 0 2 4 8
2 5 3 8
if ¬a
k− 1 , k− 1 m :=
2 0 8 5
a ← pivot ( a , k − 1) 9
0 0 3 1
n←n+1
if pivot ( a , k − 1)
1
a
j , k− 1
m← 2 5 3 8
a
k− 1 , k− 1
0 2 4 8
for i ∈ k − 1 .. cols ( a) − 1 gauss ( m) = 0 0 15 17
a ←a −a ⋅m 0 0 0 15.9
j, i j, i k− 1 , i
a 1
n
82 13. Algoritm pentru calculul determinantului unei matrici
detr ( a) := p←1
for i ∈ 0 .. cols ( a) − 1
p ← p⋅ a
i, i
( )
gauss( a) 1
determinant ( a) := ( −1) ⋅ detr gauss ( a)
0 0 2 4 8
2 5 3 8
m :=
2 0 8 5
determinant ( m) = −954 9
0 3 1
#include<stdio.h>
#include<conio.h>
main(){
float a[10][10],p=1,m,temp,t=0;
int rows,i,j,k,n;
printf(ʺIntroduceti numarul de linii (coloane):ʺ);scanf(ʺ%iʺ,&rows);
printf(ʺIntroduceti elementele, dupa linii:\nʺ);
for(i=0;i<rows;i++)
for(j=0;j<rows;j++)
scanf(ʺ%fʺ,&a[i][j]);
printf(ʺAti introdus matricea:\nʺ);
for(i=0;i<rows;i++)
{for(j=0;j<rows;j++)
printf(ʺ%.2f\tʺ,a[i][j]);
printf(ʺ\nʺ);}
for(k=1;k<=rows-1;k++)
for(j=k;j<rows;j++)
{
i=k-1;
while((!a[k-1][k-1])*(i<rows))
{
13. Algoritm pentru calculul determinantului unei matrici 83
if(a[i][k-1])
{
for(n=0;n<rows;n++)
{
temp=a[i][n];
a[i][n]=a[k-1][n];
a[k-1][n]=temp;
}
p=-p;t++;
}
i++;
}
if(t)
{
m=a[j][k-1]/a[k-1][k-1];
for(i=k-1;i<rows;i++)
a[j][i]=a[j][i]-a[k-1][i]*m;
}
}
for(i=0;i<rows;i++)
p=p*a[i][i];
printf(ʺValoarea determinantului este %.2fʺ,p);
getch();}
Temă de lucru