代码之家  ›  专栏  ›  技术社区  ›  Marouen

通过M<N的GSL计算矩阵的零空间会产生错误

  •  0
  • Marouen  · 技术社区  · 7 年前

    遵循gsl中奇异值分解(SVD)函数的文档,例如A=USVt

    对于秩亏矩阵,a的零空间由对应于零奇异值的V列给出

    int gsl_linalg_SV_decomp(gsl_matrix * A, gsl_matrix * V, gsl_vector * S, gsl_vector * work)
    

    语法如下:

    #include <gsl/gsl_linalg.h>
    #include <gsl/gsl_blas.h>
    #include <stdio.h>
    #include <stdlib.h>
    ...
    
    int main(int argc, char **argv){
        ...
        gsl_linalg_SV_decomp(A,V,S,work);
    
    return 0;
    }
    

    gsl: svd.c:60: ERROR: svd of MxN matrix, M<N, is not implemented
    Default GSL error handler invoked
    

    事实上,A有M<N

    你知道另一个库会计算M<矩阵的零空间吗;Ngsl有解决方法吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   dmuir    7 年前

    可以通过计算A’(转置)而不是A的奇异值分解来实现这一点。A的零空间由对应于零奇异值的左奇异向量跨越。

    所以如果我们做一个奇异值分解

    A' = U*S*V'
    

    A’的范围由对应于非零奇异向量的U列跨越。但A的零空间是垂直于A’范围的向量集。因此,A的零空间由对应于零奇异值的U列跨越。