我有一个算法,它分配一个具有预定义大小 N x N 的复数双矩阵“A”。元素最初为零。我还分配了大小为 N x N 的矩阵来存储逆矩阵“A_inv”。在算法期间,“A”的元素被填充。在每次迭代 i 时,我都会得到一个大小为 ix i 的子矩阵。所以第二次迭代看起来像这样,其中 N=4:
| x00 x01 0.0 0.0 |
| x10 x11 0.0 0.0 |
| 0.0 0.0 0.0 0.0 |
| 0.0 0.0 0.0 0.0 |
其中 x 表示一些非零值。现在我希望反转矩阵的非零部分(本例中为 2x2 矩阵)。到目前为止,我一直在通过以下方式做到这一点:
- 将“A”的非零元素复制到 2x2 gsl 矩阵
- 使用 gsl LU 分解来反转 2x2 gsl 矩阵
- 将 2x2 倒置矩阵复制到 A_inv
这种方法的问题是我必须在每次迭代中复制一个矩阵两次。一次到较小的 nxn gsl 矩阵,一次将生成的反向 nxn gsl 矩阵复制到 A_inv。
我想知道是否有人知道更直接的方法。有没有办法使用一些 gsl 函数来仅反转矩阵的一部分并忽略任何零元素?说这样的话:
A = NxN matrix
A_inv = invert_submatrix(A,n,n)
其中 n < N。这里invert_submatrix()
只考虑 A 的 nxn 部分。此外,原始矩阵“A”不能被这种反转改变。也许最后的需求使得无论如何都必须复制矩阵,在这种情况下,它不会比我现在做的更有效率。也就是说,gsl 算法往往比我通常想出的任何方法都高效得多。因此,对此的想法仍然非常受欢迎。