[英]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.