scipy.linalg.

funm#

scipy.linalg.funm(A, func, disp=True)[Quelle]#

Auswerten einer Matrixfunktion, die durch eine aufrufbare Funktion spezifiziert wird.

Gibt den Wert der matrix-wertigen Funktion f an A zurück. Die Funktion f ist eine Erweiterung der skalar-wertigen Funktion func auf Matrizen.

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(N, N) array_like

Matrix, an der die Funktion ausgewertet werden soll

funccallable

Aufrufbare Funktion, die eine skalare Funktion f auswertet. Muss vektorisiert sein (z.B. mit vectorize).

dispbool, optional

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

Rückgabe:
funm(N, N) ndarray

Wert der Matrixfunktion, spezifiziert durch func, ausgewertet an A

errestfloat

(wenn disp == False)

1-Norm des geschätzten Fehlers, ||err||_1 / ||A||_1

Hinweise

Diese Funktion implementiert den allgemeinen Algorithmus basierend auf der Schur-Zerlegung (Algorithmus 9.1.1. in [1]).

Wenn bekannt ist, dass die Eingabematrix diagonalisierbar ist, ist die Verwendung der Eigenwertzerlegung wahrscheinlich schneller. Wenn Ihre Matrix beispielsweise hermitesch ist, können Sie Folgendes tun:

>>> from scipy.linalg import eigh
>>> def funm_herm(a, func, check_finite=False):
...     w, v = eigh(a, check_finite=check_finite)
...     ## if you further know that your matrix is positive semidefinite,
...     ## you can optionally guard against precision errors by doing
...     # w = np.maximum(w, 0)
...     w = func(w)
...     return (v * w).dot(v.conj().T)

Referenzen

[1]

Gene H. Golub, Charles F. van Loan, Matrix Computations 4. Aufl.

Beispiele

>>> import numpy as np
>>> from scipy.linalg import funm
>>> a = np.array([[1.0, 3.0], [1.0, 4.0]])
>>> funm(a, lambda x: x*x)
array([[  4.,  15.],
       [  5.,  19.]])
>>> a.dot(a)
array([[  4.,  15.],
       [  5.,  19.]])