1. Tema
Rezolvarea numerică a sistemelor algebrice liniare prin metoda de eliminare a lui Gauss.
Un sistem de n ecuații liniare cu n necunoscute are forma Ax=b, unde A este o matrice pătrată, nesingulară, de dimensiune nxn, iar x și b sunt vectori coloană de dimensiune n.
2. Metoda
Notăm, inițial, A(1)=A, b(1)=b, indicele superior reprezentând etapa.
Relațiile de recurență în metoda de eliminare a lui Gauss sunt:
Sistemul se rezolvă prin metoda substituției inverse conform relațiilor:
3. Exemplu:
Să se aplice metoda de eliminare a lui Gauss pentru rezolvarea sistemului:
Rezolvare:
Matricea A asociată sistemului (în etapa 1) și vectorul termenilor liberi b sunt:
Soluțiile sunt:
adică soluția sistemului este:
4. Algoritmul
Algoritmul asociat metodei de eliminare Gauss este:
Intrări:
- n = numărul de ecuații și necunoscute ale sistemului
- A = matricea sistemului
- b = vectorul termenilor liberi
Ieșiri:
- x = vectorul soluție
5. Implementare:
#include "stdafx.h" #include using namespace std; #define max 15 void main(void) { float s; float a[max + 1][max + 1][max + 1], b[max + 1][max + 1], x[max + 1]; int n, i, j, k; cout << "dati dimensiunea matricii" << endl; cin >> n; cout << "dati matricea sistemului " << endl; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) { cout << "a[" << i << j << "]="; cin >> a[i][j][1]; } cout << endl; cout << "dati vectorul termenilor liberi " << endl; for (i = 1; i <= n; i++) { cout << "b[" << i << "]="; cin >> b[i][1]; } cout << endl; for (k = 1; k <= n - 1; k++) { for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) { if (i <= k)a[i][j][k + 1] = a[i][j][k]; else if (j <= k)a[i][j][k + 1] = 0; else a[i][j][k + 1] = a[i][j][k] - a[i][k][k] * a[k][j][k] / a[k][k][k]; } for (i = 1; i <= n; i++) if (i <= k)b[i][k + 1] = b[i][k]; else b[i][k + 1] = b[i][k] - a[i][k][k] * b[k][k] / a[k][k][k]; } x[n] = b[n][n] / a[n][n][n]; for (i = n - 1; i >= 1; i--) { s = 0; for (j = i + 1; j <= n; j++) s = s + a[i][j][i] * x[j]; x[i] = (b[i][i] - s) / a[i][i][i]; } cout << "Solutia aproximativa este:" << endl; for (i = 1; i <= n; i++) cout << x[i] << ' '; cout << endl; system("pause"); }
Rezultat