我正试图求解以下方程组=
-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.linal.solve函数。我总是得到这样的错误::numpy.linalg.LinAlgError:奇异矩阵。我知道我已经通过使一行元素为零创建了一个奇异矩阵。
我的矩阵&代码::
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.lssq返回::
(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. ]))
我应该如何从上面的数组中获得解决方案??。。上面数组中的no都不是解决方案。。
您的调用顺序是正确的,尽管我会拉出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)
正如其他人所提到的,您的系统是过度确定的。这意味着任何适合的情况都可能是糟糕的。事实上,np.linalg.lstsq
返回残差:
残差:{(),(1,),(K,)}ndarray残差总和;b-a*x中每列的平方欧几里得2-范数。如果a的秩是<N或>M,这是一个空数组。如果b是一维的,这是一个(1,)形状的数组。否则形状为(K,)。
在这种情况下是:
print sol[1]
>>> array([0.96644295])
这表明拟合非常差(这里没有近似线性解)。我们可以通过再次检查看到:
print (b - np.dot(A, sol[0])).sum()
>>> 1.36912751678
在NxN
的情况下,这将是零。
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
。)
天哪!!!!。问题出在最后一个方程式上。如果你把前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)
应该是平方和非奇异矩阵。
>> 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]