2012-10-14 43 views
1

我目前正在研究處理化學添加劑的iOS應用程序。爲了找到最小可能的加法,我正在求解Ax = B,其中A是6x6矩陣,B是一列。據我一直在閱讀,加速框架中的LAPACK是處理這個問題的最好方法。我已經能夠使用DGESV_爲小的添加項工作,但較大的對x有一些負值。這是一個問題,因爲您不能添加負量的化學品。使用LAPACK求解Ax = B,其中x> = 0

所以我需要知道的是在LAPACK中是否有一個函數可以讓我找到Ax = B的最小解,其中x總是大於或等於0?如果不是,是否有其他解決方案(除了自己做數學)?

謝謝

+0

除非A是等級低效,否則Ax = B只有一個解決方案。你是說A總是排名低效? – Gene

回答

3

除非A是秩虧的Ax = B用方形的解決方案是獨一無二的。所以沒有辦法擺脫答案中的負面因素。

如果假設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中,一些針對凸案進行了優化。也許其中一個會爲你工作。

+0

對,我在線性代數上有些生疏,完全忽略了我的想法。 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兼容庫能夠找到附近的解決方案嗎? 編輯:沒有意識到格式化會殺死矩陣。希望這不是太混亂。 –

+0

請參閱修改。 – Gene

+0

完美的是,其中一些圖書館看起來很有希望,我想我可以在其中一個工作。我希望我可以upvote你的答案,但我需要15的聲譽。 非常感謝您的指導 –

相關問題