Эффективные методы устранения Гаусса в Python с использованием NumPy: подробное руководство

Исключение Гаусса — популярный численный метод, используемый в линейной алгебре для решения систем линейных уравнений. В этой статье блога мы рассмотрим различные эффективные методы реализации исключения Гаусса в Python с использованием мощной библиотеки NumPy. Каждый метод будет сопровождаться примерами кода, иллюстрирующими его использование и демонстрирующими его эффективность. К концу этой статьи вы получите четкое представление о различных методах исключения Гаусса и сможете выбрать наиболее подходящий для ваших конкретных нужд.

Методы:

  1. Наивное исключение Гаусса:

    • Описание: простейшая форма исключения Гаусса, также известная как алгоритм исключения Гаусса.
    • Пример кода:

      import numpy as np
      
      def gauss_elimination(A, b):
       n = len(b)
       for k in range(n-1):
           for i in range(k+1, n):
               factor = A[i, k] / A[k, k]
               A[i, k+1:] -= factor * A[k, k+1:]
               b[i] -= factor * b[k]
       x = np.zeros(n)
       for k in range(n-1, -1, -1):
           x[k] = (b[k] - np.dot(A[k, k+1:], x[k+1:])) / A[k, k]
       return x
  2. Частичное вращение:

    • Описание: модификация простого метода исключения Гаусса, которая помогает предотвратить деление на ноль и уменьшает числовые ошибки.
    • Пример кода:

      import numpy as np
      
      def partial_pivot(A, b):
       n = len(b)
       for k in range(n-1):
           if np.abs(A[k, k]) < 1e-15:
               max_index = np.argmax(np.abs(A[k+1:, k])) + k + 1
               A[[k, max_index]] = A[[max_index, k]]
               b[[k, max_index]] = b[[max_index, k]]
           for i in range(k+1, n):
               factor = A[i, k] / A[k, k]
               A[i, k+1:] -= factor * A[k, k+1:]
               b[i] -= factor * b[k]
       x = np.zeros(n)
       for k in range(n-1, -1, -1):
           x[k] = (b[k] - np.dot(A[k, k+1:], x[k+1:])) / A[k, k]
       return x
  3. Полный поворот:

    • Описание: расширенная версия метода исключения Гаусса, которая выполняет замену строк и столбцов для достижения числовой стабильности.
    • Пример кода:

      import numpy as np
      
      def complete_pivot(A, b):
       n = len(b)
       rows = np.arange(n)
       cols = np.arange(n)
       for k in range(n-1):
           pivot = np.argmax(np.abs(A[rows[k:, k:, ]]))  # Find the maximum element for complete pivot
           pivot_row, pivot_col = np.unravel_index(pivot, (n-k, n-k))
           pivot_row += k
           pivot_col += k
           A[[k, pivot_row]] = A[[pivot_row, k]]
           A[:, [k, pivot_col]] = A[:, [pivot_col, k]]
           b[[k, pivot_row]] = b[[pivot_row, k]]
           rows[[k, pivot_row]] = rows[[pivot_row, k]]
           cols[[k, pivot_col]] = cols[[pivot_col, k]]
           for i in range(k+1, n):
               factor = A[i, k] / A[k, k]
               A[i, k+1:] -= factor * A[k, k+1:]
               b[i] -= factor * b[k]
       x = np.zeros(n)
       for k in range(n-1, -1, -1):
           x[k] = (b[k] - np.dot(A[k, k+1:], x[k+1:])) / A[k, k]
       return x