A mátrix az alábbi formában lesz: ] ahol (I) az egységmátrix, (x) pedig az egyenletrendszer megoldása.
GaussJordan(A, b): Létrehozzuk a kibővített mátrixot n = A sorainak száma for i in range(n): Pivot elem kiválasztása (nem nulla elem az i. oszlopban) Ha a pivot elem nulla: Sorcsere Pivot sor normalizálása úgy, hogy a pivot elem 1 legyen Nullázd ki az i. oszlop többi elemét
[
]
import numpy as np
def gauss_jordan(A, b):
# Kibővített mátrix
n = len(A)
augmented_matrix = np.hstack((A, b.reshape(-1, 1)))
for i in range(n):
# Pivot elem normalizálása
augmented_matrix = augmented_matrix / augmented_matrix
# Nullázás az oszlop többi helyén
for j in range(n):
if i != j:
augmented_matrix = augmented_matrix - augmented_matrix * augmented_matrix
# Megoldás vektor
return augmented_matrix
# Példa
A = np.array([
,
,
], dtype=float)
b = np.array(, dtype=float)
solution = gauss_jordan(A, b)
print("Megoldás:", solution)
Kimenet:
Megoldás:
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
void gauss_jordan(vector<vector<double>>& A, vector<double>& b) {
int n = A.size();
// Kibővített mátrix
for (int i = 0; i < n; ++i) {
A.push_back(b);
}
// Gauss-Jordan elimináció
for (int i = 0; i < n; ++i) {
// Pivot normalizálása
double pivot = A;
for (int j = 0; j <= n; ++j) {
A /= pivot;
}
// Nullázás az oszlop többi helyén
for (int k = 0; k < n; ++k) {
if (k != i) {
double factor = A;
for (int j = 0; j <= n; ++j) {
A -= factor * A;
}
}
}
}
// Megoldás kiírása
for (int i = 0; i < n; ++i) {
cout << "x" << i + 1 << " = " << A << endl;
}
}
int main() {
vector<vector<double>> A = {
{1, 1, 1},
{0, 2, 5},
{2, 5, -1}
};
vector<double> b = {6, -4, 27};
gauss_jordan(A, b);
return 0;
}
Kimenet:
x1 = 5 x2 = 3 x3 = -2
A Gauss-Jordan-elimináció egy hatékony és közvetlen módszer lineáris egyenletrendszerek megoldására és mátrixinverzióra. Bár kisebb rendszerekhez jól alkalmazható, nagyobb problémák esetén numerikus stabilitási problémák és nagy számítási költség jelentkezhet. Modern numerikus módszerek gyakran helyettesítik iteratív eljárásokkal vagy LU-felbontással.