|
|

楼主 |
发表于 2005-1-27 18:34:49
|
显示全部楼层
[分享]:化缘
这是一个用共轭梯度法求解线性代数方程组Ax=r的Fortran子程序,子程序名为:
SUBROUTINE CG_LAE(AX,X,R,N,ERD,MAXSTEP,KEND)
这里的AX是一个外部过程,说明为EXTERNAL类型,其形式为
SUBROUTINE AX(X,R)
其功能是对于任意输入的矢量x,计算出系数矩阵A和x的乘积,存储在r内,所以
这个子程序其实就是隐含给出了系数矩阵。R在输入时存储的是右端项,在程序内部
会被改动,X在输入时存储的是初值,返回时存储的是解。N为方程组的自由度数,
ERD是余量的L2范数容限,MAXSTEP为迭代的最大步数,KEND为返回时的实际迭代步数,
如果达到最大迭代步数时,余量仍然比较大,则KEND为负值;通常情况下,应该是
在远小于最大迭代步数MAXSTEP的情况下,余量的L2范数就小于ERD了。
注意,这个方法是针对对称系统的,非对称系统虽然有时也可以得到正确的结果,但是
也可能不收敛。
|
|