scipy.linalg.eigvalsh

scipy.linalg.eigvalsh(a, b=None, lower=True, overwrite_a=False, overwrite_b=False, turbo=True, eigvals=None, type=1, check_finite=True, subset_by_index=None, subset_by_value=None, driver=None)[源代码]

解决复厄米特矩阵或实对称矩阵的标准或广义特征值问题。

查找特征值数组 w 阵列的数量 a ,在哪里 b 是正定的,使得对于每个特征值λ(w的第i个条目)及其特征向量vi(v的第i列)满足:

              a @ vi = λ * b @ vi
vi.conj().T @ a @ vi = λ
vi.conj().T @ b @ vi = 1

在标准问题中,假设b是单位矩阵。

参数
a(M,M)类数组

将计算其特征值的复厄米特或实对称矩阵。

b(M,M)array_like,可选

中的复厄米特或实对称正定矩阵。如果省略,则假定为单位矩阵。

lower布尔值,可选

相关数组数据是取自 a 并且,如果适用的话, b 。(默认值:较低)

overwrite_a布尔值,可选

是否覆盖中的数据 a (可能会提高性能)。默认值为False。

overwrite_b布尔值,可选

是否覆盖中的数据 b (可能会提高性能)。默认值为False。

type整型,可选

对于一般问题,此关键字指定要为其解决的问题类型 wv (只接受1、2、3作为可能的输入)::

1 =>     a @ v = w @ b @ v
2 => a @ b @ v = w @ v
3 => b @ a @ v = w @ v

对于标准问题,将忽略此关键字。

check_finite布尔值,可选

是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。

subset_by_index可迭代,可选

如果提供,此两元素可迭代定义所需特征值的开始和结束索引(升序和0索引)。为了仅返回第二小到第五小的特征值, [1, 4] 是使用的。 [n-3, n-1] 返回最大的三个。仅适用于“evr”、“evx”和“gvx”驱动程序。这些条目通过以下方式直接转换为整数 int()

subset_by_value可迭代,可选

如果提供,则此两元素迭代器定义半开间隔 (a, b] 如果有的话,只返回这些值之间的特征值。仅适用于“evr”、“evx”和“gvx”驱动程序。使用 np.inf 对于不受约束的末端。

驱动程序:字符串,可选

定义应使用哪个LAPACK驱动程序。对于标准问题,有效选项为“ev”、“evd”、“evr”、“evx”,对于一般问题(其中b不是无问题),有效选项为“gv”、“gvd”、“gvx”。请参阅的注释部分 scipy.linalg.eigh

turbo布尔值,可选

Deprecated by ``driver=gvd`` option 。对特征值计算没有显著影响,因为不需要任何特征向量。

1.5.0 版后已移除.

eigvals元组(lo,hi),可选

Deprecated by ``subset_by_index`` keyword 。要返回的最小和最大(按升序)特征值和相应特征向量的索引:0<=lo<=hi<=M-1。如果省略,则返回所有特征值和特征向量。

1.5.0 版后已移除.

退货
w(n,)ndarray

The N (1<=N<=M) selected eigenvalues, in ascending order, each repeated according to its multiplicity.

加薪
LinAlgError

如果特征值计算不收敛,则发生错误,或者b矩阵不是正定的。请注意,如果输入矩阵不对称或不是厄米特矩阵,则不会报告错误,但结果将是错误的。

参见

eigh

对称/厄米特阵列的特征值和右特征向量

eigvals

一般阵列的特征值

eigvals_banded

对称/厄米特带状矩阵的特征值

eigvalsh_tridiagonal

对称/厄米特三对角阵的特征值

注意事项

此函数不检查输入数组是否为厄米特/对称的,以便仅用其上/下三角形部分表示数组。

此函数用作单行速记,用于 scipy.linalg.eigh 使用选项 eigvals_only=True 得到特征值而不是特征向量。在这里,它被保留下来,作为一种遗留的便利。使用Main函数进行完全控制并稍微有点 Python 效应可能是有益的。

示例

有关更多示例,请参见 scipy.linalg.eigh

>>> from scipy.linalg import eigvalsh
>>> A = np.array([[6, 3, 1, 5], [3, 0, 5, 1], [1, 5, 6, 2], [5, 1, 2, 2]])
>>> w = eigvalsh(A)
>>> w
array([-3.74637491, -0.76263923,  6.08502336, 12.42399079])