2014-11-01 172 views
3

我正在寫的程序與犰狳C++(4.400.1)犰狳複雜稀疏矩陣逆

我有必須是稀疏和複雜的矩陣,並且我想要計算這種矩陣的逆。由於它是稀疏的,它可能是僞逆,但我可以保證矩陣具有完整的對角線。

在犰狳的API文檔,它提到的方法.i()計算任何矩陣的逆,但是sp_cx_mat成員不包含這樣的方法,並且inv()pinv()功能顯然不能處理sp_cx_mat類型。

sp_cx_mat Y; 

/*Fill Y ensuring that the diagonal is full*/ 

sp_cx_mat Z = Y.i(); 

sp_cx_mat Z = inv(Y); 

他們沒有工作。

我想知道如何計算sp_cx_mat類型的矩陣的逆。

+0

什麼是尺寸? X * X或X * Y? – Surt 2014-11-01 11:38:41

+0

矩陣是正方形的,所以X乘X – 2014-11-01 19:08:50

+0

稀疏矩陣的逆不一定是稀疏的。你真的需要稀疏矩陣的逆嗎?我在快速搜索後看到的所有文獻都建議以不同的方式解決潛在的問題。即使用迭代方法(或其他)來求解Ax = b。 – Unapiedra 2014-11-05 09:02:59

回答

2

Armadillo中的稀疏矩陣支持不完整,許多可用於稠密矩陣的因式分解/複雜運算不適用於稀疏矩陣。造成這種情況的原因有很多,其中最大的一點是有效的複雜操作(如稀疏矩陣的因式分解)仍然是一個開放的研究領域。因此,cx_sp_mat或其他sp_mat類型沒有.i()功能可用。另一個原因是稀疏矩陣開發人員缺乏時間(......我)。

考慮到稀疏矩陣的逆矩陣一般會很密集,那麼您可以更好地將您的cx_sp_mat變成cx_mat,然後使用通常用於稠密矩陣的相同反演技術。既然你打算把它當作一個密集矩陣來表示,那麼這是一個公平的假設,你有足夠的RAM來做到這一點。