使用numpy的矩阵的条件数

时间:2017-12-21 17:17:41

标签: 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)

1.84814479698e + 16

print np.linalg.norm(a) * np.linalg.norm(np.linalg.inv(a))

2.027453660713377e + 17

我的计算错误在哪里?

谢谢!

3 个答案:

答案 0 :(得分:4)

当cond使用2-norm时,

norm默认使用Frobenius范数作为矩阵:

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

答案 1 :(得分:3)

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

print(np.linalg.norm(a)*np.linalg.norm(np.linalg.inv(a)))
print(np.linalg.cond(a, p='fro'))

制作

2.02745366071e+17
2.02745366071e+17

答案 2 :(得分:1)

NumPy cond()目前有错误。有一段时间我们会修复它但是现在如果你这样做线性方程解决方案,你可以使用SciPy linalg.solve,它会产生精确奇点的错误,或者如果倒数条件数低于阈值则发出警告如果阵列是可逆的,则没有任何内容。