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
Правые векторы Шура.
Смотрите также
Примечания
При выходе,
(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)