繁体   English   中英

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

[英]Solving Ax=B using LAPACK, where x >= 0

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

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

谢谢

除非A是秩不足的,否则Ax = B且A平方的解是唯一的。 因此,没有办法消除答案中的负面因素。

如果假设A和B可能包含导致负分量的错误,但想找到所有非负分量的“附近”解决方案,则可以将其强制转换为:

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

这是一个二次程序。 有一些库可以解决此类问题,但是LAPACK并不是其中之一。

编辑

您的矩阵是完整等级。 Wolfram Alpha非常适合玩这样的小问题。 您的6x6的行列式为5x10 ^ 11,因此条件非常好。

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

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

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

这是QP库的页面 ,有些使用C语言,有些针对凸情况进行了优化。 也许其中之一会为您工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM