scipy.linalg.

ordqz#

scipy.linalg.ordqz(A, B, sort='lhp', вывод='real', overwrite_a=False, overwrite_b=False, check_finite=True)[источник]#

QZ-разложение для пары матриц с переупорядочиванием.

Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.

Параметры:
A(N, N) array_like

2-D массив для разложения

B(N, N) array_like

2-D массив для разложения

sort{callable, ‘lhp’, ‘rhp’, ‘iuc’, ‘ouc’}, опционально

Определяет, должны ли быть отсортированы верхние собственные значения. Может быть передан вызываемый объект, который, получив упорядоченную пару (alpha, beta) представление собственного значения x = (alpha/beta), возвращает логическое значение, обозначающее, должно ли собственное значение быть отсортировано в верхний левый угол (True). Для пар действительных матриц beta является вещественным, в то время как alpha может быть комплексным, и для комплексных матричных пар оба alpha и beta может быть комплексным. Вызываемый объект должен уметь принимать массив NumPy. Альтернативно, могут использоваться строковые параметры:

  • ‘lhp’ Левая полуплоскость (x.real < 0.0)

  • 'rhp' Правая полуплоскость (x.real > 0.0)

  • ‘iuc’ Внутри единичного круга (x*x.conjugate() < 1.0)

  • ‘ouc’ Вне единичной окружности (x*x.conjugate() > 1.0)

С предопределенными функциями сортировки, бесконечное собственное значение (т.е., alpha != 0 и beta = 0) считается лежащим ни в левой, ни в правой полуплоскости, но он считается лежащим вне единичной окружности. Для собственного значения (alpha, beta) = (0, 0), предопределенные функции сортировки все возвращают False.

выводstr {'real','complex'}, опционально

Построить вещественное или комплексное QZ-разложение для вещественных матриц. По умолчанию — 'real'.

overwrite_abool, необязательно

Если True, содержимое A перезаписывается.

overwrite_bbool, необязательно

Если True, содержимое B перезаписывается.

check_finitebool, необязательно

Если true, проверяет элементы A и B являются конечными числами. Если false, проверка не выполняется, и матрица передается нижележащему алгоритму.

Возвращает:
AA(N, N) ndarray

Обобщенная форма Шура матрицы A.

BB(N, N) ndarray

Обобщенная форма Шура матрицы B.

alpha(N,) ndarray

alpha = alphar + alphai * 1j. См. примечания.

beta(N,) ndarray

См. примечания.

Q(N, N) ndarray

Левые векторы Шура.

Z(N, N) ndarray

Правые векторы Шура.

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

qz

Примечания

При выходе, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, будут обобщёнными собственными значениями. ALPHAR(j) + ALPHAI(j)*i и BETA(j),j=1,...,N являются диагоналями комплексной формы Шура (S,T), которая получилась бы, если бы 2x2 диагональные блоки вещественной обобщенной формы Шура (A,B) были дополнительно приведены к треугольному виду с использованием комплексных унитарных преобразований. Если ALPHAI(j) равен нулю, то j-е собственное значение вещественное; если положительное, то jй и (j+1)st собственные значения являются комплексно-сопряжённой парой, с ALPHAI(j+1) отрицательный.

Добавлено в версии 0.17.0.

Примеры

>>> import numpy as np
>>> from scipy.linalg import ordqz
>>> A = np.array([[2, 5, 8, 7], [5, 2, 2, 8], [7, 5, 6, 6], [5, 4, 4, 8]])
>>> B = np.array([[0, 6, 0, 0], [5, 0, 2, 1], [5, 2, 6, 6], [4, 7, 7, 7]])
>>> AA, BB, alpha, beta, Q, Z = ordqz(A, B, sort='lhp')

Поскольку мы отсортировали собственные значения левой полуплоскости, отрицательные идут первыми

>>> (alpha/beta).real < 0
array([ True,  True, False, False], dtype=bool)