繁体   English   中英

反转任意大小的矩阵

[英]Inverting a matrix of any size

我正在使用GNU科学库来实现一个计算器,该计算器需要能够将矩阵求幂。 不幸的是,在GSL中似乎没有这样的函数可用于甚至相乘矩阵( gsl_matrix_mul_elements()函数仅使用加法过程相乘),并且通过扩展,不提高幂。

我希望能够提高到负数能力,这需要具有逆向能力。 从我的搜索中,我找不到任何声音代码来计算任意矩阵的逆数(仅是定义了维数的逆矩阵),而我发现手工制作的指南使用了巧妙的“纸上技巧”在代码中不是很有效。

是否有一种通用算法可用于计算任何大小的矩阵的逆(当然,当无法计算逆时会失败)?

如评论中所述,可以为整数指数的平方矩阵计算矩阵的幂。 An幂为A^n = A*A*...A ,其中A出现n次。 如果B是的逆A ,则-n的功率AA^(-n) = (A^-1)^n = B^n = B*B*...B

因此,为了计算An幂,我可以使用GSL建议以下算法:

gsl_matrix_set_identity();         // initialize An as I
for(i=0;i<n;i++) gsl_blas_dgemm(); // compute recursive product of A

为了计算B矩阵,您可以使用以下例程

gsl_linalg_LU_decomp();       // compute A decomposition
gsl_linalg_complex_LU_invert  // comput inverse from decomposition

我建议阅读有关gsl实现的SVD的信息 如果矩阵是可逆的,则通过SVD计算矩阵是一种不错的方法,尽管速度有些慢。 如果矩阵是不可逆的,则SVD允许您计算下一个最好的东西,即广义逆

在矩阵计算中,浮点运算固有的误差会令人震惊地累积。 一个例子是希尔伯特矩阵 ,这是一种无辜的事物,即使对于相当中等的维度,其条件数也非常大。 反转例程的一个很好的测试是查看它可以反转的希尔伯特矩阵有多大,以及该矩阵与恒等式所计算出的逆次数有多接近。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM