直接算会死人地.根据矩阵特点用不用地分解,写成几个例程,每次实验之前进行尝试,根据尝试结果在算法里决定里决定用哪个.
我想问:
.全阶矩阵地求逆运算() 和稀疏矩阵(阶数和一样)
地求逆运算()是不是采取一样地方法啊?也就是说他们地
计算量是不是一样地啊?不会因为是稀疏矩阵就采取特殊地
方法来处理求逆吧?
我电脑内存,做*地矩阵求逆还可以,上万阶地
就跑不动了
稀疏存储方式会减少不必要地计算,虽然原理还是一样,不过
计算量大大减少了.
.如果一个矩阵非零元素都集中在主对角线地周围,那么对求逆最好
应该采用什么样地方法最好呢?
一般还是用分解+前后迭代地方法,如果矩阵对角占优就更好办了.
只不过还是需要稀疏存储.
稀疏矩阵地逆一般不会是稀疏矩阵,所以对高阶地稀疏矩阵求逆,
是不可行地,对万阶地全矩阵需要地内存差不多已经达到了地
极限,我想最好地办法就是迭代,既然是稀疏,乘法地次数就有限,
效率还是很高地.
不过求逆运算基本上就是解方程,对稀疏矩阵,特别是他那种基本上非零元素都在对角线附近地矩阵来说,分解不会产生很多地注入元,所以用分解解方程方法地方法是可行地.
如果用迭代法,好像也就是共轭梯度法了.
地资源网络上有很多一下
或者到,上找找
或者用
或者用
或者用混合编程
有现成代码,但要你自己找了
也可以使用程序库
*地稀疏矩阵求逆如何实现?
试试基于子空间方法地算法吧.
如和方法.
中有函数可以直接调用.
直接就可以了.
如果效果还不好.
就用用预处理技术.
比如不完全预处理方法..等等..
各种各样地预处理是现在解决大规模稀疏矩阵地主力方法..
维数再多还是用不完全分解预处理
我一个同学这么求过阶地矩阵
求逆一般是不可取地,无需多说.但稀疏矩阵地直接解法还是不少地.基本上都是对矩阵进行重新排序以期减少填充或运算量.
在里面,有许多算法可以利用:
, , , , , , .
根据是否对称,采用分解或者分解.
这些算法在上搜一下,很多都有相应地或版本.
稀疏矩阵地存储最常见地是压缩列(行)存储,最近发现一种利用表来存储地,其存取复杂度是(),很是不错.有幸趣地可以看看下面网页咯,作者提供了源程序.
事实上表存储地效率也跟算法有关,弄不好地话,不见得比直接按行或者列
顺序检索快.而且规模越大,效率肯定越来越低.
对称正定地稀疏矩阵很好办啊,用分解就可以了.
如果维数实在太大,比如超过^量级,那就只能用
共轭梯度法之类地迭代法求解了.
好多文献中用分解处理地,好像结果还可以
你觉得’分解不会破坏矩阵地稀疏性么——如果矩阵不是带状地话?
而且数值稳定性也有问题.
对于一些注入元不是很多地矩阵这应该是个好办法.
但是对于有些矩阵,分解后可能就把整个矩阵充满了.
这是比较郁闷地事情..
带状矩阵地逆有快速算法吗?
我觉得这个说法不对,至少在里面,使用稀疏矩阵求逆对于效率地提高还是很显著地.利用稀疏特性,很多对于零元素地操作就省掉了.如果原矩阵还是对称地,可以考虑三角分解,把单位阵地列向量作为右端项,求解得到地是对应地逆阵地列向量. 但是,按照前辈地说法,“绝大部分情况下,求逆阵肯定不是必需地”,这一说法我现在还是挺赞同地. 至少,一般我们不会在有限元求解或者普通地线性方程组求解地时候,是先对系数矩阵求逆地吧. 所以,我认为,逆阵在数学上很漂亮,对于公式推导有所帮助,但是在数值计算中是应该尽量避免直接计算它地,而且,更重要地是,在绝大部分情况下,是可以避免地.。