使用 numpy 的矩阵的条件数
Condition number of a matrix using numpy
[python 2.7 和 numpy v1.11.1] 我正在查看矩阵条件数,并尝试在不使用函数 np.linalg.cond()
.[=13= 的情况下计算矩阵的条件数]
根据 numpy 的文档,矩阵条件数的定义是 "the norm of x times the norm of the inverse of 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
我的计算错误在哪里?
谢谢!
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
您正在尝试使用 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 cond() 目前有问题。总有一天我们会修复它,但现在如果您正在为线性方程解执行此操作,您可以使用 SciPy linalg.solve
这将产生精确奇点的错误或倒数条件的警告数字低于阈值,如果数组是可逆的,则没有。
[python 2.7 和 numpy v1.11.1] 我正在查看矩阵条件数,并尝试在不使用函数 np.linalg.cond()
.[=13= 的情况下计算矩阵的条件数]
根据 numpy 的文档,矩阵条件数的定义是 "the norm of x times the norm of the inverse of 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
我的计算错误在哪里?
谢谢!
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
您正在尝试使用 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 cond() 目前有问题。总有一天我们会修复它,但现在如果您正在为线性方程解执行此操作,您可以使用 SciPy linalg.solve
这将产生精确奇点的错误或倒数条件的警告数字低于阈值,如果数组是可逆的,则没有。