Python 使用numpy的矩阵的条件数

Python 使用numpy的矩阵的条件数,python,numpy,matrix,linear-algebra,matrix-inverse,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

[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

我的计算错误在哪里

谢谢

默认情况下,当cond使用2-范数时,对矩阵使用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
默认情况下,当cond使用2-范数时,对矩阵使用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

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

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

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

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

NumPy目前有四轮马车。总有一天我们会修正它,但现在如果你是为线性方程解决方案这样做的话,你可以使用SciPy linalg.solve,如果倒数条件数低于阈值,并且数组是可逆的,则会产生精确奇点的错误或警告。

NumPy当前有问题。总有一天我们会修正它,但现在如果你是为线性方程解决方案这样做的话,你可以使用SciPy linalg.solve,它会产生精确奇异性的错误,或者在倒数条件数低于阈值时发出警告,如果数组是可逆的,则什么也没有。

矩阵奇异-0 det,inf等不能复制。我的Python/Numpy在调用inva时会生成LinalErrorSingular矩阵。singular-0det、inf-inverse等矩阵无法复制。当我调用inva时,我的Python/Numpy生成了LinalErrorSingular矩阵。我不知道np.linalg.norm理解运算符规范+谢谢,这个解释很有帮助!然而,我发现np.linalg.conda,2=np.linalg.norma,2*np.linalg.normnp.linalg.inva,2!=np.linalg.condaJust四舍五入问题。可能操作的顺序不完全相同。我不知道np.linalg.norm理解操作规范+谢谢,这个解释很有帮助!然而,我发现np.linalg.conda,2=np.linalg.norma,2*np.linalg.normnp.linalg.inva,2!=np.linalg.condaJust四舍五入问题。可能操作的顺序并不完全相同。