Вы находитесь на странице: 1из 9

Ministerul Învăţămîntului Republicii Moldova

U.T.M.
Facultatea CIM

La lucrarea de laborator Nr. 2


TEMA: Rezolvarea numerică a sistemelor de ecuaţii
liniare

A elaborat: Robu Iurie TI-013.


A verificat: Plămădeală V.

Chişinău 2003
Scopul lucrării:
1) Să se rezolve sistemul de ecuaţii liniare Ax=b,utilizînd
-metoda eliminării Gauss.
-metoda lui Cholesky(metoda rădăcinii pătrate).
-metoda iterativă a lui Jacobi cu o eroare e=0.001.
-metoda iterativă a lui Gauss-Seidel cu o eroare e=0,001 şi c=0,00001.
2) Să se determine numărul de iteraţii necesare pentru aproximarea soluţiei cu
eroarea dată e.Să se compare rezultatele.
3) Să se inverseze matricea A cu ajutorul metodei Jordan-Gauss..

Matricele iniţiale A,respectiv b


A[N][N]={8.1,-0.9,0.6,0.8,-0.9,14.3,0.3,0.7,0.6,0.3,7.9,-0.4,0.8,0.7,-0.4,10.6},
b[N]={7.2,10.3,-11.9,9.2};

Listingul programului:

#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <iomanip.h>
float deter(float a[10][10], int k);
int Allo(int lung);
int simetric(int lung);
void factor(int lung);
void trans(int lung);
void determinare(int lung);
void Choleschi(int lung);
void Iacobi(int lung);
void Gauss_Seidel(int lung);
int DiagDom(float a[10][10], int lung);
void Jordan_Gauss(int lung);
void Gauss(int lung);

float l[10][10]={0};
float a[10][10],b[10];
int lung;

