<jupyter_start><jupyter_text>Задача по численным методам> Задача : программирование решения систем СЛАУ Содержание работы:1.   Реализация метода Гаусса2.   Реализация метода Зейделя___ Импорт библиотеки линейной алгебры<jupyter_code>import numpy as np<jupyter_output><empty_output><jupyter_text>Подготовка входных данных Константа, которая задаётся исходя из номера варианта<jupyter_code>n = 2/3<jupyter_output><empty_output><jupyter_text>Матрица А, где последний столбец - это транспонированный вектор B---*Объединение было произведено для удобства при работе с методом Зейделя*<jupyter_code>matrix_ex = np.array([
     [5.8, 0.2  , 1.3, 0.7+n, 1.9+4.8*n],
     [4.0, 6.3+n, 0.9, 1.0  , 0.8+4*n  ],
     [2.0, 1.3  , 5+n, 0.5  , 9.5+4*n  ],
     [1+n, 2.5  , 3.3, 9.0  , n*n+n-2.4],
])<jupyter_output><empty_output><jupyter_text>Матрица A<jupyter_code>matrix_a = np.array([
     [5.8, 0.2  , 1.3, 0.7+n],
     [4.0, 6.3+n, 0.9, 1.0  ],
     [2.0, 1.3  , 5+n, 0.5  ],
     [1+n, 2.5  , 3.3, 9.0  ],
])<jupyter_output><empty_output><jupyter_text>Вектор B<jupyter_code>x = np.array([1.9+4.8*n, 0.8+4*n, 9.5+4*n, n*n+n-2.4])<jupyter_output><empty_output><jupyter_text>Реализация метода Гаусса<jupyter_code>def gauss(A: np.array) -> list:
    """
    Функция решение СЛАУ по методу Гаусса

    Входные данные:
    A - матрица
    Выходные данные:
    x - список корней    
    """
    n = len(A)

    for i in range(0, n):
        # Поиск максимального значения в столбце
        maxEl = abs(A[i][i])
        maxRow = i
        for k in range(i + 1, n):
            if abs(A[k][i]) > maxEl:
                maxEl = abs(A[k][i])
                maxRow = k

        # Поменять местами строку с макс.значением с текущей
        for k in range(i, n + 1):
            tmp = A[maxRow][k]
            A[maxRow][k] = A[i][k]
            A[i][k] = tmp

        # Деление строк
        for k in range(i + 1, n):
            c = -A[k][i] / A[i][i]
            for j in range(i, n + 1):
                if i == j:
                    A[k][j] = 0
                else:
                    A[k][j] += c * A[i][j]

    # Решить равенство Ax=b
    x = [0 for i in range(n)]
    for i in range(n - 1, -1, -1):
        x[i] = A[i][n] / A[i][i]
        for k in range(i - 1, -1, -1):
            A[k][n] -= A[k][i] * x[i]
    return x<jupyter_output><empty_output><jupyter_text>Реализация метода Зейделя<jupyter_code>def seidel(A: np.array, b: np.array, eps: float) -> np.array:
    """
    Функция решение СЛАУ по методу Зейделя

    Входные данные:
    A - матрица,
    B - вектор,
    eps - погрешность
    Выходные данные:
    x - список корней    
    """
    #Предел итераций
    ITERATION_LIMIT = 1000

    #Массив для проверки на погрешность
    x = np.zeros_like(b) 

    for it_count in range(1, ITERATION_LIMIT):
      x_new = np.zeros_like(x)

      for i in range(A.shape[0]):
        #Итерационная формула
        s1 = np.dot(A[i, :i], x_new[:i]) 
        s2 = np.dot(A[i, i + 1 :], x[i + 1 :]) 
        x_new[i] = (b[i] - s1 - s2) / A[i, i] 
  
      if np.allclose(x, x_new, rtol=eps): 
        break 
      x = x_new 

    return x<jupyter_output><empty_output><jupyter_text>Вызов функций<jupyter_code>gauss(matrix_ex)
seidel(matrix_a, x, 1e-11)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1501988375650046, 'fraction_numerical': 0.03548485775466503, 'mean_word_length': 2.2963709677419355, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 37, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '659395', 'license': 'MIT', 'n_tokens_mistral': 1550, 'n_tokens_neox': 1589, 'n_words': 303, 'path': 'SLAU-RU.ipynb', 'repo_name': 'ZeedKey/College-Math-Exercises', 'size': '3269'}