Gauss implementation

This commit is contained in:
helldh 2026-01-17 00:16:14 +03:00
commit 1577ed77ed
10 changed files with 136 additions and 0 deletions

56
algo.py Normal file
View file

@ -0,0 +1,56 @@
from typing import List
def gauss_method(coefficients: List[List[float]],
free_members: List[float]) -> List[float]:
"""
Реализация метода Гаусса для квадратной системы уравнений Ax = b.
Алгоритм:
1. Формируем расширенную матрицу [A|b].
2. Для каждого столбца:
- Ищем pivot: первый ненулевой элемент в текущем столбце от текущей строки вниз.
- Если pivot текущая строка, меняем строки местами.
3. Обнуляем все элементы под pivot:
- Для каждой строки ниже: factor = current / pivot
- Текущая строка -= factor * строка с pivot
4. После приведения к ступенчатой форме выполняем обратную подстановку:
- Проходим снизу вверх
- Для каждой переменной: x[i] = (свободный член - сумма(коэффициентов[i][j] * x[j] для j>i)) / pivot
5. Возвращаем список решений x.
Входные данные:
- coefficients: квадратная матрица коэффициентов A
- free_members: вектор свободных членов b
Выход:
- Список решений x
"""
n = len(coefficients)
for i in range(n):
coefficients[i].append(free_members[i])
for i in range(n):
pivot_row = None
for r in range(i, n):
if coefficients[r][i] != 0:
pivot_row = r
break
if pivot_row is None:
raise ValueError("Система несовместна или вырождена")
if pivot_row != i:
coefficients[i], coefficients[pivot_row] = coefficients[pivot_row], coefficients[i]
pivot = coefficients[i][i]
for r in range(i + 1, n):
factor = coefficients[r][i] / pivot
for c in range(i, n + 1):
coefficients[r][c] -= factor * coefficients[i][c]
x = [0] * n
for i in range(n - 1, -1, -1):
sum_ax = sum(coefficients[i][j] * x[j] for j in range(i + 1, n))
x[i] = (coefficients[i][n] - sum_ax) / coefficients[i][i]
return x