我想要求解一個線性方程組AX = B,其中A是稀疏且正定的。 B是一個矩陣而不是一個列向量。所以我必須解決多個線性方程組(多個右手邊)。我如何在Matlab中使用共軛梯度?matlab中的塊共軛梯度
我可以使用,對於一個列向量B.
我想要求解一個線性方程組AX = B,其中A是稀疏且正定的。 B是一個矩陣而不是一個列向量。所以我必須解決多個線性方程組(多個右手邊)。我如何在Matlab中使用共軛梯度?matlab中的塊共軛梯度
我可以使用,對於一個列向量B.
供應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);
解方程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
正如[你的相關文章](http://stackoverflow.com/questions提到/ 21366379/issues-with-using-pcg),當A足夠小,可以由MLDIVIDE處理並且B有很多列時,您可能不應該這樣做。 MLDIVIDE會更有效率。 –