本文简要介绍 python 语言中 scipy.linalg.eigvalsh
的用法。
用法:
scipy.linalg.eigvalsh(a, b=None, *, lower=True, overwrite_a=False, overwrite_b=False, turbo=<object object>, eigvals=<object object>, type=1, check_finite=True, subset_by_index=None, subset_by_value=None, driver=None)#
求解复 Hermitian 或实对称矩阵的标准或广义特征值问题。
找到数组
a
的特征值数组w
,其中b
是正定的,使得对于每个特征值λ(w的i-th条目)及其特征向量vi(v的i-th列)满足:a @ vi = λ * b @ vi vi.conj().T @ a @ vi = λ vi.conj().T @ b @ vi = 1
在标准问题中,假设 b 是单位矩阵。
- a: (M, M) 数组
将计算其特征值的复 Hermitian 或实对称矩阵。
- b: (M, M) 数组,可选
中的复数 Hermitian 或实对称定正矩阵。如果省略,则假定为单位矩阵。
- lower: 布尔型,可选
相关数组数据是否取自
a
的下三角形或上三角形,以及b
(如果适用)。 (默认值:较低)- overwrite_a: 布尔型,可选
是否覆盖
a
中的数据(可能会提高性能)。默认为假。- overwrite_b: 布尔型,可选
是否覆盖
b
中的数据(可能会提高性能)。默认为假。- type: 整数,可选
对于广义问题,此关键字指定
w
和v
要解决的问题类型(仅将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
。- driver: str,可选
定义应该使用哪个 LAPACK 驱动程序。标准问题的有效选项是 “ev”, “evd”, “evr”, “evx”,广义(其中 b 不是无)问题的有效选项是 “gv”, “gvd”, “gvx”。请参阅
scipy.linalg.eigh
的注释部分。- turbo: 布尔值,可选,已弃用
- eigvals: 元组(lo,hi),可选
- w: (N,) 数组
N (N<=M) 个选定的特征值按升序排列,每个特征值根据其重数重复。
- LinAlgError
如果特征值计算不收敛,则发生错误,或者 b 矩阵不是确定的正数。请注意,如果输入矩阵不是对称的或 Hermitian 矩阵,则不会报告错误但结果会错误。
参数 ::
返回 ::
抛出 ::
注意:
此函数不检查输入数组是否为 Hermitian/对称,以便允许仅使用其上/下三角形部分来表示数组。
此函数用作
scipy.linalg.eigh
的one-liner 简写,带有选项eigvals_only=True
以获取特征值而不是特征向量。在这里,它被保留为传统的便利。使用 main 函数进行完全控制并且更加 Pythonic 可能是有益的。例子:
有关更多示例,请参阅
scipy.linalg.eigh
。>>> import numpy as np >>> 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])
相关用法
- Python SciPy linalg.eigvalsh_tridiagonal用法及代码示例
- Python SciPy linalg.eigvals用法及代码示例
- Python SciPy linalg.eigvals_banded用法及代码示例
- Python SciPy linalg.eig_banded用法及代码示例
- Python SciPy linalg.eigh_tridiagonal用法及代码示例
- Python SciPy linalg.eig用法及代码示例
- Python SciPy linalg.eigh用法及代码示例
- Python SciPy linalg.eigs用法及代码示例
- Python SciPy linalg.eigsh用法及代码示例
- Python SciPy linalg.expm用法及代码示例
- Python SciPy linalg.expm_multiply用法及代码示例
- Python SciPy linalg.expm_frechet用法及代码示例
- Python SciPy linalg.expm_cond用法及代码示例
- Python SciPy linalg.cdf2rdf用法及代码示例
- Python SciPy linalg.LaplacianNd用法及代码示例
- Python SciPy linalg.solve_circulant用法及代码示例
- Python SciPy linalg.polar用法及代码示例
- Python SciPy linalg.clarkson_woodruff_transform用法及代码示例
- Python SciPy linalg.rsf2csf用法及代码示例
- Python SciPy linalg.hessenberg用法及代码示例
- Python SciPy linalg.tril用法及代码示例
- Python SciPy linalg.triu用法及代码示例
- Python SciPy linalg.svd用法及代码示例
- Python SciPy linalg.ishermitian用法及代码示例
- Python SciPy linalg.invhilbert用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.eigvalsh。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。