如何用Python(NumPy,SciPy等)求解AX=B方程,其中A,X,B是矩阵,X的所有元素都必须是非负的

2024-03-29 13:46:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用Python解一个方程AX=B,其中A,X,B是矩阵,X的所有值都必须是非负的。在

我找到的最好的解决办法是

X = np.linalg.lstsq(A, B, rcond=None)

但结果X包含负值。有没有可能得到一个没有负值的解?提前谢谢!在


Tags: nonenp矩阵ax方程linalg解决办法负值
2条回答

一般来说,这在数学上是不可能的。给定A和{}可逆的基本要求,X是唯一矩阵。如果您不喜欢X所拥有的元素,那么您不能简单地要求另一个解决方案:没有解决方案。您必须更改AB以获得不同的结果。在

您可以使用cvxpy来解决它:

import cvxpy

def solve(A, B):
    """
    Minimizes |AX - B|**2, assuming A and B are 
    square matrices for simplicity. If this optimized 
    error is zero, this corresponds to solving AX = B.
    """
    n = A.shape[0]
    X = cvxpy.Variable((n,n))
    # Set objective
    obj_fun = cvxpy.sum_squares(A*X - B)
    objective = cvxpy.Minimize(obj_fun)
    # Set constraints
    constraints = [X >= 0]
    prob = cvxpy.Problem(objective, constraints)
    result = prob.solve(solver = "ECOS")
    return X.value

编辑:我相信Prune的答案是正确的。您可以通过检查results来检查数值求解器中的错误是否为非零。在

相关问题 更多 >