使用numpy使用6个线性方程求解5个变量

jon*_*789 3 python numpy linear-algebra

我正在尝试解决以下方程式=

 -14a +   b +            e = 0 
   2a - 14b +        d     = 0 
          b  -14c  +2d     = 0 
                  -15d + e = 0 
          +  2c       -14e = 0 
    a +   b + c  +  d +  e = 1 
Run Code Online (Sandbox Code Playgroud)

我将所需的零附加到由上述方程形成的矩阵.我使用了numpy.linalg.solve函数.我总是得到这个错误:: numpy.linalg.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)
Run Code Online (Sandbox Code Playgroud)

还有另一种解决方法吗?

使用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.        ]))
Run Code Online (Sandbox Code Playgroud)

我怎么能从上面的数组中得到我的解决方案??没有没有.在上面的数组是解决方案..

Hoo*_*ked 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)
Run Code Online (Sandbox Code Playgroud)

正如其他人提到的那样,你的系统是超定的.这意味着任何适合可能都是不好的.确实,np.linalg.lstsq返回残差:

残差:{(),(1,),(K,)} ndarray残差和; b - a*x中每列的欧几里德2范数平方.如果a的等级是<N或> M,则这是一个空数组.如果b是1维的,则这是(1)形状阵列.否则形状为(K,).

在这种情况下是:

print sol[1]
>>> array([0.96644295])
Run Code Online (Sandbox Code Playgroud)

这表明拟合非常差(这里没有近似线性解).我们可以通过再次检查来看到:

print (b - np.dot(A, sol[0])).sum()
>>> 1.36912751678
Run Code Online (Sandbox Code Playgroud)

在这种NxN情况下,这将是零.