Metoda Gauss de eliminare

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:

metoda eliminarii lui Gauss1

Sistemul se rezolvă prin metoda substituției inverse conform relațiilor:

metoda eliminarii lui Gauss2

3. Exemplu:

Să se aplice metoda de eliminare a lui Gauss pentru rezolvarea sistemului:

metoda eliminarii lui Gauss3

Rezolvare:

Matricea A asociată sistemului (în etapa 1) și vectorul termenilor liberi b sunt:

metoda eliminarii lui Gauss4

metoda eliminarii lui Gauss5

Soluțiile sunt:

metoda eliminarii lui Gauss6

adică soluția sistemului este:

metoda eliminarii lui Gauss7

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

metoda eliminarii lui Gauss8

5. Implementare:

Visual_C++_Icon
Cod Sursa C++
#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

metoda eliminarii lui Gauss rezultat

Leave a comment