2014-01-07 70 views
4

我想要求解一個線性方程組AX = B,其中A是稀疏且正定的。 B是一個矩陣而不是一個列向量。所以我必須解決多個線性方程組(多個右手邊)。我如何在Matlab中使用共軛梯度?matlab中的塊共軛梯度

我可以使用,對於一個列向量B.

+0

正如[你的相關文章](http://stackoverflow.com/questions提到/ 21366379/issues-with-using-pcg),當A足夠小,可以由MLDIVIDE處理並且B有很多列時,您可能不應該這樣做。 MLDIVIDE會更有效率。 –

回答

2

供應B的工作原理的一個是一個列向量B(:)代替。此外,功能形式提供一個高效的實現A的,

[ma,na]=size(A); 
[mb,nb]=size(B); 
[email protected](x) reshape(A*reshape(x,na,[]),[],1); 

X=pcg(afun,B(:)); 

    X=reshape(X,na,nb); 
2

解方程AX = B的線性系統,其中B是一個矩陣將導致X還作爲一個矩陣。但是,X的列將是線性系統的解決方案,右邊是B的相應列。因此,如果您已經有了一個共軛梯度函數,該函數可用於列向量B(其中在Matlab是x = pcg(A,b);),那麼你可以找到的情況下的解決方案,其中B是通過循環在列的矩陣:

X = zeros(size(A,2), size(B,2)); 
for i=1:size(B,2) 
    X(:,i) = pcg(A,B(:,i)); 
end