fiedler — SciPy v1.15.3 Manual (original) (raw)

scipy.linalg.

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

Returns a symmetric Fiedler matrix

Given an sequence of numbers a, Fiedler matrices have the structureF[i, j] = np.abs(a[i] - a[j]), and hence zero diagonals and nonnegative entries. A Fiedler matrix has a dominant positive eigenvalue and other eigenvalues are negative. Although not valid generally, for certain inputs, the inverse and the determinant can be derived explicitly as given in [1].

Parameters:

a(…, n,) array_like

Coefficient array. N-dimensional arrays are treated as a batch: each slice along the last axis is a 1-D coefficient array.

Returns:

F(…, n, n) ndarray

Fiedler matrix. For batch input, each slice of shape (n, n)along the last two dimensions of the output corresponds with a slice of shape (n,) along the last dimension of the input.

Notes

Added in version 1.3.0.

References

Examples

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

The explicit formulas for determinant and inverse seem to hold only for monotonically increasing/decreasing arrays. Note the tridiagonal structure and the corners.

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