Перейти к содержимому
Ступенчатый вид матрицы. Метод .rref().

Ступенчатый вид матрицы. Метод .rref().

Матрица ступенчатого вида (row echelon form, REF) — это специальная форма представления матрицы, которая упрощает решение системы линейных уравнений (СЛАУ) и позволяет легко определить ранг матрицы. Преобразование матрицы к ступенчатому виду - это один из этапов решения СЛАУ методом Гаусса.

Определение матрицы ступенчатого вида:

Матрица находится в ступенчатом виде, если выполняются следующие условия:

  1. Нулевые строки внизу: Все нулевые строки (строки, состоящие только из нулей) находятся внизу матрицы.
  2. Ведущие элементы справа: Для каждой ненулевой строки, ведущий элемент (leading entry) - это первый ненулевой элемент в строке, отсчитывая слева направо. Ведущий элемент каждой строки должен находиться правее ведущего элемента предыдущей строки.
  3. Нули под ведущими элементами: Все элементы под ведущими элементами должны быть равны нулю.

Примеры:

  • Матрица ступенчатого вида:

    [ 1  2  3  4 ]
    [ 0  5  6  7 ]
    [ 0  0  8  9 ]

    В этой матрице:

    • Все ведущие элементы (1, 5, 8) находятся правее ведущих элементов предыдущих строк.
    • Элементы под ведущими элементами (все нули) равны нулю.
  • Матрица ступенчатого вида (с нулевой строкой):

    [ 1  2  3 ]
    [ 0  4  5 ]
    [ 0  0  0 ]

    В этой матрице:

    • Нулевая строка находится внизу.
    • Ведущие элементы (1, 4) находятся правее друг друга.
    • Элементы под ведущими элементами равны нулю.
  • Пример матрицы не ступенчатого вида:

    [ 0  1  2 ]
    [ 1  0  3 ]
    [ 0  0  4 ]

    В этой матрице:

    • Ведущий элемент во второй строке находится левее, чем ведущий элемент в первой строке.

Приведение матрицы к ступенчатому виду (Метод Гаусса):

Основная цель преобразования матрицы к ступенчатому виду - это упрощение системы линейных уравнений. Для этого применяются элементарные преобразования строк (ЭПС), которые не меняют решение системы:

  1. Перестановка строк: Меняем местами две строки.
  2. Умножение строки на ненулевое число: Умножаем все элементы строки на одно и то же ненулевое число.
  3. Прибавление к строке другой строки, умноженной на число: Добавляем к одной строке другую строку, умноженную на какое-либо число.

Шаги приведения к ступенчатому виду (Метод Гаусса):

  1. Поиск ведущего элемента: Находим первую ненулевую колонку (столбец) слева направо. В этой колонке выбираем ненулевой элемент (это и будет наш ведущий элемент). Если первый элемент в этой колонке ноль, меняем местами первую строку с той, в которой есть ненулевой элемент в этой колонке. Если такой строки нет, переходим к следующей колонке.
  2. Обнуление элементов под ведущим элементом: Используя ЭПС (обычно прибавляя к строкам другие строки, умноженные на соответствующее число), делаем все элементы под ведущим элементом равными нулю.
  3. Повторение: Переходим к следующей строке (сразу под строкой, содержащей предыдущий ведущий элемент). Находим следующую ненулевую колонку справа от предыдущего ведущего элемента. Выбираем ненулевой элемент в этой колонке (новый ведущий элемент). Обнуляем элементы под этим ведущим элементом.
  4. Повторяем шаги 2 и 3, пока матрица не будет приведена к ступенчатому виду.

Пример приведения к ступенчатому виду:

Пусть дана матрица:

\(\begin{bmatrix}
2 & 1 & 1 \\
4 & 3 & 3 \\
8 & 5 & 4 \\
\end{bmatrix}\)

Шаг 1: Ведущий элемент - 2 (в первой строке, первом столбце).

Шаг 2: Обнуляем элементы под ведущим элементом:

