scipy.linalg.

sqrtm#

scipy.linalg.sqrtm(A, disp=<object object>, blocksize=<object object>)[Quelle]#

Berechnet, falls vorhanden, die Matrix-Quadratwurzel.

Die Matrix-Quadratwurzel von A ist eine Matrix X, sodass X @ X = A. Es ist nicht garantiert, dass jede quadratische Matrix eine Matrix-Quadratwurzel hat, zum Beispiel hat die Matrix [[0, 1], [0, 0]] keine Quadratwurzel.

Darüber hinaus hat nicht jede reelle Matrix eine reelle Quadratwurzel. Daher kann der Rückgabetyp für reellwertige Matrizen komplex sein, wenn numerisch ein Eigenwert auf der negativen reellen Achse liegt.

Parameter:
Andarray

Eingabe, bei der die letzten beiden Dimensionen quadratisch sind (..., n, n).

dispbool, optional

Gibt eine Warnung aus, wenn der geschätzte Fehler im Ergebnis groß ist, anstatt den geschätzten Fehler zurückzugeben. (Standard: True)

Veraltet seit Version 1.16.0: Das Argument disp ist veraltet und wird in SciPy 1.18.0 entfernt. Die zuvor zurückgegebene Fehlerschätzung kann berechnet werden als norm(X @ X - A, 'fro')**2 / norm(A, 'fro')

blocksizeInteger, optional

Veraltet seit Version 1.16.0: Das Argument blocksize ist veraltet, da es vom Algorithmus nicht verwendet wird, und wird in SciPy 1.18.0 entfernt.

Rückgabe:
sqrtmndarray

Berechnete Matrix-Quadratwurzel von A mit gleicher Größe (..., n, n).

errestfloat

Frobenius-Norm des geschätzten Fehlers, ||err||_F / ||A||_F. Nur zurückgegeben, wenn disp auf False gesetzt ist. Dieses Rückgabeargument wird in Version 1.20.0 entfernt und nur das sqrtm-Ergebnis wird zurückgegeben.

Veraltet seit Version 1.16.0.

Hinweise

Diese Funktion verwendet die Schur-Zerlegungsmethode zur Berechnung der Matrix-Quadratwurzel gemäß [1] und für reelle Matrizen [2]. Darüber hinaus ist zu beachten, dass es Matrizen gibt, die Quadratwurzeln haben, die keine Polynome in A sind. Ein klassisches Beispiel aus [2] ist die Matrix, die erfüllt:

[ a, a**2 + 1]**2     [-1,  0]
[-1,       -a]     =  [ 0, -1]

für jeden Skalar a, aber sie ist kein Polynom in -I. Daher werden sie von dieser Funktion nicht gefunden.

Referenzen

[1]

Edvin Deadman, Nicholas J. Higham, Rui Ralha (2013) „Blocked Schur Algorithms for Computing the Matrix Square Root, Lecture Notes in Computer Science, 7782. S. 171-182. DOI:10.1016/0024-3795(87)90118-2

[2] (1,2)

Nicholas J. Higham (1987) „Computing real square roots of a real matrix“, Linear Algebra and its Applications, 88/89:405-430. DOI:10.1016/0024-3795(87)90118-2

Beispiele

>>> import numpy as np
>>> from scipy.linalg import sqrtm
>>> a = np.array([[1.0, 3.0], [1.0, 4.0]])
>>> r = sqrtm(a)
>>> r
array([[ 0.75592895,  1.13389342],
       [ 0.37796447,  1.88982237]])
>>> r.dot(r)
array([[ 1.,  3.],
       [ 1.,  4.]])