wild-mathing/algo.py
2026-01-17 00:16:14 +03:00

56 lines
2.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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