Midrigan SI191 Lab 2
Midrigan SI191 Lab 2
al Republicii Moldova
RAPORT
despre lucrarea de laborator Nr. 2
la Metode si Modele de Calcul
Chişinău – 2020
Scopul lucrarii:
1) Să se rezolve sistemul de ecuații lineare Ax=b, utilizandii lineare Ax=b, utilizand
-Metoda eliminarii lui Gauss
-Metoda lui Cholesky
-Metoda iterativa a lui Jacobi cu o eroare
-Metoda iterativa a lui Gauss-Seidel cu o eroare
Codul:
#include <iostream>
#include <cmath>
#include <stdio.h>
int main() {
introducereaDatelor();
metodaGauss();
metodaCholesky();
metodaJacobi();
metodaGaussSeidel();
for (int row = 0; row < marimeMatrice; row++)
delete matrice[row];
delete matrice;
delete vectorulB;
return 0;
}
void introducereaDatelor() {
std::cout << "Introdu marimea matricii: ";
std::cin >> marimeMatrice;
matrice = new double*[marimeMatrice];
for (int row = 0; row < marimeMatrice; row++)
matrice[row] = new double[marimeMatrice];
vectorulB = new double[marimeMatrice];
std::cout << "Introdu datele matricii: " << std::endl;
for (int rand = 0; rand < marimeMatrice; rand++) {
for (int coloana = 0; coloana < marimeMatrice; coloana++) {
std::cin >> matrice[rand][coloana];
}
}
std::cout << std::endl << "Introdu datele vectorului b" << std::endl;
for (int i = 0; i < marimeMatrice; i++) {
std::cin >> vectorulB[i];
}
std::cout << std::endl;
}
void metodaGauss() {
double gaussmatrice[marimeMatrice][marimeMatrice+1];
for (int row = 0; row < marimeMatrice; row++) {
for (int col = 0; col < marimeMatrice+1; col++)
gaussmatrice[row][col] = matrice[row][col];
gaussmatrice[row][marimeMatrice] = vectorulB[row];
}
int rowWithMax;
double tempRow[marimeMatrice+1];
for (int idx = 0; idx < marimeMatrice; idx++) {
rowWithMax = idx;
for (int k = idx+1; k < marimeMatrice; k++) {
if (gaussmatrice[idx][idx] < gaussmatrice[k][idx])
rowWithMax = k;
}
if (rowWithMax != idx) {
for (int il = 0; il < marimeMatrice+1; il++) {
tempRow[il] = gaussmatrice[idx][il];
gaussmatrice[idx][il] = gaussmatrice[rowWithMax][il];
gaussmatrice[rowWithMax][il] = tempRow[il];
}
}
}
double t;
for (int i = 0; i < marimeMatrice-1; i++) {
for (int k = i+1; k < marimeMatrice; k++) {
t = -gaussmatrice[k][i] / gaussmatrice[i][i];
for (int cell = 0; cell < marimeMatrice+1; cell++) {
gaussmatrice[k][cell] += t*gaussmatrice[i][cell];
}
}
}
double results[4] = {};
double sum;
for (int i = marimeMatrice-1; i >= 0; i--) {
sum = gaussmatrice[i][marimeMatrice];
for (int termen = i+1; termen < marimeMatrice; termen++) {
sum -= gaussmatrice[i][termen]*results[termen];
}
results[i] = sum / gaussmatrice[i][i];
}
printf("\nRezultatele Metodei Eliminarii lui Gauss: \n");
for(int i = 0;i < sizeof(results)/sizeof(results[0]);i++){
printf("x%d = %f, ",i+1, results[i]);
}
}
void metodaCholesky() {
double metodaCholeskymatrice[marimeMatrice][marimeMatrice];
for (int row = 0; row < marimeMatrice; row++) {
for (int col = 0; col < marimeMatrice; col++)
metodaCholeskymatrice[row][col] = matrice[row][col];
}
double lowermatrice[marimeMatrice][marimeMatrice] = {};
double L_transpose[marimeMatrice][marimeMatrice] = {};
double sum;
Concluzie:
În aceasta lucare de laborator, utlizand un limbaj de programare și cunostinelei cunostinele
obtinute la cursuri, am realizat un sistem de ecuații lineare Ax=b, utilizandii liniare, utilizand 4 metode diferite.
Putem observa ca a fost rezolvat cu succes deoarece inlocuind x-urile în ecuații lineare Ax=b, utilizandii, obții lineare Ax=b, utilizandinem
răspunsul la care ne ași cunostineleteptam.