在Python/NumPy中计算Jordan正常的矩阵形式

sig*_*hol 11 python numpy matrix linear-algebra scipy

在MATLAB中,您可以使用该函数计算矩阵的Jordan正规形式jordan.

它有NumPy和SciPy中的等效功能吗?

War*_*ser 14

MATLAB jordan函数来自Symbolic Math Toolbox,因此从SymPy库中取代它的Python似乎并不合理.具体来说,Matrix该类具有该方法jordan_form.创建sympy Matrix时,可以将numpy数组作为参数传递.例如,以下是关于Jordan正常形式维基百科文章:

In [1]: import numpy as np

In [2]: from sympy import Matrix

In [3]: a = np.array([[5, 4, 2, 1], [0, 1, -1, -1], [-1, -1, 3, 0], [1, 1, -1, 2]])

In [4]: m = Matrix(a)

In [5]: m
Out[5]: 
Matrix([
[ 5,  4,  2,  1],
[ 0,  1, -1, -1],
[-1, -1,  3,  0],
[ 1,  1, -1,  2]])

In [6]: P, J = m.jordan_form()

In [7]: J
Out[7]: 
Matrix([
[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 4, 1],
[0, 0, 0, 4]])
Run Code Online (Sandbox Code Playgroud)

  • 只是评论:Jordan表单计算在浮点数值上是不稳定的 - 你可以尝试计算4x4矩阵的特征值[在sympy jordan_form docs](http://docs.sympy.org/0.7.1/modules /matrices.html#sympy.matrices.matrices.Matrix.jordan_form).LAPACK(因此Scipy)将报告它有4个不同的特征值.然而,精确算术给出了2倍的4倍简并特征值. (4认同)