【发布时间】:2011-08-18 20:23:52
【问题描述】:
我试图找到给定矩阵的零空间(Ax=0 的解空间)。我找到了两个例子,但我似乎都无法工作。此外,我不明白他们在做什么才能到达那里,所以我无法调试。我希望有人能够指导我完成此操作。
文档页面(numpy.linalg.svd 和 numpy.compress)对我来说是不透明的。我学会了通过创建矩阵C = [A|0] 来做到这一点,找到减少的行梯形形式并逐行求解变量。在这些示例中,我似乎无法理解它是如何完成的。
感谢您的所有帮助!
这是我的示例矩阵,与wikipedia example 相同:
A = matrix([
[2,3,5],
[-4,2,3]
])
方法(found here和here):
import scipy
from scipy import linalg, matrix
def null(A, eps=1e-15):
u, s, vh = scipy.linalg.svd(A)
null_mask = (s <= eps)
null_space = scipy.compress(null_mask, vh, axis=0)
return scipy.transpose(null_space)
当我尝试时,我得到一个空矩阵:
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> from scipy import linalg, matrix
>>> def null(A, eps=1e-15):
... u, s, vh = scipy.linalg.svd(A)
... null_mask = (s <= eps)
... null_space = scipy.compress(null_mask, vh, axis=0)
... return scipy.transpose(null_space)
...
>>> A = matrix([
... [2,3,5],
... [-4,2,3]
... ])
>>>
>>> null(A)
array([], shape=(3, 0), dtype=float64)
>>>
【问题讨论】:
-
您链接到的维基百科页面实际上很好地解释了为什么在处理浮点值时应该使用 SVD 来计算矩阵的零空间(或求解)。 en.wikipedia.org/wiki/…您描述的方法(逐行求解变量)会放大任何舍入误差等(这与您几乎不应该显式计算矩阵的逆矩阵的原因相同......)
标签: numpy matrix scipy linear-algebra svd