使用 numpy 的矩阵的条件数

jef*_*her 1 python numpy matrix linear-algebra matrix-inverse

[python 2.7 和 numpy v1.11.1] 我正在查看矩阵条件数,并试图在不使用函数的情况下计算矩阵的条件数np.linalg.cond()

根据 numpy 的文档,矩阵条件数的定义是“x 的范数乘以 x 的倒数的范数”。

||X|| * ||X^-1||

对于矩阵

a = np.matrix([[1, 1, 1],
               [2, 2, 1],
               [3, 3, 0]])

print np.linalg.cond(a)
Run Code Online (Sandbox Code Playgroud)

1.84814479698e+16

print np.linalg.norm(a) * np.linalg.norm(np.linalg.inv(a))
Run Code Online (Sandbox Code Playgroud)

2.027453660713377e+17

我的计算错误在哪里?

谢谢!

B. *_* M. 5

norm 默认情况下,矩阵使用 Frobenius 范数,当 cond 使用 2-范数时:

In [347]: np.linalg.cond(a)
Out[347]: 38.198730775206172

In [348]:np.linalg.norm(a,2)*np.linalg.norm(np.linalg.inv(a),2)
Out[348]: 38.198730775206243

In [349]: np.linalg.norm(a)*np.linalg.norm(np.linalg.inv(a))
Out[349]: 39.29814570824248
Run Code Online (Sandbox Code Playgroud)


dru*_*rry 5

您正在尝试使用 Frobenius 范数定义来计算条件。这是条件计算的可选参数。

print(np.linalg.norm(a)*np.linalg.norm(np.linalg.inv(a)))
print(np.linalg.cond(a, p='fro'))
Run Code Online (Sandbox Code Playgroud)

生产

2.02745366071e+17
2.02745366071e+17
Run Code Online (Sandbox Code Playgroud)