使用 LAPACK 求解 Ax=B,其中 x >= 0



我目前正在开发一款iOS应用程序,该应用程序可以处理添加到水中的化学物质。为了找到可能的最小加法,我求解Ax=B,其中A是一个6x6矩阵,B是一列。据我所读,Accelerate框架中的LAPACK是处理这一问题的最佳方式。我已经能够使用DGESV_使其适用于小的添加,但较大的添加对x有一些负值。这是一个问题,因为你不能添加负量的化学物质。

所以我需要知道的是,LAPACK中是否有一个函数可以让我找到Ax=B的最小解,其中x总是大于或等于0?如果没有,有没有其他解决方案(除了自己计算)?

谢谢

除非A是秩亏的,否则具有A平方的Ax = B的解是唯一的。因此,没有办法消除答案中的负面成分。

如果您假设A和B可能包含导致负成分的错误,但希望找到一个包含所有非负成分的"附近"解决方案,那么您可以将其转换为:

minimize |Ax - b|  subject to x >= 0

这是一个二次规划。有一些库可以解决这些问题,但LAPACK不是其中之一。

编辑

你的矩阵是满秩的。Wolfram Alpha非常擅长处理这样的小问题。你的6x6有一个5x10^11的行列式,所以它有很好的条件。

我不是QP方面的专家,但这个有特殊的结构。对于标准形式(参见维基百科的注释),重写为:

minimize ( x'(A'A)x + (-2b'A)x )  subject to x >= 0

这里,二次系数矩阵Q = A'A是对称正定的,这(如果我正确地回忆我的矩阵代数)使系统是凸的,并且更容易求解:保证了单个全局解。注c = -2b'A

这里有一页QP库,有些是C语言的,有些是针对凸情况优化的。也许其中一个会为你工作。

相关内容

  • 没有找到相关文章

最新更新