﻿功能:对称正定线性方程组求解(本函数主要针对大型稀疏带状方程组求解)
 
格式:
SolveSparseLDL(A,B,Error)
SolveSparseLDL(A,B)
A:列数为3的矩阵变量(稀疏矩阵存储格式,第1列为元素值,第2列为行索引值,第3列为列索引值),这里每个元素的排列顺序没有要求,且你可只存储对称方阵左下角部分（包括对角线）的非0元素,注意A代表的稀疏矩阵必须是方阵
B:一个列数为1的矩阵变量
Error:判定正定性的一个误差控制变量,默认为1E-16
 
说明:本函数求解的是A*x=B这类问题,其中需要特别注意,这里的A必须是带状对称矩阵,程序计算时不检查A的对称性,在计算时直接使用矩阵的左下半部分，考虑到带宽,程序会自动为不符合规则的数据进行0元素填充.例如,下面红色部分0的元素你可以不存储，但程序内部计算时会为这些0元素分配内存，所以请尽可能地让非0数据靠近对角线,以免程序填充过多的0造成内存溢出以及增加计算量.
a =
[ "9"  0    9    0    0    0
  "0" "26"  0    0    0    0
  "9" "0"  "80"  39   0    0
  0    0   "39" "42"  99   31
  0    0    0   "99" "33"  0
  0    0    0   "31"  "0" "15" ]
 
参考:王超能.数值分析简明教程(第二版)[M].高等教育出版社,北京,2004:186-187
 
例子:
 
b =
[ 9.71456135144204
  6.66635193706786
  8.60613521589252
  3.07464123381052
  7.32800359713286
  1.49696606746733 ]
a =
[ 9.00000000000000    0.00000000000000    9.00000000000000    0.00000000000000    0.00000000000000    0.00000000000000
  "0.0000000000000"   26.0000000000000    0.00000000000000    0.00000000000000    0.00000000000000    0.00000000000000
  9.00000000000000    "0.0000000000000"   80.0000000000000    39.0000000000000    0.00000000000000    0.00000000000000
  0.00000000000000    0.00000000000000    39.0000000000000    42.0000000000000    99.0000000000000    31.0000000000000
  0.00000000000000    0.00000000000000    0.00000000000000    99.0000000000000    33.0000000000000    0.00000000000000
  0.00000000000000    0.00000000000000    0.00000000000000    31.0000000000000    "0.0000000000000"   15.0000000000000 ]
  
//现在我们要求解A*x=B,则先将A的左下部分存储为c,注意A当中有3个0元素你可以直接提供,也可以不提供（不提供时程序内部自动填充）
c =
[ 9.00000000000000    1.00000000000000    1.00000000000000
  26.0000000000000    2.00000000000000    2.00000000000000
  9.00000000000000    3.00000000000000    1.00000000000000
  80.0000000000000    3.00000000000000    3.00000000000000
  39.0000000000000    4.00000000000000    3.00000000000000
  42.0000000000000    4.00000000000000    4.00000000000000
  99.0000000000000    5.00000000000000    4.00000000000000
  33.0000000000000    5.00000000000000    5.00000000000000
  31.0000000000000    6.00000000000000    4.00000000000000
  15.0000000000000    6.00000000000000    6.00000000000000
  "0.0000000000000    2.00000000000000    1.00000000000000"
  "0.0000000000000    3.00000000000000    2.00000000000000"
  "0.0000000000000    6.00000000000000    5.00000000000000" ]
  
x=SolveSparseLDL(c,b)//回车执行求解命令得到如下解
x =
[ 1.12952170683402
  0.25639815142568
 -0.05012600111823
  0.06283384471398
  0.03355918092267
 -0.03005887457774 ] 