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浮點數,選用
相對條件數。奇異值
s
小於rcond * max(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 決定
範例
1 維零空間
>>> 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]])
2 維零空間
>>> 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]])