求矩阵的逆一定要经过阶数的3次幂操作?
-
最近要植入矩阵算法,这篇文章中大大缩短了矩阵乘积和逆的操作。碰巧的是,这篇文章只有3页,2个参考文献,至今已经被引用2000多次。
-
操作的定义是什么?
C++有很多与矩阵相关的库(Boost.uBLAS ,Blitz++...等)。
-
- 常见的问题是求$\mathbf A \cdot \mathbf x=\mathbf b$中的$\mathbf x$,可以有直接解法(如LU),也可以用迭代法(如Gauss-Seidal),求逆矩阵肯定是下下之选,原因有几点:
- 操作太多,$~O(N^3)$;
- 稀疏矩阵的逆矩阵不是稀疏的;
- 你要求得$\mathbf x$还要再乘一次,$~O(N^2)$
- 逆矩阵求了之后没有用,因为CFD方程组是非线性的,每次求的矩阵$\mathbf A$都不一样,所以你求得的逆矩阵只用一次,下次迭代又得重新求解。如果是针对线性问题,每次针对不同的$\mathbf b$求对应的$\mathbf x$,用逆矩阵还勉强说得过去。
- 现代的CFD程序似乎迭代法用得更多,JFNK, IDR(s),最不济还有CG和BiCGSTAB.有的连矩阵都不需要组装,何苦去求逆...
- 常见的问题是求$\mathbf A \cdot \mathbf x=\mathbf b$中的$\mathbf x$,可以有直接解法(如LU),也可以用迭代法(如Gauss-Seidal),求逆矩阵肯定是下下之选,原因有几点: