我不太明白为什么numpy.linalg.solve()给出更准确的答案,而numpy.linalg.inv()在某种程度上分解,给出(我相信的)估计.
举一个具体的例子,我正在求解方程式C^{-1} * d ,其中C表示一个矩阵,并且d是一个向量数组.为了便于讨论,尺寸C是形状(1000,1000)和d形状(1,1000).
numpy.linalg.solve(A, b)求解A*x=bx 的等式,即x = A^{-1} * b.因此,我可以通过求解这个等式
(1)
inverse = numpy.linalg.inv(C)
result = inverse * d
Run Code Online (Sandbox Code Playgroud)
或(2)
numpy.linalg.solve(C, d)
Run Code Online (Sandbox Code Playgroud)
方法(2)给出了更精确的结果.为什么是这样?
究竟发生了什么,使一个"比另一个更好"?
我专注于特殊情况,其中Aanxd 矩阵(其中 k < d)表示 R^d 的子空间的正交基,而 b 已知在子空间内。我想过使用随 提供的工具numpy,但它们只适用于方阵。我有一种方法是用一些线性无关的向量填充矩阵来“平方”它然后求解,但我无法弄清楚如何选择这些向量,以便它们与基向量线性无关,而且我认为它是不是唯一的方法,我错过了一些可以使这更容易的东西。确实有比我提到的更简单的方法吗?如果不是,我该如何选择那些可以完成A为方阵的向量?