24小时热门版块排行榜    

查看: 2363  |  回复: 50
本帖产生 1 个 数学EPI ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

xjw0413

铜虫 (初入文坛)

[交流] 【讨论】预调件共轭梯度法(PCG) 已有4人参与

有限元计算经常碰到大型稀疏矩阵,由于此类线性方程组通常条件数是比较大的,方程组的性态不好,所以最好用迭代方法求解,比方说是预调件共轭梯度法,但此方法在选择预调件矩阵时似乎没有一个同一的标准,大多推荐的是采用incomplete LU decomposition做为预调件矩阵。incomplete LU decomposition的计算方法似乎又有很多种。
1. incomplete LU decomposition 的计算时间应该比 LU decomposition要快速的多吧,不然直接用LU decomposition不就解出来了吗,又何必再来PCG迭代呢?
2. 采用PCG方法的前提应该是系数矩阵对称、正定吧,因为其原理是一个相当于势函数的东西取极小值。那对于非正定的系数矩阵能求解吗,我构造了几个非正定的,有的似乎是能够收敛到正确结果的。

希望各位虫用解答和讨论。
回复此楼
The life I want, there's no short cut.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

saladin983

铁杆木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
33楼: Originally posted by mastergxm at 2012-01-02 15:41:35:
我发现这个BiCGSTAB在有些时候似乎不管用。
我就碰到这样一种情况,以上面图中求解过程中的各变量为例。
初始值我是这样设置的:X0=0;r*o因为可以任意设置,所以我在程序中将r*o=X0;并且的我的方程组 ...

对于Krylov子空间类的迭代算法的效率,最重要的自然是系数矩阵的特征值分布,但是初始向量的确也会有很大的影响。比如说,在系数矩阵的(绝对值)最小的特征值接近于0的情况下,若初始迭代向量是相应的特征值的话,则最开始的迭代过程非常耗时。事实上在很多情况下,CG的迭代过程表现出开始时残量下降较慢,而最后一段则下降较大,这是一个在实际运算中很麻烦的状况。通常需要通过条件预处理来克服。这一点,我相信GMRES不会比BiCGStab更好。

回到你的问题,我比较困惑的是,如果右端向量是0的话,你的解不应该就是0么?难道是不满秩的方程组或者是过定的?但这些情况下都是不能用这些迭代法直接求解的。
34楼2012-01-03 22:55:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 51 个回答

saladin983

铁杆木虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
lovibond(金币+1): 鼓励交流 2011-06-18 10:34:45
1、还有改良条件数、数值稳定性的考虑
2、系数矩阵非正定的话,迭代过程中应该出现残量上升的情况,能够求解只能算是运气,个人以为实在迭代到负方向之前程序就已经终止。非正定的情况下通常用另一种Krylov子空间迭代法——GMRES求解。
2楼2010-09-06 22:58:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xjw0413

铜虫 (初入文坛)

引用回帖:
Originally posted by saladin983 at 2010-09-06 22:58:01:
1、还有改良条件数、数值稳定性的考虑
2、系数矩阵非正定的话,迭代过程中应该出现残量上升的情况,能够求解只能算是运气,个人以为实在迭代到负方向之前程序就已经终止。非正定的情况下通常用另一种Krylov子空间 ...

“个人以为实在迭代到负方向之前程序就已经终止”,你的意思是说,设定判断标准,如果残量变大就终止程序并报错吗?
我试一试你推荐的那个方法。
谢谢你了!
The life I want, there's no short cut.
3楼2010-09-07 14:04:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

saladin983

铁杆木虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
lovibond(金币+1): 鼓励耐心交流 2011-06-18 10:35:05
引用回帖:
Originally posted by xjw0413 at 2010-09-07 08:04:33:

“个人以为实在迭代到负方向之前程序就已经终止”,你的意思是说,设定判断标准,如果残量变大就终止程序并报错吗?
我试一试你推荐的那个方法。
谢谢你了!

在特定精度下终止程序实际上就是在一定的子空间内取得了解的近似。我的意思是你得到看似正确的解可能是因为这个子空间还没有包含任何系数矩阵的负曲率方向,这种情况下能得到满足精度要求的一个近似解似乎也很自然。一旦侦测到一个负的方向,迭代序列很可能因此发散。具体的表现是什么,还是需要比较严谨的推导。总之这种情况下用CG得到的结果是没有说服力的,这个不是改变终止准则就能修正的。
4楼2010-09-07 16:06:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见