我目前正在尝试求解形式为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-squares和scipy 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/