void main(void)
{ clrscr();

int lung,p;
cout<<"Metodele:"<<endl;
cout<<" 1< Gaus"<<endl;
cout<<" 2< Choleschi "<<endl;
cout<<" 3< Iacobi"<<endl;
cout<<" 4< Gauss_Seidel"<<endl;
cout<<" 5< Jordan_Gauss"<<endl;
cout<<"Introdu num:";cin>>p;
clrscr();
cout<<"Numarul liniilor: ";
cin>>lung;
cout<<"Introdu tabloul A:\n";
for(int i=0;i<lung;i++)
for(int j=0;j<lung;j++)
cin>>a[i][j];

switch(p){
case 1:cout<<"Tabloul b:\n";
for(i=0;i<lung;i++)
cin>>b[i];
Gauss(lung);break;
case 2:cout<<"Tabloul b:\n";
for(i=0;i<lung;i++)
cin>>b[i];
Choleschi(lung);
break;
case 3:Iacobi(lung);break;
case 4:Gauss_Seidel(lung);break;
case 5:Jordan_Gauss(lung);break;
}

getche();
}
//------------------------------------------
void Choleschi(int lung)
{ if(!Allo(lung))
{cout<<"\nAceasta matricea nu este pozitiv definita!\n";
goto E; }
if(!simetric(lung))
{cout<<"\nAceasta matricea nu este simetrica !\n";
goto E; }
determinare(lung);
getche();
E:

}
//------------------------------------------
float deter(float a[10][10],int k)
{
if( k==1) return a[0][0];
if( k==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0];
float s=0;
float t[10][10]={0};
for(int i=0;i<k;i++)
{
int x=0;
for(int l=0;l<k;l++)
{ if(l!=i)
{
for(int m=1;m<k;m++)
t[x][m-1]=a[l][m];\
x++; }
}
if(i%2==0) s+=a[i][0]*deter(t,k-1);
else s-=a[i][0]*deter(t,k-1);
}
return s;
}
//------------------------------------------
int Allo(int lung)
{ for(int i=0;i<lung;i++)
if(a[i][i]<=0||deter(a,i+1)<=0) return 0;
return 1;
}
//------------------------------------------
int simetric(int lung)
{
for(int i=0;i<lung;i++)
for(int j=0;j<lung;j++)
if(a[i][j]!=a[j][i]) return 0;
return 1;
}
//------------------------------------------
void factor(int lung)
{
l[0][0]=(float)sqrt(a[0][0]);
for( int i=0;i<lung;i++)
l[i][0]=a[i][0]/l[0][0];
for(i=1;i<lung;i++)
{
float t=0;
for(int j=0;j<i;j++)
t+=l[i][j]*l[i][j];
l[i][i]=(float)sqrt(a[i][i]-t);
for(j=i;j<lung;j++)
{
float t1=0;
for(int k=0;k<i;k++)
t1 += l[j][k] * l[i][k];
l[j][i]=(a[j][i]-t1)/l[i][i];}
}
}
//------------------------------------------
void trans(int lung)
{
float t=0;
for( int i=0;i<lung;i++)
for(int j=0;j<i;j++)
{ t=l[i][j];
l[i][j]=l[j][i];
l[j][i]=t;
}
}
//------------------------------------------
void determinare(int lung)
{
factor(lung);
float y[10],x[10];
y[0]=b[0]/l[0][0];
for(int i=0;i<lung;i++)
{ float t=0;
for(int j=0;j<i;j++)
t+=l[i][j]*y[j];
y[i]=(b[i]-t)/l[i][i];}
trans(lung);
x[lung-1]=y[lung-1]/l[lung-1][lung-1];
float t;
for(i=lung-2;i>=0;i--)
{
t=0;
for(int j=i+1;j<lung;j++)
t+=l[i][j]*x[j];
x[i]=(y[i]-t)/l[i][i];}
for(i=0;i<lung;i++)
cout<<" x"<<i+1<<" = "<<x[i]<<'\n';
}
//-------------------------------------
void Iacobi(int lung)
{
float x[10],x1[10],q[10][10]={0},d[10],t,max;
int ni = 0;
for( int i=0; i<lung; i++)
for( int j=0; j<lung; j++)
if( i != j ) q[i][j] = - ( a[i][j] / a[i][i] );
else q[i][j] = 0;
if( !DiagDom(a,lung) )
{ cout<<"Aceasta matricea nu este diagonal dominata\n";
goto E; }
cout<<"Vector b:\n";
for( i=0; i<lung; i++) {
cin>>t;
d[i] = t / a[i][i]; }
cout<<"Eroare:\n";
float Eps;
cin>>Eps;
for( i=0; i<lung; i++)
x[i] = d[i];
do{
for( i=0; i<lung; i++)
x1[i] = x[i];
for( i=0; i<lung; i++)
{t = 0;
for( int j=0; j<lung; j++)
t += q[i][j] * x1[j]; // Jakobi
x[i] = t + d[i];
}
max = (float)fabs(x[0] - x1[0]);
for( i=1; i<lung; i++)
if( (float)fabs(x[i] - x1[i]) > max ) max = (float)fabs(x[i]-x1[i]);
ni ++; }
while( max > Eps);
for( i =0; i<lung; i++)
cout<<"x"<<i+1<<" = "<<x[i]<<endl;
cout<<"\nNumarul iteratiilor = "<<ni<<endl;
getche(); E:
}
//-------------------------------------
int DiagDom(float a[10][10], int lung)
{
float s;
for( int i=0; i<lung; i++)

{ s = 0;

for( int j=0; j<lung; j++)

if( i != j ) s += a[i][j];

if( a[i][i] < s ) return 0;

if( a[i][i] == 0) return 0; }

return 1;

}
//-----------------------------
void Gauss_Seidel(int lung)
{
float x[10],x1[10],q[10][10]={0},d[10],t,max;
int ni = 0;
for( int i=0; i<lung; i++)
for( int j=0; j<lung; j++)
if( i != j ) q[i][j] = - ( a[i][j] / a[i][i] );
else q[i][j] = 0;
if( !DiagDom(a,lung) )
{ cout<<"Aceasta matricea nu este diagonal dominata\n";
goto E; }
cout<<"Vector b:\n";
for( i=0; i<lung; i++) {
cin>>t;
d[i] = t / a[i][i]; }
cout<<"Eroare:\n";
float Eps;
cin>>Eps;
for( i=0; i<lung; i++)
x[i] = d[i];
do{
for( i=0; i<lung; i++)
x1[i] = x[i];
for( i=0; i<lung; i++)
{t = 0;
for( int j=0; j<lung; j++)
t += q[i][j] * x[j]; // Gauss - Seidel
x[i] = t + d[i];
}
max = (float)fabs(x[0] - x1[0]);
for( i=1; i<lung; i++)
if( (float)fabs(x[i] - x1[i]) > max ) max = (float)fabs(x[i]-x1[i]);
ni ++; }
while( max > Eps);
for( i =0; i<lung; i++)
cout<<"x"<<i+1<<" = "<<x[i]<<endl;
cout<<"\nNumarul iteratiilor = "<<ni<<endl;
getche(); E:
}
//---------------------------------
void Jordan_Gauss(int lung)
{
float ai[10][10];
int i,j,k;
float x,y;
for( i=0; i<lung; i++)
for( j=0; j<lung; j++)
if( i != j ) ai[i][j] = 0;
else ai[i][j] = 1;
for( k=0; k<lung; k++)
{
x = a[k][k];
for( i=0; i<lung; i++)
{
y = a[i][k];
if( i != k )
for( j=0; j<lung; j++)
{
ai[i][j] = ai[i][j] - y * ai[k][j] / x;
a[i][j] = a[i][j] - y * a[k][j] / x;
}
}
for( j=0; j<lung; j++)
{
ai[k][j] = ai[k][j] / x;
a[k][j] = a[k][j] / x;
}
}

cout<<"Matricea inversa:\n";
for( i=0; i<lung; i++)
{
for( j=0; j<lung; j++)
cout<<ai[i][j]<<" ";
cout<<endl;
}
}
//------------------------------------------
void Gauss(int lung)
{
int l,j,i,m,k, rez=0;
double temp, t;
for (l = 0; l < lung; l++)
{ m = l+1; j = l;
for (i = l+1; i < lung; i++)
if ( fabs(a[i][l]) > fabs(a[j][l]) ) j=i;
if (!a[j][l]) {
rez=1;
break;
}
if (j != l)
{
for (k = l; k < lung; k++)
{
temp = a[l][k];
a[l][k] = a[j][k];
a[j][k] = temp;
}
temp = b[l];
b[l] = b[j];
b[j] = temp;
}
i = l+1;
if (a[l+1][l])
do
{
t = a[i][l] / a[l][l];
b[i] -= t * b[l];
for (k = 0; k < lung; k++) a[i][k] -= t * a[l][k];
i++;
}
while (i<lung);
}
l--;
if (!rez)
do {
b[l] /= a[l][l];
m = l--;
for(i = 0; i <= l; i++) b[i] -= a[i][m] * b[m];
}
while (l >= 0);
if (!rez)
{
cout <<endl<< "Resultatul este:" << endl;
for(i = 0; i < lung; i++) cout<<"x["<<i<<"]="<<b[i]<<endl;
cout << endl;
}
else cout <<endl<< "Determinantul matricei este nul! ";
}
Rezultatele obţinute:

Metoda lui Gauss Solutiile sunt:

x0 x1 x2 x3
1.02603 0.784755 -1.579674 0.679054

Metoda lui Cholesky Solutiile ecuatiei sunt:

x0 x1 x2 x3
1.02603 0.784755 -1.579674 0.679054

Metoda lui Jacobi Solutiile ecuatiei sunt:

x0 x1 x2 x3
1.025822 0.78463 -1.579525 0.67921
Numarul de iteratii 4
.Eroarea 0.001

Metoda lui Gauss-Seidel Solutiile ecuatiei sunt:

x0 x1 x2 x3
1.026023 0.784753 -1.579673 0.679055
Numarul de iteratii 4.Eroarea 0.001

Concluzie:În această lucrare de laborator am făcut cunoştinţă cu cele patru


metode de rezolvare numerică a sistemelor de ecuaţii liniare .În urma rezultatelor
obţinute,din exemplul dat, cea mai eficientă metodă iterativă de calculare a
rădăcinelor sisremelor de ecuaţii a fost metoda Gauss-Seidel.

Вам также может понравиться

  • MMC2 Modulul2
    MMC2 Modulul2
    Документ16 страниц
    MMC2 Modulul2
    ViorelRotari
    Оценок пока нет
  • MMC Lab2
    MMC Lab2
    Документ6 страниц
    MMC Lab2
    Mihail Boran
    Оценок пока нет
  • Laborator-2mmc Balan Ion
    Laborator-2mmc Balan Ion
    Документ12 страниц
    Laborator-2mmc Balan Ion
    Ion Bn
    Оценок пока нет
  • Raport: La Disciplina Metode Și Modele de Calcul 1
    Raport: La Disciplina Metode Și Modele de Calcul 1
    Документ9 страниц
    Raport: La Disciplina Metode Și Modele de Calcul 1
    Anya Mr
    Оценок пока нет
  • Laborator-4 MMC1 Balan Ion
    Laborator-4 MMC1 Balan Ion
    Документ6 страниц
    Laborator-4 MMC1 Balan Ion
    Ion Bn
    Оценок пока нет
  • Lab 2 MMC Boj
    Lab 2 MMC Boj
    Документ12 страниц
    Lab 2 MMC Boj
    Andrian Brinzan
    Оценок пока нет
  • (ASDN) Laborator n#2
    (ASDN) Laborator n#2
    Документ5 страниц
    (ASDN) Laborator n#2
    Dionis Bolun
    Оценок пока нет
  • Raport Lab 2 ASDN
    Raport Lab 2 ASDN
    Документ4 страницы
    Raport Lab 2 ASDN
    Jessica Alvarez
    Оценок пока нет
  • Lab 7 Cazacu POO
    Lab 7 Cazacu POO
    Документ8 страниц
    Lab 7 Cazacu POO
    Iura Cazacu
    Оценок пока нет
  • Raport ASDN Lab 1
    Raport ASDN Lab 1
    Документ5 страниц
    Raport ASDN Lab 1
    Olea Zubcova
    Оценок пока нет
  • LFA Lab - 2
    LFA Lab - 2
    Документ15 страниц
    LFA Lab - 2
    RoscaFlorin
    100% (1)
  • Lab NR 4 MMC2 Duca Dumitru TI 194
    Lab NR 4 MMC2 Duca Dumitru TI 194
    Документ11 страниц
    Lab NR 4 MMC2 Duca Dumitru TI 194
    Santa Claus
    Оценок пока нет
  • CDE (Lab 2)
    CDE (Lab 2)
    Документ5 страниц
    CDE (Lab 2)
    BlandjLdhui
    Оценок пока нет
  • Lab 2 POO AI-191
    Lab 2 POO AI-191
    Документ8 страниц
    Lab 2 POO AI-191
    Carolin
    Оценок пока нет
  • Lab 4 Apa
    Lab 4 Apa
    Документ21 страница
    Lab 4 Apa
    crismaruion
    Оценок пока нет
  • Lab 3 BTD
    Lab 3 BTD
    Документ6 страниц
    Lab 3 BTD
    Trifan Petru
    100% (1)
  • Metode Și Modele de Calcul 2
    Metode Și Modele de Calcul 2
    Документ6 страниц
    Metode Și Modele de Calcul 2
    I LOVE ME
    Оценок пока нет
  • Ll1 Mmc1 Mereuta Ana Ti-192
    Ll1 Mmc1 Mereuta Ana Ti-192
    Документ11 страниц
    Ll1 Mmc1 Mereuta Ana Ti-192
    Anya Mr
    Оценок пока нет
  • ASDN2
    ASDN2
    Документ6 страниц
    ASDN2
    Viktor Dobrovolschi
    Оценок пока нет
  • Lucrarea de Laborator NR 5 POO
    Lucrarea de Laborator NR 5 POO
    Документ4 страницы
    Lucrarea de Laborator NR 5 POO
    Alexandru Burdeniuc
    Оценок пока нет
  • Lab 3 Cazacu POO
    Lab 3 Cazacu POO
    Документ4 страницы
    Lab 3 Cazacu POO
    Iura Cazacu
    Оценок пока нет
  • CDE Lab 2
    CDE Lab 2
    Документ3 страницы
    CDE Lab 2
    Trifan Petru
    Оценок пока нет
  • Lab 4 APA
    Lab 4 APA
    Документ20 страниц
    Lab 4 APA
    Cristi Poselețchi
    Оценок пока нет
  • CDE Lab 1
    CDE Lab 1
    Документ6 страниц
    CDE Lab 1
    ViorelRotari
    Оценок пока нет
  • Lucrarea de Laborator NR 4 POO
    Lucrarea de Laborator NR 4 POO
    Документ10 страниц
    Lucrarea de Laborator NR 4 POO
    Alexandru Burdeniuc
    Оценок пока нет
  • Lab 4 MN
    Lab 4 MN
    Документ3 страницы
    Lab 4 MN
    nn nnn
    Оценок пока нет
  • ASDN - Lab3 OnicaD grTI 113
    ASDN - Lab3 OnicaD grTI 113
    Документ6 страниц
    ASDN - Lab3 OnicaD grTI 113
    Dinu RaceClan
    Оценок пока нет
  • Raport 5 CDE
    Raport 5 CDE
    Документ7 страниц
    Raport 5 CDE
    crismaruion
    Оценок пока нет
  • Lab MMC2
    Lab MMC2
    Документ5 страниц
    Lab MMC2
    Maxim
    Оценок пока нет
  • Lab6 CDE
    Lab6 CDE
    Документ8 страниц
    Lab6 CDE
    Dinu Dogaru
    Оценок пока нет
  • Raport CDE Lab.2
    Raport CDE Lab.2
    Документ7 страниц
    Raport CDE Lab.2
    crismaruion
    100% (1)
  • Lab3 Asdn
    Lab3 Asdn
    Документ7 страниц
    Lab3 Asdn
    mircea22
    Оценок пока нет
  • ASDN Lab 1print
    ASDN Lab 1print
    Документ6 страниц
    ASDN Lab 1print
    Octavian Macovetchi
    Оценок пока нет
  • LAb 3 CDE
    LAb 3 CDE
    Документ4 страницы
    LAb 3 CDE
    cristian
    Оценок пока нет
  • Lab1 Poo
    Lab1 Poo
    Документ15 страниц
    Lab1 Poo
    ciumac andrian
    100% (1)
  • Lab 1 BTD
    Lab 1 BTD
    Документ9 страниц
    Lab 1 BTD
    megadanyx
    Оценок пока нет
  • Lab2 Poo
    Lab2 Poo
    Документ5 страниц
    Lab2 Poo
    Maria Codreanu
    Оценок пока нет
  • Metode Si Modele de Calcul
    Metode Si Modele de Calcul
    Документ11 страниц
    Metode Si Modele de Calcul
    I LOVE ME
    Оценок пока нет
  • Lab 3 BTD Axenti
    Lab 3 BTD Axenti
    Документ6 страниц
    Lab 3 BTD Axenti
    Alina Axenti
    Оценок пока нет
  • Raporta S DN
    Raporta S DN
    Документ13 страниц
    Raporta S DN
    rosca9doinita
    100% (1)
  • PS NR 2
    PS NR 2
    Документ8 страниц
    PS NR 2
    DASdsa fsa f
    Оценок пока нет
  • Lab3 CDE
    Lab3 CDE
    Документ8 страниц
    Lab3 CDE
    Dinu Dogaru
    Оценок пока нет
  • Laborator 1 MMC
    Laborator 1 MMC
    Документ9 страниц
    Laborator 1 MMC
    Cristian Popa
    Оценок пока нет
  • MMC 2
    MMC 2
    Документ6 страниц
    MMC 2
    Ion Mardari
    Оценок пока нет
  • Laborator 1 C
    Laborator 1 C
    Документ17 страниц
    Laborator 1 C
    Dorin Graur
    Оценок пока нет
  • Raport Lab 3 Poo Supraincarcarea Operatorilor
    Raport Lab 3 Poo Supraincarcarea Operatorilor
    Документ7 страниц
    Raport Lab 3 Poo Supraincarcarea Operatorilor
    Uyukee
    Оценок пока нет
  • Laborator Nr2 Varianta 30 Asdn
    Laborator Nr2 Varianta 30 Asdn
    Документ5 страниц
    Laborator Nr2 Varianta 30 Asdn
    StasLuchianciuc
    Оценок пока нет
  • POO Lab7
    POO Lab7
    Документ6 страниц
    POO Lab7
    Dani Ela
    Оценок пока нет
  • Laborator 3 PI-2020
    Laborator 3 PI-2020
    Документ4 страницы
    Laborator 3 PI-2020
    Sandu Zastavnetchi
    Оценок пока нет
  • Lab 1
    Lab 1
    Документ10 страниц
    Lab 1
    Ion Cornea
    Оценок пока нет
  • Lab4 ASDN
    Lab4 ASDN
    Документ3 страницы
    Lab4 ASDN
    Dinu Dogaru
    Оценок пока нет
  • Lab 4 CDE Axenti
    Lab 4 CDE Axenti
    Документ6 страниц
    Lab 4 CDE Axenti
    Alina Axenti
    Оценок пока нет
  • Lab 6
    Lab 6
    Документ4 страницы
    Lab 6
    Егор Казаков
    Оценок пока нет
  • Lab 5 BTD Axenti
    Lab 5 BTD Axenti
    Документ6 страниц
    Lab 5 BTD Axenti
    Alina Axenti
    100% (1)
  • Probleme C++
    Probleme C++
    Документ9 страниц
    Probleme C++
    Aida Voicu
    Оценок пока нет
  • Sofroni Maxim Ai-211 MN Lab2
    Sofroni Maxim Ai-211 MN Lab2
    Документ11 страниц
    Sofroni Maxim Ai-211 MN Lab2
    Максим Софрони
    Оценок пока нет
  • Fisa Probleme Arbori Cu Radacina Static
    Fisa Probleme Arbori Cu Radacina Static
    Документ9 страниц
    Fisa Probleme Arbori Cu Radacina Static
    Antoneta Lazarescu
    Оценок пока нет
  • Metode de Sortare
    Metode de Sortare
    Документ5 страниц
    Metode de Sortare
    Ignatescu Dan
    Оценок пока нет
  • Rezolvare Teste de Antrenament Setul2-1
    Rezolvare Teste de Antrenament Setul2-1
    Документ10 страниц
    Rezolvare Teste de Antrenament Setul2-1
    ANDREEA
    Оценок пока нет
  • Informatica Clasa A XI A
    Informatica Clasa A XI A
    Документ19 страниц
    Informatica Clasa A XI A
    Адриа Мини
    Оценок пока нет
  • 612
    612
    Документ73 страницы
    612
    verginarojnita
    Оценок пока нет
  • Pocatilu Ivan Cazan
    Pocatilu Ivan Cazan
    Документ8 страниц
    Pocatilu Ivan Cazan
    verginarojnita
    Оценок пока нет
  • Indrumar
    Indrumar
    Документ160 страниц
    Indrumar
    verginarojnita
    Оценок пока нет
  • Capitolul 4
    Capitolul 4
    Документ5 страниц
    Capitolul 4
    verginarojnita
    Оценок пока нет