matrix_balance#
- scipy.linalg.matrix_balance(A, переставить=True, scale=True, отдельный=False, overwrite_a=False)[источник]#
Вычислить диагональное подобие преобразования для балансировки строк/столбцов.
Балансировка пытается уравнять 1-нормы строк и столбцов, применяя преобразование подобия, чтобы вариация величины элементов матрицы отражалась в масштабирующих матрицах.
Более того, если включено, матрица сначала переставляется для изоляции верхней треугольной части матрицы и, снова если масштабирование также включено, только оставшиеся подблоки подвергаются масштабированию.
Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.
- Параметры:
- A(n, n) array_like
Квадратная матрица данных для балансировки.
- переставитьbool, необязательно
Селектор для определения, выполняется ли также перестановка A перед масштабированием.
- scalebool, необязательно
Селектор для включения и выключения масштабирования. Если False, матрица не будет масштабироваться.
- отдельныйbool, необязательно
Это переключает с возврата полной матрицы преобразования на кортеж из двух отдельных 1-D массивов перестановки и масштабирования.
- overwrite_abool, необязательно
Это передается непосредственно в xGEBAL. По сути, перезаписывает результат в данные. Это может повысить эффективность использования памяти. Подробности см. в руководстве LAPACK. По умолчанию установлено значение False.
- Возвращает:
- B(n, n) ndarray
Сбалансированная матрица
- T(n, n) ndarray
Возможно переставленная диагональная матрица, ненулевые элементы которой являются целыми степенями 2, чтобы избежать ошибок численного усечения.
- scale, perm(n,) ndarray
Если
separateключевое слово установлено в True, тогда вместо массиваTвыше, масштабирование и векторы перестановки заданы отдельно как кортеж без выделения полного массиваT.
Примечания
Сбалансированная матрица удовлетворяет следующему равенству
\[B = T^{-1} A T\]Коэффициенты масштабирования аппроксимируются до ближайшей степени двойки, чтобы избежать ошибок округления.
Этот алгоритм особенно полезен для разложений собственных значений и матриц, и во многих случаях он уже вызывается различными процедурами LAPACK.
Алгоритм основан на известной технике [1] и был модифицирован для учёта особых случаев. См. [2] для подробностей, которые были реализованы начиная с LAPACK v3.5.0. До этой версии существуют крайние случаи, когда балансировка может фактически ухудшить обусловленность. См. [3] для таких примеров.
Код является обёрткой вокруг семейства подпрограмм LAPACK xGEBAL для балансировки матриц.
Добавлено в версии 0.19.0.
Ссылки
[1]B.N. Parlett и C. Reinsch, «Балансировка матрицы для вычисления собственных значений и собственных векторов», Numerische Mathematik, Т.13(4), 1969, DOI:10.1007/BF02165404
[2]R. James, J. Langou, B.R. Lowery, "On matrix balancing and eigenvector computation", 2014, arXiv:1401.5766
[3]D.S. Watkins. Случай, когда балансировка вредна. Electron. Trans. Numer. Anal, Vol.23, 2006.
Примеры
>>> import numpy as np >>> from scipy import linalg >>> x = np.array([[1,2,0], [9,1,0.01], [1,2,10*np.pi]])
>>> y, permscale = linalg.matrix_balance(x) >>> np.abs(x).sum(axis=0) / np.abs(x).sum(axis=1) array([ 3.66666667, 0.4995005 , 0.91312162])
>>> np.abs(y).sum(axis=0) / np.abs(y).sum(axis=1) array([ 1.2 , 1.27041742, 0.92658316]) # may vary
>>> permscale # only powers of 2 (0.5 == 2^(-1)) array([[ 0.5, 0. , 0. ], # may vary [ 0. , 1. , 0. ], [ 0. , 0. , 1. ]])