【问题标题】:Solving Ax=B using LAPACK, where x >= 0使用 LAPACK 求解 Ax=B,其中 x >= 0
【发布时间】:2012-10-14 22:04:57
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 除非 A 秩无效,否则 Ax=B 只有一个解。你是说 A 总是排名低的吗?

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


【解决方案1】:

除非 A 秩不足,否则 Ax = B 与 A 正方形的解是唯一的。所以没有办法去掉答案中的负面成分。

如果您假设 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 中,一些针对凸情况进行了优化。也许其中一种对你有用。

【讨论】:

  • 是的,我的线性代数有点生疏了,完全忽略了我的想法。 A = [61.5 0.0 0.0 147.4 0.0 0.0 0.0 0.0 103.9 0.0 165.0 0.0 0.0 26.1 0.0 103.0 0.0 0.0 72.0 0.0 0.0 0.0 127.4 0.0 0.0 0.0 72.0 0.0 0.0 190.0 105.8 0.0 0.0 0.0 0.0 158.4除非我弄乱,相信这是满-秩。您是否碰巧知道任何能够找到附近解决方案的 Objective-C 兼容库?编辑:没有意识到格式化会杀死矩阵。希望这不会太令人困惑。
  • 完美,其中一些库看起来很有前途,我想我可以使用其中的一个。我希望我能支持你的答案,但我需要 15 名声望。非常感谢您的指导
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
相关资源
最近更新 更多