簡體   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