You are on page 1of 9

Ministerul Educaţiei, Culturii și Cercetării al Republicii

Moldova
Universitatea Tehnică a Moldovei

RAPORT
Lucrarea de laborator nr.2
la”Metode si Modele de Calcul.”

A efectuat: Neonil Roșca


st. gr. C-171

A verificat: Istrati D.

Chişinău -2018
Scopul lucrarii:
1) Să se resolve sistemul de ecuații liniare Ax=b , utilizînd:
- Metoda lui Cholesky
- Metoda lui Jacobi
- Metoda lui Gauss-Seidel.

7 −4 1
(
A= −4 6 −1
1 −1 4 )
6
( )
b= −3
−3

Metoda lui Cholesky

#include<iostream> int main()


#include<conio.h> {
using namespace std; int n,i,k,j,p;
float a[10][10],l[10][10]={0},u[10] for(p=1;p<=k-1;p++)
[10]={0},sum,b[10],z[10]={0},x[10]={0};
sum+=l[k][p]*u[p][j];
// clrscr();
u[k][j]=(a[k][j]-sum)/l[k][k];
cout<<"Dati gradul matricei! "<<endl;
}
cin>>n;
}
cout<<"Introduceti coeficientii matricei:
cout<<endl<<endl<<"Matricea LU este:
";
"<<endl;
for(i=1;i<=n;i++)
for(i=1;i<=n;i++)
{
{
cout<<"\n Linia"<<i<<" ";
for(j=1;j<=n;j++)
for(j=1;j<=n;j++)
cout<<l[i][j]<<" ";
cin>>a[i][j];
cout<<endl;
}
}
cout<<"Introduceti elementele matricei
cout<<endl;
b"<<endl;
for(i=1;i<=n;i++)
for(i=1;i<=n;i++)
{
cin>>b[i];
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
cout<<u[i][j]<<" ";
{
cout<<endl;
u[k][k]=1;
}
for(i=k;i<=n;i++)
{
//***** FINDING Z; LZ=b*********//
sum=0;
for(p=1;p<=k-1;p++)
for(i=1;i<=n;i++)
sum+=l[i][p]*u[p][k];
{
l[i][k]=a[i][k]-sum;
sum=0;
}
for(p=1;p<i;p++)
sum+=l[i][p]*z[p];
for(j=k+1;j<=n;j++)
z[i]=(b[i]-sum)/l[i][i];
{
}
sum=0;
for(i=n;i>0;i--) cout<<endl<<"Solutiile:"<<endl;
{ for(i=1;i<=n;i++)
sum=0; cout<<endl<<x[i];
for(p=n;p>i;p--)
sum+=u[i][p]*x[p]; getch();
x[i]=(z[i]-sum)/u[i][i]; return 0;
} }

Metoda lui Jacobi

#include<stdio.h> printf("\n\nIntroduceti marimea


ecuatiei :: ");
#include<conio.h>
scanf("%d",&n);
#include<math.h>
for(i=1;i<=n;i++)
#include<stdlib.h>
{
int main()
printf("\n\nIntroduceti
{
coeficientii ecuatiei %d si raspunsul:\n",i);
float a[20]
for(j=1;j<=n+1;j++)
[20],x[20],e,big,temp,relerror,sum;
scanf("%f",&a[i][j]);
int n,i,j,maxit,itr;
}
char ch;
printf("\n\nIntroduceti eroarea si if(relerror>big)
numarul de iteratii :: \n");
big=relerror;
scanf("%f%d",&e,&maxit);
x[i]=temp;
for(i=1;i<=n;i++)
}
x[i]=0;
if(big<=e)
for(itr=1;itr<=maxit;itr++)
{
{
printf("Converge la solutie
big=0; %d iteratii:\n",itr);
for(i=1;i<=n;i++) for(i=1;i<=n;i++)
{ printf("\n%.4f\t",x[i]);
sum=0; getch();
for(j=1;j<=n;j++) exit(1);
{ }
if(i!=j
) }
sum=sum+a[i] printf("Nu converge in %d
[j]*x[j]; iteratii:\n",maxit);
} getch();
temp=(a[i][n+1]-
sum)/a[i][i];
}
relerror=fabs((x[i]-
temp)/temp);
Metoda lui Gauss-Seidel.
#include<stdio.h> for(count = 1; count <= limit;
count++)
#include<math.h>
{
int main()
sum = 0;
{ int count, t, limit;
for(t = 1; t <= limit; t++)
float temp, error, a, sum = 0;
{
float matrix[10][10], y[10],
allowed_error; if(t != count)
printf("\nIntroduceti numarul {
ecuatiilor:\t");
sum = sum +
scanf("%d", &limit); matrix[count][t] * y[t];
printf("introduceti eroarea:\t"); }
scanf("%f", &allowed_error); }
printf("\nIntroduceti coeficientii\n"); temp = (matrix[count][limit +
1] - sum) / matrix[count][count];
for(count = 1; count <= limit; count++)
error = fabs(y[count] - temp);
{
if(error > a)
for(t = 1; t <= limit + 1; t++)
{
{
a = error;
printf("Matricea[%d][%d] = ",
count, t); }
scanf("%f", &matrix[count][t]); y[count] = temp;
} printf("\nY[%d]=\t%f", count,
y[count]);
}
}
for(count = 1; count <= limit; count++)
printf("\n");
{
}
y[count] = 0;
while(a >= allowed_error);
}
printf("\n\nSolutii\n\n");
do
for(count = 1; count <= limit; count++)
{
{
a = 0;
printf("\nY[%d]:\t%f", count, return 0;
y[count]);
}
}

Concluzie:
In urma efectuarii laboratorului au fost obtinute anumite abilitati in domeniu MMC si anume
studierea metodelor: Cholesky ,Jacobi, Gauss-Seidel.
.

You might also like