scipy.linalg.

fiedler#

scipy.linalg.fiedler(a)[原始碼]#

返回一個對稱的 Fiedler 矩陣

給定一個數字序列 a,Fiedler 矩陣具有結構 F[i, j] = np.abs(a[i] - a[j]),因此對角線為零且條目為非負數。 Fiedler 矩陣具有一個主要的正特徵值,而其他特徵值為負數。 雖然通常不適用,但對於某些輸入,可以明確導出逆矩陣和行列式,如 [1] 中所示。

參數:
a(…, n,) array_like

係數陣列。 N 維陣列被視為批次處理:沿最後一個軸的每個切片都是一個一維係數陣列。

返回:
F(…, n, n) ndarray

Fiedler 矩陣。 對於批次輸入,輸出最後兩個維度上每個形狀為 (n, n) 的切片,對應於輸入最後一個維度上形狀為 (n,) 的切片。

另請參閱

circulant, toeplitz

註解

在版本 1.3.0 中新增。

參考文獻

[1]

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

範例

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

行列式和逆矩陣的顯式公式似乎僅適用於單調遞增/遞減陣列。 請注意三對角結構和角。

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