scipy.linalg.

null_space#

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

Erzeugt eine orthonormale Basis für den Nullraum von A mittels SVD

Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.

Parameter:
A(M, N) array_like

Eingabearray

rcondfloat, optional

Relative Konditionszahl. Singulärwerte s, die kleiner als rcond * max(s) sind, werden als Null betrachtet. Standard: Floating-Point-Epsilon * max(M,N).

overwrite_abool, optional

Ob a überschrieben werden soll; kann die Leistung verbessern. Standard ist False.

check_finitebool, optional

Ob überprüft werden soll, ob die Eingabematrix nur endliche Zahlen enthält. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürze, Nichtterminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.

lapack_driver{‘gesdd’, ‘gesvd’}, optional

Ob der effizientere Divide-and-Conquer-Ansatz ('gesdd') oder der allgemeine rechteckige Ansatz ('gesvd') zur Berechnung der SVD verwendet werden soll. MATLAB und Octave verwenden den 'gesvd'-Ansatz. Standard ist 'gesdd'.

Rückgabe:
Z(N, K) ndarray

Orthonormale Basis für den Nullraum von A. K = Dimension des effektiven Nullraums, bestimmt durch rcond.

Siehe auch

svd

Singulärwertzerlegung einer Matrix

orth

Matrixbereich

Beispiele

1-D Nullraum

>>> 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-D Nullraum

>>> 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

Die Basisvektoren sind (bis auf Rundungsfehler) orthonormal

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