其中A是万阶稀疏矩阵,怎么求x,A用什么方法存储能
1个回答
展开全部
"但稀疏存储 在进行运算时也要还原满矩阵啊",That's not the truth.如果打算深入研究的话你可以看看
Direct methods for sparse linear systems,by Tim Davis
Iterative Methods for Sparse Linear Systems
这两本书.
当使用 Matlab x = A\b 反斜杠操作时,如果 A 是稀疏阵,使用的针对稀疏阵的类似高斯消去法的直接求解算法.使用这种算法会插入一些非零元,使得存储量增加,但不会使之成为 full matrix.
对于大型稀疏线性方程组求解,如果MATLAB提示内存不足,有两种解决方案,1 是使用更大内存的计算机或者使用 out of core 的模式(我不清楚 matlab 是否有 out of core 的模式).2.你可以尝试稀疏矩阵的迭代法求解,比如带有各种预处理的 gmres,cg 等方法.matlab 自带有 gmres 这个函数,你也可以尝试一下.
当然,无论是直接法还是迭代法,in core 还是 out of core,32bit 的机器总有一个极限.在这个时候,你就只能采取使用 64bit 平台,然后加大内存,使用并行这些策略了.By the way,对于真正的上百万阶,千万阶的大型稀疏线性方程组来说,matlab 并不是最好的选择,你还是应该寻求 Fortran,C 这些更高效的语言.
Direct methods for sparse linear systems,by Tim Davis
Iterative Methods for Sparse Linear Systems
这两本书.
当使用 Matlab x = A\b 反斜杠操作时,如果 A 是稀疏阵,使用的针对稀疏阵的类似高斯消去法的直接求解算法.使用这种算法会插入一些非零元,使得存储量增加,但不会使之成为 full matrix.
对于大型稀疏线性方程组求解,如果MATLAB提示内存不足,有两种解决方案,1 是使用更大内存的计算机或者使用 out of core 的模式(我不清楚 matlab 是否有 out of core 的模式).2.你可以尝试稀疏矩阵的迭代法求解,比如带有各种预处理的 gmres,cg 等方法.matlab 自带有 gmres 这个函数,你也可以尝试一下.
当然,无论是直接法还是迭代法,in core 还是 out of core,32bit 的机器总有一个极限.在这个时候,你就只能采取使用 64bit 平台,然后加大内存,使用并行这些策略了.By the way,对于真正的上百万阶,千万阶的大型稀疏线性方程组来说,matlab 并不是最好的选择,你还是应该寻求 Fortran,C 这些更高效的语言.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询