Вычтем из второй строки первую строку, умноженную на 2: \(R2 = R2 - 2*R1\)​

Вычтем из третьей строки первую строку, умноженную на 4: \(R3 = R3 - 4*R1\)​

Получаем:

\(\begin{bmatrix}
2 & 1 & 1 \\
0 & 1 & 1 \\
0 & 1 & 0 \\
\end{bmatrix}\)  

Шаг 3: Ведущий элемент во второй строке - 1 (во втором столбце).

Шаг 4: Обнуляем элемент под ведущим элементом: 

Вычтем из третьей строки вторую строку: \(R3 = R3 - R2\)​

Получаем:

\(\begin{bmatrix}
2 & 1 & 1 \\
0 & 1 & 1 \\
0 & 1 &-1 \\
\end{bmatrix}\)

Эта матрица приведена к ступенчатому виду

Преимущества ступенчатого вида:

  • Простота решения СЛАУ: Решение СЛАУ становится проще, так как из последней строки можно найти значение последней переменной, затем подставить это значение в предпоследнюю строку, чтобы найти следующую переменную, и так далее (метод обратной подстановки).
  • Определение ранга матрицы: Ранг матрицы - это количество ненулевых строк в ее ступенчатой форме.
  • Определение совместимости системы: По ступенчатой форме можно определить, имеет ли система решения (совместна) или нет. Если в ступенчатом виде есть строка вида [0 0 ... 0 | b]​ где b ≠ 0, то система не имеет решений (несовместна).

.RREF() - Использование SymPy для приведения к ступенчатому виду:​​​

SymPy предоставляет метод .rref()​​​  для приведения матрицы к приведенному ступенчатому виду (reduced row echelon form), который является усовершенствованной формой ступенчатого вида. Но сначала матрицу нужно преобразовать к типу Matrix​ библиотеки SymPy.

from sympy import Matrix, symbols

# Определяем символьные переменные
x, y, z = symbols('x y z')

# Создаем матрицу
A = Matrix([
    [2, 1, 1, 6],  # 6 - это свободный член в первом уравнении
    [4, 3, 3, 14], # 14 - это свободный член во втором уравнении
    [8, 5, 4, 25]  # 25 - это свободный член в третьем уравнении
])

# Приводим к ступенчатому виду (и получаем как саму матрицу, так и информацию о ведущих элементах)
R, pivot_cols = A.rref()  # R - приведенная матрица, pivot_cols - индексы ведущих столбцов

print("Приведенная ступенчатая форма:")
print(R)
print("Индексы ведущих столбцов:")
print(pivot_cols)

Вывод

Приведенная ступенчатая форма:
Matrix([[1, 0, 0, 2], [0, 1, 0, 1], [0, 0, 1, 1]])
Индексы ведущих столбцов:
(0, 1, 2)

‍В этом примере:

  1. Создается матрица A​.
  2. Используется метод .rref()​, который возвращает:

    • R​: Приведенную ступенчатую форму матрицы.
    • pivot_cols​: Список индексов ведущих столбцов (столбцы, в которых находятся ведущие элементы). Эта информация полезна, например, для определения ранга матрицы.

Обратите внимание, что .rref()​ возвращает приведенный ступенчатый вид, который немного отличается от обычного ступенчатого вида (ведущие элементы равны 1, а все остальные элементы в столбце с ведущим элементом равны 0). Для обычной ступенчатой формы, нужно будет реализовать преобразования строк вручную.‍


❔❔❔

Ответим на вопросы по поводу rref()​ в SymPy и ее связи с рангом матрицы:

