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
fan A zurück. Die Funktionfist 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.]])