- 积分
- 64
- 注册时间
- 2003-3-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2011-4-21 06:57:13
|
显示全部楼层
来自 美国
最近我也做了些求解大型线性稀疏矩阵AX=b的工作,我的体会是解AX=b无非是直接法和迭代法两种。
对于直接法,如果是对称稀疏矩阵,可以先用LDL^T,Cholesky或QR进行matrix factorization, 比如: A = QR, 然后用x = R\Q\b来求解。如果是一般nxn稀疏矩阵,可用LU factorization, 建议用 [ L, U, P, Q, R] = lu(A), 然后 x = Q * ( U \ (L \ (P * (R \b)))); 计算速度取决于稀疏矩阵的number of non-zeros terms。如果用32位系统的话, 阶数大的话,会出现out of memory, 那只有上64位系统了。
给个例子,我的64位Win 7, 36G DDR3 memory, 12 core/24threads, 10万阶稀疏矩阵Ax=b,  Matlab用LU factorization求解,大约花30秒左右, 用的是自带的UMFPACK.
如果内存不够, 可以用out-of-core的求解器。 我现在用的是GNU的MUMPS+GotoBlas+Metis ordering。 在Windows 下,用microsoft C 和 g95 fortran 编译生成lib文件用C code调用, 对于上面同样的问题,大约12秒左右.
我现在算的问题,阶数大概40万, matlab用500秒, MUMPS C code 用120秒左右。
  |
评分
-
1
查看全部评分
-
|