scipy.linalg.

null_space#

scipy.linalg.null_space(A, rcond=None, *, overwrite_a=False, check_finite=True, lapack_driver='gesdd')[source]#

使用 SVD 构造 A 的零空间的正交基

本文档假定数组参数具有指定的“核心”形状。但是,此函数的数组参数可能在核心形状之前附加额外的“批处理”维度。在这种情况下,数组被视为低维切片的批处理;详见 批处理线性操作

参数:
A(M, N) 类数组

输入数组

rcond浮点数, 可选

相对条件数。小于 rcond * max(s) 的奇异值 s 被视为零。默认值: 浮点数 eps * max(M,N)。

overwrite_a布尔值, 可选

是否覆盖 a;可能会提高性能。默认值为 False。

check_finite布尔值, 可选

是否检查输入矩阵只包含有限数。禁用此功能可能会提高性能,但如果输入包含无穷大或 NaN,则可能会导致问题(崩溃、无法终止)。

lapack_driver{‘gesdd’, ‘gesvd’}, 可选

是否使用更高效的分治法('gesdd')或通用矩形法('gesvd')来计算 SVD。MATLAB 和 Octave 使用 'gesvd' 方法。默认值为 'gesdd'

返回:
Z(N, K) ndarray

A 的零空间的正交基。K = 有效零空间的维度,由 rcond 确定

另请参见

svd

矩阵的奇异值分解

orth

矩阵的像空间

示例

一维零空间

>>> import numpy as np
>>> from scipy.linalg import null_space
>>> A = np.array([[1, 1], [1, 1]])
>>> ns = null_space(A)
>>> ns * np.copysign(1, ns[0,0])  # Remove the sign ambiguity of the vector
array([[ 0.70710678],
       [-0.70710678]])

二维零空间

>>> from numpy.random import default_rng
>>> rng = default_rng()
>>> B = rng.random((3, 5))
>>> Z = null_space(B)
>>> Z.shape
(5, 2)
>>> np.allclose(B.dot(Z), 0)
True

基向量是正交的(存在舍入误差)

>>> Z.T.dot(Z)
array([[  1.00000000e+00,   6.92087741e-17],
       [  6.92087741e-17,   1.00000000e+00]])