函数 eigs #

计算方阵的特征值,并可选择计算特征向量。特征值按其绝对值升序排序,并作为向量返回到返回项目的 values 属性中。代数重数为 k 的特征值将列出 k 次,因此返回的 values 向量的长度始终等于输入矩阵的大小。

返回值中的 eigenvectors 属性提供特征向量。它是一个普通对象的数组:每个对象的 value 属性给出关联的特征值,vector 属性给出特征向量本身。请注意,在 eigenvectors 提供的列表中,相同的 value 属性出现的次数与其几何重数相同。

如果算法未能收敛,它将抛出错误 – 在这种情况下,您仍然可以在 err.valueserr.vectors 中找到有用的信息。

请注意,‘precision’ 选项并不直接指定返回的特征值的*精度*。相反,它决定了迭代近似上三角矩阵的条目必须小到什么程度才能被视为零。返回的特征值的实际精度可能大于或小于精度,具体取决于矩阵的条件以及实际特征值之间的距离。请注意,目前使用的是相对简单、“传统”的特征值计算方法;这不是现代、高精度的特征值计算。不过,它通常应该能产生相当合理的结果。

Syntax #

math.eigs(x, [prec])
math.eigs(x, {options})

Parameters #

Parameter Type Description
x Array | Matrix 要对角化的矩阵
opts number | BigNumber | OptsObject 带有 precision 键的对象,默认为 config.relTol,以及 eigenvectors 键,默认为 true,指定是否计算特征向量。如果只是一个数字,则指定精度。

Returns #

Type Description
{values: Array | Matrix, eigenvectors?: Array<EVobj>}} 包含特征值数组和 {value: number | BigNumber, vector: Array | Matrix 的对象 对象。如果未请求特征向量,则 eigenvectors 属性为 undefined。

Throws #

Type | Description —- | ———–

Examples #

const { eigs, multiply, column, transpose, matrixFromColumns } = math
const H = [[5, 2.3], [2.3, 1]]
const ans = eigs(H) // returns {values: [E1,E2...sorted], eigenvectors: [{value: E1, vector: v2}, {value: e, vector: v2}, ...]
const E = ans.values
const V = ans.eigenvectors
multiply(H, V[0].vector)) // returns multiply(E[0], V[0].vector))
const U = matrixFromColumns(...V.map(obj => obj.vector))
const UTxHxU = multiply(transpose(U), H, U) // diagonalizes H if possible
E[0] == UTxHxU[0][0]  // returns true always

// Compute only approximate eigenvalues:
const {values} = eigs(H, {eigenvectors: false, precision: 1e-6})

另请参阅 #

inv

Fork me on GitHub