1. С помощью rref можно определить ранг матрицы?

  • Да, с помощью rref()​ можно определить ранг матрицы. Ранг матрицы равен количеству ведущих элементов (leading entries) в приведенной ступенчатой форме (reduced row echelon form, RREF). Ведущие элементы - это первые ненулевые элементы в каждой строке (слева направо) в RREF. Метод rref()​ в SymPy возвращает, помимо самой матрицы в RREF, список индексов столбцов, в которых находятся ведущие элементы (pivot columns). Длина этого списка и есть ранг матрицы.

    from sympy import Matrix
    
    A = Matrix([
        [1, 2, 3],
        [2, 4, 6],
        [3, 6, 9]
    ])
    
    R, pivot_cols = A.rref()
    rank = len(pivot_cols)
    
    print("Матрица A:")
    print(A)
    print("Приведенная ступенчатая форма (RREF):")
    print(R)
    print("Индексы ведущих столбцов:", pivot_cols) # Output: (0,)
    print("Ранг матрицы:", rank) # Output: 1
    

2. Результат функции rref уникален для одной матрицы?

  • Да, приведенная ступенчатая форма (RREF) уникальна для данной матрицы. Это означает, что независимо от последовательности элементарных преобразований строк, которые вы примените, чтобы привести матрицу к ступенчатому виду, результирующая RREF будет всегда одной и той же. Это важное свойство RREF.

3. Возможно получить несколько вариантов rref для одной матрицы?

  • Нет, для одной матрицы существует только один возможный вариант приведенной ступенчатой формы (RREF). Этим она отличается от обычного ступенчатого вида (REF), для которого может быть несколько вариантов, зависящих от порядка выполнения элементарных преобразований.

4. Если матрица полного ранга, результатом будет единичная матрица?

  • Не совсем точно. Если матрица квадратная и имеет полный ранг (то есть ее ранг равен количеству строк/столбцов), то приведенная ступенчатая форма (RREF) будет единичной матрицей.

    • Квадратная матрица полного ранга - это матрица, у которой определитель отличен от нуля, и она обратима.
    from sympy import Matrix
    
    A = Matrix([
        [1, 2],
        [3, 4]
    ])
    
    R, pivot_cols = A.rref()
    
    print("Матрица A:")
    print(A)
    print("Приведенная ступенчатая форма (RREF):")
    print(R) # Output: Matrix([[1, 0], [0, 1]])
    print("Индексы ведущих столбцов:", pivot_cols) # Output: [0, 1]
  • Однако, если матрица не квадратная, но имеет полный ранг (то есть ее ранг равен меньшему из количества строк или столбцов), то RREF не будет единичной матрицей. Она будет содержать единичную подматрицу в верхнем левом углу и нулевые строки (если строк больше, чем столбцов) или дополнительные столбцы (если столбцов больше, чем строк).

    from sympy import Matrix
    
    # Матрица с полным строковым рангом (ранг равен 2)
    A = Matrix([
        [1, 2, 3],
        [4, 5, 6]
    ])
    
    R, pivot_cols = A.rref()
    
    print("Матрица A:")
    print(A)
    print("Приведенная ступенчатая форма (RREF):")
    print(R) # Output: Matrix([[1, 0, -1], [0, 1, 2]])
    print("Индексы ведущих столбцов:", pivot_cols) # Output: [0, 1]
    
    # Матрица с полным столбцовым рангом (ранг равен 2)
    A = Matrix([
        [1, 4],
        [2, 5],
        [3, 6]
    ])
    
    R, pivot_cols = A.rref()
    
    print("Матрица A:")
    print(A)
    print("Приведенная ступенчатая форма (RREF):")
    print(R)  # Output: Matrix([[1, 0], [0, 1], [0, 0]])
    print("Индексы ведущих столбцов:", pivot_cols)  # Output: [0, 1]

В этих случаях, несмотря на то что матрица имеет полный ранг, результатом не является единичная матрица, но присутствует единичная подматрица.

В итоге:

  • rref()​ можно использовать для определения ранга матрицы.
  • Результат rref()​ уникален для каждой матрицы.
  • Если квадратная матрица имеет полный ранг, то ее RREF будет единичной матрицей. Если матрица не квадратная, но имеет полный ранг, то ее RREF будет содержать единичную подматрицу.
Вторник, 15 апреля 2025 . Прикладная линейная алгебра 15
Ступенчатый вид матрицы. Метод .rref().