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

施加此约束意味着不可能完全有解决方案(如果您以分析方式进行此操作,则只有一个唯一的解决方案,如果它具有负数条目,这使我很不走运),但是必须有一种方法可以找到一个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])


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

最佳答案

您的问题称为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或更佳的自定义公式:自定义(迭代)算法。

关于python - 用python的答案求解约束的矩阵方程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44368791/

10-12 16:04