Sunteți pe pagina 1din 13

Universitatea A.I.

Cuza din Iai, extensiune Bli


Facultatea de fizic
Specializarea fizic tehnologic
(Proiect de program la cursul de Prelucrarea datelor fizice)
.

PROIECT DE PROGRAM Nr.2


Rezolvarea matricilor aplicnd metodele:
Guass, Gauss optimizat, Gauss-Jordan

A elaborat: Brsanu Marina


Averificat: icu Vitalie

Bli, 2016

I. Formularea problemei
Calcularea matricei: a[Nmax][Nmax+1] = {{-8, 7, 3, 6, 10}, {11, 4, -2, 3, 47},
{13, 7, 25, 3, 61}, {5, -6, 12, 26, 30}} prin intermediul metodei Gauss, Gauss optimizat,
Gauss-Jordan .

II. Preliminarii
A1

A2

A3

A4

A5

-8

10

11

-2

47

13

25

61

-6

12

26

30

III.Programele

Metoda Gauss:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define NMAX 10
int main()
{
int i,j,l,m,n = 4;
double a[NMAX][NMAX+1] = {{-8,7,3,6,10}, {11,4,-2,3,47},
{13,7,25,3,61},{5,-6,12,26,30}};
double x [NMAX];
double suma;
printf("Calcularea matricei prin metoda Gauss\n");

printf ("\n Sistemul initial \n");


for (i = 0 ; i < n ; i++)
{
for ( j = 0; j < n; j++)
printf("%8.3lf ", a[i][j]);
printf(" | %8.3lf \n", a[i][n]);
}
//etapa 1
for ( l = 0; l<n-1; l++)
{
for ( i = l+1; i<n; i++)
for (j = l+1; j <= n; j++)
a [i][j] = a[i][j]- a[i][l]* a[l][j] / a[l][l];
for ( i = l+1; i<n; i++ )
a[i][l] = 0;
printf ("\n Sistemul la pasul %d \n", l+1);
for (i = 0 ; i < n ; i++)
{
for ( j = 0; j < n; j++)
printf("%8.3lf ", a[i][j]);
printf(" | %8.3lf \n", a[i][n]);
}
}
//etapa 2
x[n-1] = a[n-1][n] / a[n-1][n-1];
for ( i = n-2; i >= 0; i--)
{
suma = 0;
for (j = i+1; j < n; j++)
suma = suma + a[i][j] * x[j];
x[i] = ( a[i][n] - suma ) / a[i][i];
}
printf ("\n Solutia sistemului este \n");

for (i = 0 ; i < n ; i++)


printf("%8.3lf ", a[i][j]);
printf(" \n" );
return 0;
}

Rezultatele
Matricea iniial a sistemului

Matricea 1 a sistemului

-8.000 7.000 3.000 6.000


10.000

-8.000 7.000 3.000 6.000


10.000

11.000 4.000 -2.000 3.000


47.000

0.000 13.625 2.125 11.250


60.750

13.000 7.000 25.000 3.000


61.000

0.000 18.375 29.875 12.750


77.250

5.000 -6.000 12.000 26.000


30.000

0.000 -1.625 13.875 29.750


36.250

Matricea 2 a sistemului

Matricea 3 a sistemului

-8.000 7.000 3.000 6.000


10.000

-8.000 7.000 3.000 6.000


10.000

0.000 13.625 2.125 11.250


60.750

0.000 13.625 2.125 11.250


60.750

0.000 0.000 27.009 -2.422


77.250

0.000 0.000 27.009 -2.422


-4.679

0.000 0.000 14.128 31.092


36.250

0.000 0.000 0.000 32.359


45.943

Soluia sistemului este: 10.000 60.750 -4.679 45.943

