【问题标题】:Block conjugate gradient in matlabmatlab中的块共轭梯度
【发布时间】:2014-01-25 12:47:54
【问题描述】:
我想求解一个线性方程组,AX = B,其中 A 是稀疏且正定的。 B 是矩阵而不是列向量。所以我必须解决多个线性方程组(有多个右手边)。如何在 Matlab 中使用共轭梯度?
我可以使用适用于列向量 B 的那个。
【问题讨论】:
标签:
matlab
optimization
linear-algebra
【解决方案1】:
Supply B 是一个列向量 B(:)。此外,以函数形式提供 A 的有效实现,
[ma,na]=size(A);
[mb,nb]=size(B);
afun=@(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