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

时间:2012-10-14 22:04:58

标签: objective-c ios linear-algebra lapack accelerate-framework

我目前正在开发一款处理水中化学添加剂的iOS应用程序。为了找到最小可能的加法,我正在求解Ax = B,其中A是6x6矩阵,B是一列。就我一直在阅读而言,加速框架中的LAPACK是处理此问题的最佳方式。我已经能够使用DGESV_使其适用于少量添加,但较大的添加有x的负值。这是一个问题,因为您无法添加负量的化学物质。

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

谢谢

1 个答案:

答案 0 :(得分:4)

除非A排名不足,否则Ax = B与A square的解是唯一的。因此,没有办法摆脱答案中的负面因素。

如果您假设A和B可能包含导致负面组件的错误但想要找到包含所有非负组件的“附近”解决方案,那么您可以将其转换为:

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

这是一个二次方案。有解决此类问题的库,但LAPACK不是其中之一。

修改

您的矩阵是满级。 Wolfram Alpha非常适合玩这样的小问题。你的6x6具有5x10 ^ 11的行列式,所以它的条件非常好。

我不是QP的专家,但这个有特殊的结构。对于标准格式(请参阅Wikipedia for notation),请重写为:

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

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

Here is a page of QP libraries,有些在C中,有些针对凸包进行了优化。也许其中一个会为你效劳。