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