scipy.linalg.

matrix_balance#

scipy.linalg.matrix_balance(A, permute=True, scale=True, separate=False, overwrite_a=False)[源代码]#

为行/列平衡计算一个对角相似变换。

平衡尝试应用相似变换来使行和列 1 范数相等,使矩阵系数的大小变化反映在缩放矩阵中。

此外,如果已启用,则首先排列矩阵以隔离开矩阵的上三角部分,如果缩放也已启用,则仅对剩余的子块进行缩放。

平衡矩阵满足以下等式

\[B = T^{-1} A T\]

缩放系数近似为 2 的最接近次幂以避免舍入误差。

参数:
A(n, n) 类似阵列

用于平衡的方阵数据矩阵。

permute布尔值,可选

选择器,用于定义在缩放之前是否还执行 A 的排列。

scale布尔值,可选

用于打开并关闭缩放的选择器。如果为 False,则不缩放矩阵。

separate布尔值,可选

这将从返回变换的完整矩阵切换到两个独立的 1-D 置换和缩放阵列的元组。

overwrite_a布尔值,可选

这直接传递给 xGEBAL。实质上,覆盖结果为数据。它可能提高空间效率。有关详细信息,请参见 LAPACK 手册。默认情况下,这是 false。

返回:
Bndarray (n,n)

平衡矩阵

Tndarray (n,n)

一个可能置换的对角矩阵,其中非零元素为 2 的整数次幂,以避免数字舍入误差。

scale, permndarray (n,)

如果 separate 关键字设置为 True,那么不是上面的数组 T,而是缩放和置换向量分别作为元组给出,而无需分配整个数组 T

备注

此算法对特征值和矩阵分解特别有用,在许多情况下,它已经被各种 LAPACK 例程调用。

该算法基于广为人知的技术 [1],并且已经过修改以解决特殊情况。有关 LAPACK v3.5.0 之后实施的详细信息,请参见 [2]。在此版本之前,有可能会导致平衡实际上恶化条件的极端情况。有关此类示例,请参见 [3]

该代码是对 LAPACK 的 xGEBAL 例程系列的一个包装,用于矩阵平衡。

在版本 0.19.0 中添加。

参考

[1]

B.N. Parlett 和 C. Reinsch, “Balancing a Matrix for Calculation of Eigenvalues and Eigenvectors”,Numerische Mathematik,第 13(4) 卷,1969,DOI:10.1007/BF02165404

[2]

R. James、J. Langou、B.R. Lowery,“关于矩阵平衡和特征向量计算”,2014,arXiv:1401.5766

[3]

D.S. Watkins。平衡有害的情况。电子传输数值分析,第 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. ]])