Kev*_*ern 1 objective-c linear-algebra lapack ios accelerate-framework
我目前正在开发一个处理水中化学添加物的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
Run Code Online (Sandbox Code Playgroud)
这是一个二次程序。有一些库可以解决此类问题,但是LAPACK并不是其中之一。
编辑
您的矩阵是完整等级。 Wolfram Alpha非常适合玩这样的小问题。您的6x6的行列式为5x10 ^ 11,因此条件非常好。
我不是QP专家,但是这个人有特殊的结构。对于标准格式(请参阅Wikipedia中的符号),重写为:
minimize ( x'(A'A)x + (-2b'A)x ) subject to x >= 0
Run Code Online (Sandbox Code Playgroud)
在这里,二次系数矩阵Q = A'A是对称正定的,(如果我正确地回忆了我的矩阵代数),使系统凸且更易于求解:保证了单个全局解。注意c = -2b'A。
这是QP库的页面,有些使用C语言,有些针对凸情况进行了优化。也许其中之一会为您工作。
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |