会直接死人吧。 根据矩阵的特点将不用的分解写在几个例程中,在实验前进行试验,根据试验结果决定算法中使用哪个。
irst
我想问的是:
1 .全阶矩阵a的逆运算inv(a )和稀疏矩阵b (阶与a相同) ) ) ) ) )。
不是采用了和求的逆运算inv(b )相同的方法吗? 也就是说,他们的
计算量一样吗? 虽然是疏散行列,但不会做什么特别的事
处理方法求逆吧?
我电脑内存256米,可以排4096*4096的队求逆,几万层的
我跑不动了
稀疏的存储方式原理相同,但减少了不必要的计算
计算量大幅减少。
2 .如果矩阵c的非零元素集中在主对角线周围,则最好对c求逆
采用什么样的方法最好?
还是用LU分解前后迭代的方法比较普遍,矩阵对角越好就越容易做。
但是,需要稀疏存储。
稀疏矩阵的逆一般不是稀疏矩阵,所以如果对高次稀疏矩阵求逆,
不可能。 1万层全矩阵所需的内存几乎达到了pc
极限,我认为最好的方法是反复。 既然是稀疏的,乘法的次数就很有限。
果然效率很高。
但是求逆运算基本上是求解方程,稀疏矩阵,特别是其他基本上非零元素在对角线附近的矩阵,LU分解不会产生很多注入源,所以LU分解求解方程的方法是可行的。
使用迭代法的话,好像会变成共轭梯度法。
c的资源网络上有很多谷歌
或者在www.csdn.net,oonumerics.org上查找一下
或者使用IMSL for C
或者使用Lapack
或者用Matlab C混合编程
有现成的代码,请自己找
也可以使用库
塞孔多
如何求30,000 * 30,000稀疏矩阵的逆?
尝试一种基于krylov子空间法的算法。
例如arnoldi和GMRES的方法。
matlab有一个可以直接调用的函数。
直接help gmres就可以了。
如果效果还不好的话。
使用预处理技术。
例如不完全lu预处理方法。 等等。
各种预处理GMRES是目前解决大规模稀疏矩阵的主力方法。
即使维数多,也用不完全LU分解预处理CG or Gmres
我同学求过这么200W级的队伍
求逆一般不可取,不必多说。 但是稀疏矩阵的直接解法不少。 基本上,为了减少填充和运算量而重新排列矩阵。
matlab有许多算法,包括:
colamd、colmmd、colperm、spparms、symamd、symmmd、symrcm。
根据是否对称,采用LU分解或chol分解。
这些算法在internet上搜索时,大多有相应的c或fortran版本。
作为稀疏矩阵的存储域,最常见的是压缩列(行)存储域,但最近发现了利用访问复杂度为o(1)的混列表的存储域,非常优秀。 有趣的是,让我们看看下一页。 作者提供了源程序。
实际上,混列表的保存效率也与混列算法有关,弄不好,未必比直接按行或列好
依次检索快。 而且规模越大,效率一定越低。
33558 www.informatik.hs-bremen.de/~ brey /
对称正定的稀疏矩阵很容易做啊。 用LUN分解就可以了。
维数太大,例如超过10^4个量级,就只能使用
求解了共轭梯度法等迭代法。
虽然很多文献都用Cholesky进行了分解处理,但结果似乎还可以
你认为LL’分解不会破坏矩阵的稀疏性吗? 如果——矩阵不是带状的呢?
另外,数值的稳定性也存在问题。
对于一些注入源不多的矩阵,我认为这是个好方法。
但是,对于一些矩阵,如果LU分解,则可能满足整个矩阵。 ~
这是比较郁闷的事情。
恐怖袭击
带状矩阵的相反,有快速算法吗?
我认为这种说法是错误的,至少在Matlab中,用稀疏矩阵求逆对提高效率很明显。 通过利用稀疏性,可以省略很多对零元素的操作。 如果元矩阵还对称的话,考虑三角分解,将单位数组的列向量作为右端项,求解后可以得到对应的逆数组的列向量。
但是,据前辈说,“大部分情况下,要求反阵并不是必须的”,至今仍表示赞同。 至少,一般来说,我们在求解有限元解或普通线性方程时,不会先对系数矩阵求逆吧。 因此,倒阵在数学上很漂亮,有助于公式的导出,但我认为在数值计算中应该尽量避免直接计算,最重要的是,大部分情况下都可以避免。