Metoda Gauss optimizat:


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#define Nmax 10
int main()
{

//clrscr();
int l,i,j,n=4,m,imax,jmax;

double a[Nmax][Nmax+1] = {{-8, 7, 3, 6, 10}, {11, 4, -2,


3, 47}, {13, 7, 25, 3, 61}, {5, -6, 12, 26, 30}} ,
A[Nmax][Nmax], X[Nmax];
int t1;
double sum, R, t;
//printf("Dati rangul sistemului -> "); scanf("%d", &n);
//printf("\nDati elementele matricei sistemului -> \n");
for(i=0;i<n;i++)
for(j=0;j<=n;j++) { //scanf("%lf",&a[i][j]);
A[i][j] = a[i][j];

//clrscr();
printf("\n Matriceainitiala

a sistemului\n");

for(i=0; i<n; i++)


{
for(j=0;j<n;j++)
printf("%8.3lf",a[i][j]);

printf(" %8.3lf \n", a[i][n]);

printf("\n");
for(l=0; l<n; l++)
{

if(a[l][l] == 0)
{

for(m = l+1; m<n; m++)

if(a[m][l] != 0) break;
if(m==n)
{

printf("\n Determinantul si stemului este egal

cu 0");
getch(); exit(-1);

for(j=0;j<=n;j++)
{
t = a[m][j];

a[l][j] = a[l][j]; a[l][j] = t;

}
}
for(j=l+1; j<=n; j++)
a[l][j] = a[l][j]/a[l][l];
a[l][l] = 1;
for(i=l+1; i<n; i++)
for(j=l+1; j<=n; j++)
a[i][j] = a[i][j] - a[i][l]*a[l][j];
for(i=l+1; i<n; i++)
a[i][l] = 0;
printf("\n Matricea %d

a sistemului\n", l+1);

for(i=0;i<n;i++)
{

for(j=0;j<n;j++)
printf("%8.3lf",a[i][j]);

printf("%8.3lf \n",a[i][n]);

}
X[n-1] = a[n-1][n];
for(i=n-2; i>=0; i--)
{

sum = 0;
for(j=i+1; j<n; j++)
sum += a[i][j]*X[j];
X[i] = a[i][n] - sum;

printf(" Solutia sistemului este\n");


for(i=0;i<n;i++)
printf("%8.3lf", a[i] [j]);
printf("\n");
return 0;
}

Rezultatele

Matricea iniial a sistemului


-8.000 7.000 3.000 6.000
10.000
11.000 4.000 -2.000 3.000 47.000
13.000 7.000 25.000 3.000
61.000
5.000 -6.000 12.000 26.000
30.000

Matricea 2 a sistemului
1.000 -0.875 -0.375 0.750
-1.250

Matricea 1 a sistemului
1.000 -0.875 -0.375 0.750
-1.250
0.000 13.625 2.125 11.250
60.750
0.000 18.375 29.875 12.750
77.250
0.000 -1.625 13.875 29.750
36.250

Matricea 3 a sistemului
1.000 -0.875 -0.375 0.750
-1.250

0.000 1.000 0.156 0.826 4.459

0.000 1.000 0.156 0.826 4.459

0.000 0.000 27.009 -2.422 -4.679

0.000 0.000 1.000 -0.090 -0.173

0.000 0.000 14.128 31.092


43.495

0.000 0.000 0.000 32.359


45.943

Matricea 4 a sistemului
1.000 -0.875 -0.375 0.750
-1.250
0.000 1.000 0.156 0.826 4.459
0.000 0.0000 1.000 -0.090 -0.173
0.000 0.000 0.000 1.000 1.420

Metoda Gauss-Jordan:
#include<stdio.h>
#include<stdlib.h>

Soluia sistemului este:


-1.250 4.459 -0.173 1.420

#include<conio.h>
#include<math.h>
#define Nmax 10
int main()
{

//clrscr();
int l,i,j,n=4,m,imax,jmax;

double a[Nmax][Nmax+1] = {{-8, 7, 3, 6, 10}, {11, 4, -2,


3, 47},{13, 7, 25, 3, 61}, {5, -6, 12, 26, 30}} ,
A[Nmax][Nmax], X[Nmax];
int t1;
double R, t;
//printf("Datirangulsistemului -> ");

scanf("%d", &n);

//printf("\nDatielementelematriceisistemului -> \n");


for(i=0;i<n;i++)
for(j=0;j<=n;j++) {
//scanf("%lf",&a[i][j]);

A[i][j] =

a[i][j];
}
//clrscr();
printf("\n Matriceainitiala

a sistemului\n");

for(i=0; i<n; i++)


{

for(j=0;j<n;j++)
printf("%8.3lf",a[i][j]);
printf(" %8.3lf \n", a[i][n]);

printf("\n");
for(l=0; l<n; l++)
{

if(a[l][l] == 0)
{

for(m = l+1; m<n; m++)

if(a[m][l] != 0) break;
if(m==n)
{

printf("\n Determinantul sistemului este egal cu

0");
getch(); exit(-1);

for(j=0;j<=n;j++)
{
}

t = a[m][j];

a[l][j] = a[l][j]; a[l][j] = t;

}
for(i=0; i<n; i++)
if(i != l)
for(j=l+1; j<=n; j++)
a[i][j] = a[i][j] - a[i][l]*a[l][j]/a[l]
[l];
for(i=l+1; i<n; i++)
a[i][l] = 0;
for(i=0; i<l; i++)
a[i][l] = 0;
printf("\n Matricea %d

a sistemului\n", l+1);

for(i=0;i<n;i++)
{

for(j=0;j<n;j++)
printf("%8.3lf",a[i][j]);

printf("%8.3lf \n",a[i][n]);
}
for(i=0;i<n;i++)
X[i] = a[i][n]/a[i][i];
printf(" Solutia este\n");
for(i=0;i<n;i++)

printf("%8.3lf", [i] [j]);


printf("\n");
return 0;
}

Rezultatele

Matricea iniial a sistemului

Matricea 1 a sistemului

-8.000 7.000 3.000 6.000 10.000

-8.000 7.000 3.000 6.000 10.000

11.000 4.000 -2.000 3.000 47.000


13.000 7.000 25.000 3.000 61.000
5.000
30.000

-6.000

12.000

26.000

0.000
60.750
0.000
77.250
0.000
36.250

13.625
18.375
-1.625

2.125

11.250

29.875

12.750

13.875

Matricea 2 a sistemului

Matricea 3 a sistemului

-8.000 0.000 1.908 0.220


-21.211

-8.000 0.000 0.000 0.391


-20.880

0.000 13.625 2.125 11.250


60.750

0.000 13.625 0.000 11.441


61.118

0.000 0.000 27.009 -2.422 -4.679


0.000 0.000 14.128 31.092
43.495

29.750

0.000 0.000 27.009 0.000 -1.240


0.000 0.000 0.000 32.359
45.943

Matricea 4 a sistemului
-8.000 0.000 0.000 0.000
-21.211
0.000 13.625 0.000 0.000 44.875

Soluia sistemului este:


-21.436 44.875 -1.240 45.943

0.000 0.0000 27.009 0.000 -1.240


0.000 0.000 0.000 32.359
45.943

Concluzii:

Metoda Gauss este o metoda directa de rezolvare a sistemelor de ecuatii


liniare. Avantajele acestei metoda sunt ca se poate afla solutiile unor

sisteme de ecualii liniare de dimensiuni mari, mai este numita metoda


eliminarii complete.
Metoda Gauss-Jordan este o metoda de calcul al inverse unei matrici,
care se rezuma la reducerea acesteia la matricea unitate, datorita caruia se
mai numeste si metoda diagonalizarii. Principalul avantaj al acestei
metode este obtinerea valorii determinantului fara calculi suplimentare.
Scopul acesteia este reducerea erorilor de rotunjire recomandindu-se ca la
fiecare pas sa se aduca pe pozitia pivotului elemental de valoare absolut
maxima, procedeu numit pivotare.

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