【问题标题】:Block conjugate gradient in matlabmatlab中的块共轭梯度
【发布时间】:2014-01-25 12:47:54
【问题描述】:

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

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

【问题讨论】:

  • 正如your related post 中提到的,当 A 小到可以由 MLDIVIDE 处理并且 B 有很多列时,您可能不应该这样做。 MLDIVIDE 会更有效率。

标签: 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2018-11-24
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多