scipy.linalg.

fiedler#

scipy.linalg.fiedler(a)[Quelle]#

Gibt eine symmetrische Fiedler-Matrix zurück.

Gegeben eine Sequenz von Zahlen a, haben Fiedler-Matrizen die Struktur F[i, j] = np.abs(a[i] - a[j]) und somit Nullen auf der Diagonalen und nicht-negative Einträge. Eine Fiedler-Matrix hat einen dominanten positiven Eigenwert und andere Eigenwerte sind negativ. Obwohl im Allgemeinen nicht gültig, können für bestimmte Eingaben die Inverse und die Determinante explizit abgeleitet werden, wie in [1] angegeben.

Parameter:
a(…, n,) array_like

Koeffizienten-Array. N-dimensionale Arrays werden als Stapel behandelt: Jeder Slice entlang der letzten Achse ist ein 1-D-Koeffizienten-Array.

Rückgabe:
F(…, n, n) ndarray

Fiedler-Matrix. Bei Stapel-Eingabe entspricht jeder Slice der Form (n, n) entlang der letzten beiden Dimensionen der Ausgabe einem Slice der Form (n,) entlang der letzten Dimension der Eingabe.

Siehe auch

circulant, toeplitz

Hinweise

Hinzugefügt in Version 1.3.0.

Referenzen

[1]

J. Todd, „Basic Numerical Mathematics: Vol.2 : Numerical Algebra“, 1977, Birkhauser, DOI:10.1007/978-3-0348-7286-7

Beispiele

>>> import numpy as np
>>> from scipy.linalg import det, inv, fiedler
>>> a = [1, 4, 12, 45, 77]
>>> n = len(a)
>>> A = fiedler(a)
>>> A
array([[ 0,  3, 11, 44, 76],
       [ 3,  0,  8, 41, 73],
       [11,  8,  0, 33, 65],
       [44, 41, 33,  0, 32],
       [76, 73, 65, 32,  0]])

Die expliziten Formeln für Determinante und Inverse scheinen nur für monoton steigende/fallende Arrays zu gelten. Beachten Sie die tridiagonale Struktur und die Ecken.

>>> Ai = inv(A)
>>> Ai[np.abs(Ai) < 1e-12] = 0.  # cleanup the numerical noise for display
>>> Ai
array([[-0.16008772,  0.16666667,  0.        ,  0.        ,  0.00657895],
       [ 0.16666667, -0.22916667,  0.0625    ,  0.        ,  0.        ],
       [ 0.        ,  0.0625    , -0.07765152,  0.01515152,  0.        ],
       [ 0.        ,  0.        ,  0.01515152, -0.03077652,  0.015625  ],
       [ 0.00657895,  0.        ,  0.        ,  0.015625  , -0.00904605]])
>>> det(A)
15409151.999999998
>>> (-1)**(n-1) * 2**(n-2) * np.diff(a).prod() * (a[-1] - a[0])
15409152