﻿功能:稀疏对称矩阵方程组求解(共轭梯度法CG)
 
格式:
SolveSparseCG(A,B,x0,Loop,Error)
SolveSparseCG(A,B,x0,Loop)
SolveSparseCG(A,B,x0)
SolveSparseCG(A,B)
A:列数为3的矩阵变量(稀疏矩阵存储格式,第1列为元素值,第2列为行索引值,第3列为列索引值),其中A代表的稀疏矩阵必须是方阵
B:一个列数为1的矩阵变量
x0:初始迭代值
Loop:迭代循环总次数,默认为1000
Error:循环跳出的控制误差,默认1E-16
 
说明:本程序求解的格式为A*x=B这种问题.其中A是对称方阵.考虑到收敛性,A最好是正定对称矩阵.由于能力有限,本程序不对矩阵做预处理.
 
参考:周铁,徐树方,张平文,李铁军.计算方法[M].清华大学出版社:北京,2006:111-112
 
例子:
 
a =
[ 40.0000000000000    5.00000000000000    0.00000000000000    0.00000000000000
  5.00000000000000    15.0000000000000    2.00000000000000    0.00000000000000
  0.00000000000000    2.00000000000000    10.0000000000000    0.00000000000000
  0.00000000000000    0.00000000000000    0.00000000000000    6.00000000000000 ]
b =
[ 4.19307872848263
  9.59621052704575
  2.47985608991229
  1.13943188038628 ]
 //假如系统存在如上形式,求a*x=b的解
 
c={SparseCreate<矩阵运算\SparseCreate>}(a)//先创建稀疏矩阵格式存储的矩阵变量
c =
[ 40.0000000000000    1.00000000000000    1.00000000000000
  5.00000000000000    1.00000000000000    2.00000000000000
  5.00000000000000    2.00000000000000    1.00000000000000
  15.0000000000000    2.00000000000000    2.00000000000000
  2.00000000000000    2.00000000000000    3.00000000000000
  2.00000000000000    3.00000000000000    2.00000000000000
  10.0000000000000    3.00000000000000    3.00000000000000
  6.00000000000000    4.00000000000000    4.00000000000000 ]
 
x=SolveSparseCG(c,b)//使用本函数求解得到如下结果,注意这里的c所代表的矩阵必须是对称矩阵,在实际使用的时候,c这个变量是你之前按指定格式存储好的,然后再调用此函数求解
x =
[ 0.02811762571603
  0.61367473865498
  0.12525066169500
  0.18990531284338 ]