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,)
的切片。
註解
在版本 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