错误:奇异矩阵

3

我在我的代码中遇到了一个错误,希望你能帮助我!:

我想使用 linalg.solve(A,Res)。第一个矩阵(A)有10行和10列,即matrix([10个数组,10个元素]),第二个矩阵有10行和1列,即matrix([1个数组,10个元素])。

当我运行代码时,会抛出以下错误:奇异矩阵。

我不知道该怎么做。当我不要求linalg.solve,但要求打印两个矩阵时,两个矩阵都正常:10个方程,10个变量。所以我不知道发生了什么。请帮忙!!!

如果您需要我粘贴代码(看起来很可怕),我可以这样做。

谢谢!


如果代码太大/难以阅读,建议您创建一个小的测试用例(我猜您不需要有10行/列),看看是否可以使其正常工作。如果不能,请在此处发布该小示例代码,否则人们必须猜测您的问题可能是什么。 - FriendFX
如果系统是欠定的,您可以使用numpy.linalg.lstsq来获取其中一个解决方案。 - Ben
1个回答

4

奇异矩阵是一种不能被求逆的矩阵,等价于行列式为零。因此,使用奇异矩阵无法解决方程组(可能没有解或有多个解,但在任何情况下都没有唯一解)。所以最好确保矩阵是非奇异的(即具有非零行列式),因为numpy.linalg.solve要求使用非奇异矩阵来求解。

这里有一些关于2 x 2矩阵的不错解释(但是推广到N x N矩阵也很简单)。


好的,但是我构建的这些矩阵是桁架计算的结果。因此,如果矩阵是奇异的,这意味着桁架无法解决?我很困惑,我的意思是,我知道线性代数,但即使您的矩阵具有与变量相同数量的方程,它也可能无法解决?(我不太记得那个) - Tarik Riadi
1
是的,行列式是使差异的量。想想这个:解[1 1; 1 1][x y]^T = [1 2]^T。它没有解(行列式为零)。或者,另一个极端是[1 1; 1 1][x y]^T = [1 1],它有无限多个解。因此,除非行列式非零(即系数矩阵非奇异),否则你的方程组要么没有解,要么有无限多个解。我建议您查看我发布的链接,它对快速复习非常有用。 - vsoftco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接