matlab中块共轭梯度的预处理器

时间:2016-06-21 01:35:42

标签: matlab

我想解决一个线性方程组,AX = B,其中A是相对大的稀疏和正定JxJ矩阵。 B是矩阵而不是具有维度JxS的列向量。

一种方法是调整"调整"这个问题,以便标准的pcg例程可以工作,例如:

design=kron(speye(S),A)
X=pcg(design,B(:));

然而,上述情况对我来说是不可能的,因为矩阵design太大而无法存储,即使在利用其稀疏性之后也是如此。因此,更好的解决方案是运行pcg而不存储矩阵design,即

afun=@(x)  reshape(A*reshape(x,J,[]),[],1);
X=pcg(afun,B(:));
X=reshape(X,J,S);

现在我回答我的问题:有没有办法允许预处理器(例如从ichol)到上面写的代码而不用存储任何额外的矩阵?

我这样说是因为X=pcg(afun,B(:));需要永远收敛,希望在这种情况下预处理器可以提供帮助。

1 个答案:

答案 0 :(得分:0)

虽然您应该知道pcg已经使用了预处理器,但是您是否明确地给它,如果您真的想要使用ichol调节器,那么没有比这更好的选择使用an example in the documentation...

明确描述的内容
  

使用只有一个输入参数的ichol来构造一个不完整的参数    具有零填充的Cholesky分解。

     

L = ichol(A);

     

[x1,fl1,rr1,it1,rv1] = pcg(A,b,1e-8,100,L,L');

根据你的design矩阵,你的代码中无处可见,所以我想这解决了存储它的需要。