【问题标题】:Solving a matrix equation with constraints on the answer in python在python中求解一个对答案有约束的矩阵方程
【发布时间】:2017-06-05 12:18:18
【问题描述】:

我目前正在尝试求解 Ax = b 形式的矩阵方程,其中 A 是 NxN 方阵,x,b 是 1xN 向量。但是,我要求所有元素 x[i] 都是非负数。

施加此约束意味着很可能无法找到解决方案(如果您在分析上这样做,则只有 1 个唯一的解决方案,如果它有负数条目会让我不走运)但必须有办法找到一个尽可能接近的 x?我不确定它的正式名称是什么,所以我几乎没有找到运气。

到目前为止我所拥有的:

N=10

A = np.random.rand(N,N)
B = np.random.rand(N)

A_inv = np.linalg.inv(A)
x = np.dot( A_inv, B )

x=
array([ 0.42216451,  1.70270083, -1.54040488,  2.18724233,  2.04278932, -1.76074253])

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: python python-2.7 numpy matrix


    【解决方案1】:

    您的问题称为non-negative least-squaresscipy supports it

    未经测试,使用情况如下:

    import numpy as np
    from scipy.optimize import nnls
    
    N=10
    
    A = np.random.rand(N,N)
    B = np.random.rand(N)
    x, rnorm = nnls(A, B)
    

    该算法相当古老且高度可信,但仅适用于中小型问题(因为它在内部计算 A.T * A)。如果您遇到大问题(数百万变量的稀疏问题),您应该尝试一些基于L-BFGS-B 或更好的自定义公式:自定义(迭代)算法。

    【讨论】:

    • 太棒了,谢谢。最终的实现将是许多(~1000)小(N~5)个解决方案,所以这应该可以完美地工作。
    • 那么 nnls 的算法基础非常适合(快速、稳健和高精度)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多