我正在尝试解决以下方程式=
-14a + b + e = 0
2a - 14b + d = 0
b -14c +2d = 0
-15d + e = 0
+ 2c -14e = 0
a + b + c + d + e = 1
我将所需的零附加到由上述方程形成的矩阵。我使用了numpy.linalg.solve函数。我总是得到这个错误:: numpy.linalg.linalg.LinAlgError:奇异矩阵。 我知道我通过将一行元素设为零来创建一个奇异矩阵。
我的矩阵& code ::
a= np.array([
[-14, 1, 0, 0, 1, 0],
[2, -14, 0, 1, 0, 0],
[0, 1, -14, 2, 0, 0],
[0, 0, 0, -15, 1, 0],
[0, 0, 2, 0, -14, 0],
[1, 1, 1, 1, 1, 0]
])
b=np.array( [0, 0, 0, 0, 0, 1] )
x = np.linalg.solve(a, b)
还有另一种解决方法吗?
使用np.linalg.lstsq返回::
(array([ 0.00674535, 0.00713199, 0.00709352, 0.00582019, 0.006766 , 0.
]), array([], dtype=float64), 5, array([ 15.88397122, 15.68586038, 14.59368088, 13.14182044,
12.12312981, 0. ]))
我怎么能从上面的数组中得到我的解决方案??没有没有。在上面的数组是解决方案..
答案 0 :(得分:5)
你的通话顺序是正确的,但我会提取A
的最后一栏:
A = np.array([
[-14, 1, 0, 0, 1],
[2, -14, 0, 1, 0],
[0, 1, -14, 2, 0],
[0, 0, 0, -15, 1],
[0, 0, 2, 0, -14],
[1, 1, 1, 1, 1 ]])
b = np.array([0, 0, 0, 0, 0, 1])
sol = np.linalg.lstsq(A, b)
正如其他人提到的那样,您的系统是overdetermined。这意味着任何适合可能都是不好的。实际上,np.linalg.lstsq
会返回残差:
残差:{(),(1,),(K,)} ndarray 残差总和; b - a * x中每列的欧几里德2范数平方。如果a的等级是< N或> M,这是一个空数组。如果b是1维的,则这是(1)形状阵列。否则形状为(K,)。
在这种情况下是:
print sol[1]
>>> array([0.96644295])
这表明拟合非常差(这里没有近似线性解)。我们可以再次检查:
print (b - np.dot(A, sol[0])).sum()
>>> 1.36912751678
NxN
案例中为零。
答案 1 :(得分:3)
np.linalg.solve
的第二个参数应该是一维数组,而不是行向量:
>>> np.linalg.solve(a, b.ravel())
Traceback (most recent call last):
File "<ipython-input-13-81809fe2e837>", line 1, in <module>
np.linalg.solve(a, b.ravel())
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 328, in solve
raise LinAlgError('Singular matrix')
LinAlgError: Singular matrix
(它仍然不起作用,但那是因为a
是单数,np.linalg.det(a) == 0.0
。最好先尝试np.linalg.lstsq
。)
答案 2 :(得分:0)
天啊!!!!问题在于最后一个等式。如果你把前5个等式加起来
-14a + b + e = 0
2a - 14b + d = 0
+ b - 14c + 2d = 0
- 15d + e = 0
+ 2c - 14e = 0
你得到..
a + b + c + d + e = 0
因此,给定系统中的最后一个等式是 不正确 。即。
a + b + c + d + e = 1
初始情况error:: numpy.linalg.linalg.LinAlgError: Singular matrix
是由于您需要系统矩阵a
,如代码所示:
x = np.linalg.solve(a, b)
应该是 square 和非奇异矩阵。
>> help(np.linalg.solve)
solve(a, b)
Solve a linear matrix equation, or system of linear scalar equations.
Computes the "exact" solution, `x`, of the well-determined, i.e., full
rank, linear matrix equation `ax = b`.
Parameters
----------
a : (..., M, M) array_like
Coefficient matrix.
b : {(..., M,), (..., M, K)}, array_like
Ordinate or "dependent variable" values.
Returns
-------
x : {(..., M,), (..., M, K)} ndarray
Solution to the system a x = b. Returned shape is identical to `b`.
Raises
------
LinAlgError
If `a` is singular or not square.
包括用于求解5变量的6个方程导致非方形系统矩阵(5x6)。
但是,方程式系统的全部结合本身是不正确的。
这个问题的简单解决方案就是:
[0.0, 0.0, 0.0, 0.0, 0.0]