РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
255 of 541 menu

Функция linalg.qr

Функция linalg.qr выполняет QR-разложение матрицы, представляя её в виде произведения ортогональной матрицы Q и верхнетреугольной матрицы R. Первым параметром функция принимает двумерный массив (матрицу). Вторым параметром можно задать режим разложения, определяющий формат возвращаемых матриц.

Синтаксис

np.linalg.qr(a, mode='reduced')

Параметры

Основные параметры функции:

  • a - входная матрица размером (M, N);
  • mode - режим разложения, определяющий формат возвращаемых матриц. Доступные значения: 'reduced' (по умолчанию), 'complete', 'r', 'raw'.

Режимы разложения

Функция поддерживает несколько режимов работы:

  • 'reduced' - возвращает матрицы Q размером (M, K) и R размером (K, N), где K = min(M, N);
  • 'complete' - возвращает полную ортогональную матрицу Q размером (M, M) и верхнетреугольную матрицу R размером (M, N);
  • 'r' - возвращает только матрицу R в экономичной форме;
  • 'raw' - возвращает матрицу R и информацию о преобразованиях Хаусхолдера в нестандартном формате.

Пример ⁅⋯n="sect"⁆

Выполним QR-разложение матрицы в стандартном режиме:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 10]]) q, r = np.linalg.qr(arr) print("Q:") print(q) print("R:") print(r)

Результат выполнения кода:

Q: [[-0.12309149 0.90453403 0.40824829] [-0.49236596 0.30151134 -0.81649658] [-0.86164044 -0.30151134 0.40824829]] R: [[ -8.1240384 -9.6011363 -11.4251423 ] [ 0. 0.90453403 1.50755672] [ 0. 0. 0.81649658]]

Пример ⁅⋯n="sect"⁆

Используем режим 'complete' для получения полной квадратной матрицы Q:

import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) q, r = np.linalg.qr(arr, mode='complete') print("Q shape:", q.shape) print("R shape:", r.shape) print("Q:") print(q)

Результат выполнения кода:

Q shape: (3, 3) R shape: (3, 2) Q: [[-0.16903085 0.89708523 0.40824829] [-0.50709255 0.27602622 -0.81649658] [-0.84515425 -0.34503278 0.40824829]]

Пример ⁅⋯n="sect"⁆

Получим только матрицу R с помощью режима 'r':

import numpy as np arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) r = np.linalg.qr(arr, mode='r') print("R:") print(r)

Результат выполнения кода:

R: [[-5.09901951 -6.27717921 -7.45533891 -8.63349861] [ 0. 0.98058068 1.96116135 2.94174203]]

Пример ⁅⋯n="sect"⁆

Проверим, что произведение Q и R даёт исходную матрицу:

import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) q, r = np.linalg.qr(arr) reconstructed = np.dot(q, r) print("Original:") print(arr) print("Reconstructed:") print(reconstructed) print("Max difference:", np.max(np.abs(arr - reconstructed)))

Результат выполнения кода:

Original: [[1 2] [3 4] [5 6]] Reconstructed: [[1. 2.] [3. 4.] [5. 6.]] Max difference: 8.881784197001252e-16

Пример ⁅⋯n="sect"⁆

Используем QR-разложение для решения системы линейных уравнений методом наименьших квадратов:

import numpy as np # Создаем матрицу коэффициентов и вектор правой части A = np.array([[1, 1], [1, 2], [1, 3]]) b = np.array([2, 3, 4]) # Выполняем QR-разложение q, r = np.linalg.qr(A) # Решаем систему R * x = Q^T * b qt_b = np.dot(q.T, b) x = np.linalg.solve(r, qt_b) print("Solution x:") print(x)

Результат выполнения кода:

Solution x: [1. 1.]

Смотрите также

  • функцию svd,
    которая выполняет сингулярное разложение матрицы
  • функцию inv,
    которая вычисляет обратную матрицу
  • функцию solve,
    которая решает систему линейных уравнений
  • функцию lstsq,
    которая решает задачу наименьших квадратов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить