在matlab中阻止共轭梯度

时间:2014-01-07 17:46:53

标签: matlab optimization linear-algebra

我想解决一个线性方程组,AX = B,其中A是稀疏和正定的。 B是矩阵而不是列向量。所以我必须解决多个线性方程组(有多个右侧)。如何在Matlab中使用共轭梯度?

我可以使用适用于列向量B的那个。

2 个答案:

答案 0 :(得分:2)

供应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);

答案 1 :(得分: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