如何用NumPy求解齐次线性方程?

abl*_*lmf 5 math numpy

如果我有这样的齐次线性方程

array([[-0.75,  0.25,  0.25,  0.25],
       [ 1.  , -1.  ,  0.  ,  0.  ],
       [ 1.  ,  0.  , -1.  ,  0.  ],
       [ 1.  ,  0.  ,  0.  , -1.  ]])
Run Code Online (Sandbox Code Playgroud)

我希望得到一个非零解决方案.如何用NumPy完成?

编辑

linalg.solve仅适用于A*x = b,其中b不包含0.

rcs*_*rcs 8

您可以使用SVD或QR分解来计算线性系统的零空间,例如:

import numpy

def null(A, eps=1e-15):
    u, s, vh = numpy.linalg.svd(A)
    null_space = numpy.compress(s <= eps, vh, axis=0)
    return null_space.T
Run Code Online (Sandbox Code Playgroud)

这样可以得到你的例子:

>>> A
matrix([[-0.75,  0.25,  0.25,  0.25],
        [ 1.  , -1.  ,  0.  ,  0.  ],
        [ 1.  ,  0.  , -1.  ,  0.  ],
        [ 1.  ,  0.  ,  0.  , -1.  ]])

>>> null(A).T
array([[-0.5, -0.5, -0.5, -0.5]])

>>> (A*null(A)).T
matrix([[ 1.66533454e-16, -1.66533454e-16, -2.22044605e-16, -2.22044605e-16]])
Run Code Online (Sandbox Code Playgroud)

另请参阅维基百科上的零空间的数值计算部分.


Sas*_*las 6

就此而言,过约束齐次线性系统的最佳解决方案是与最小特征值相关联的特征向量。所以给定U作为系统的系数矩阵,解为:

import numpy as np

def solution(U):
    # find the eigenvalues and eigenvector of U(transpose).U
    e_vals, e_vecs = np.linalg.eig(np.dot(U.T, U))  
    # extract the eigenvector (column) associated with the minimum eigenvalue
    return e_vecs[:, np.argmin(e_vals)] 
Run Code Online (Sandbox Code Playgroud)