﻿功能:稀疏矩阵方程组求解(松弛迭代算法求解SOR)
 
格式:
[x,Effect]=SolveSparseSOR(A,B,x0,Loop,Error,w)
[x,Effect]=SolveSparseSOR(A,B,x0,Loop,Error)
[x,Effect]=SolveSparseSOR(A,B,x0,Loop)
[x,Effect]=SolveSparseSOR(A,B,x0)
[x,Effect]=SolveSparseSOR(A,B)
 
A:列数为3的矩阵变量(稀疏矩阵存储格式,第1列为元素值,第2列为行索引值,第3列为列索引值),其中A代表的稀疏矩阵必须是方阵
B:一个列数为1的矩阵变量
x0:初始迭代值
Loop:迭代循环总次数,默认为1000
Error:循环跳出的控制误差,默认1E-16
w:松弛因子,默认为1.5
 
x:求得的解
Effect:返回的一个1*3的矩阵变量,第一个参数为求解的残差平方和,第二个参数表示程序最大迭代次数,第三个参数表示迭代到最优值的迭代次数
 
说明:本程序求解的格式为A*x=B这种问题,其中A不要求为对称矩阵.
 
注意:本程序对算法进行过相应的调整,因此即使对角线出现0元素,本程序也可以计算。但是实际上,只有对角线严格占优的稀疏矩阵,本算法计算才更快一点。对于一般的稀疏线性矩阵,即使一个很小的阶,也很大可能得不得理想的结果。也因此，对于对角线占优的方程组才建议使用本函数求解!
 
例子:
 
a =
[ 4.00000000000000    1.00000000000000    0.00000000000000    0.00000000000000
  0.00000000000000    5.60000000000000    1.00000000000000    0.00000000000000
  1.00000000000000    0.00000000000000    3.00000000000000    0.00000000000000
  2.00000000000000    2.00000000000000    0.00000000000000    6.00000000000000 ]
b =
[ 4.00000000000000
  5.00000000000000
  6.00000000000000
  7.00000000000000 ]
//上面给两个变量来示意
 
c={SparseCreate<矩阵运算\SparseCreate>}(a)//先得到稀疏矩阵格式数据
c =
[ 4.00000000000000    1.00000000000000    1.00000000000000
  1.00000000000000    1.00000000000000    2.00000000000000
  5.60000000000000    2.00000000000000    2.00000000000000
  1.00000000000000    2.00000000000000    3.00000000000000
  1.00000000000000    3.00000000000000    1.00000000000000
  3.00000000000000    3.00000000000000    3.00000000000000
  2.00000000000000    4.00000000000000    1.00000000000000
  2.00000000000000    4.00000000000000    2.00000000000000
  6.00000000000000    4.00000000000000    4.00000000000000 ]
 
[x,ef]=SolveSparseSOR(c,b)//回车后得到如下结果
x =
[ 0.85337243519389
  0.58651026327055
  1.71554252182221
  0.68670576632372 ]
ef =
[ 5.8032164762E-17    36.0000000000000    36.0000000000000 ]