首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GSL:如何在GSL中实现LDLT分解

GSL:如何在GSL中实现LDLT分解
EN

Stack Overflow用户
提问于 2022-05-13 13:19:08
回答 1查看 37关注 0票数 0

从LDLT分解得到矩阵Q的矩阵Q。与scipy.linalg.ldl()的结果相同,下面是代码:

代码语言:javascript
复制
#include <gsl/gsl_math.h>                                                                                                                                                                                        #include <gsl/gsl_sf.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>
#include <gsl/gsl_linalg.h>
#include <gsl/gsl_cdf.h>
#include <gsl/gsl_errno.h>
                                                                                                                                                                                                                 int main() {
      const int dim = 3;
      double pars[3] = { 0, 0, 0 };
      double Q[9] = {
          2,-1,0,
          -1,3,-1,
          0,-1,4
      };
      int i=0,j=0;

      // Gaussian Multivariate distribution
      gsl_matrix *L = gsl_matrix_calloc(dim, dim);
      gsl_vector *S = gsl_vector_calloc(dim);
      gsl_permutation * perm = gsl_permutation_calloc(dim);

      for(i=0;i<dim*dim;i++) L->data[i]=Q[i];

>>    gsl_linalg_ldlt_decomp(L);

      for(i=0;i<3;i++){
          for(j=0;j<3;j++){
              printf("%.4f ", L->data[i*3+j]);
          }
          printf("\n");
      }

      printf("\n S=");
      for(i=0;i<3;i++)
          printf("%.4f ", S->data[i]);
      printf("\n");
  }

我的编译args是gcc ldl.c -lm -llapack -lblas -lgsl

但它回来了;

代码语言:javascript
复制
ldl.c: In function ‘main’:
ldl.c:39:5: warning: implicit declaration of function ‘gsl_linalg_ldlt_decomp’; did you mean ‘gsl_linalg_PTLQ_decomp’? [-Wimplicit-function-declaration]
   39 |     gsl_linalg_ldlt_decomp(L);
      |     ^~~~~~~~~~~~~~~~~~~~~~
      |     gsl_linalg_PTLQ_decomp
/usr/bin/ld: /tmp/ccSWXMMb.o: in function `main':
ldl.c:(.text+0x170): undefined reference to `gsl_linalg_ldlt_decomp'
collect2: error: ld returned 1 exit status

WHy?我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-24 13:58:31

也许通过命令行编译GSL程序的最好方法是使用GSL本身提供的标志。它们可以通过

代码语言:javascript
复制
gsl-config

效用。在您的情况下,请按以下方式使用它(提供您的shell可以正确处理回退引用):

代码语言:javascript
复制
gcc ldl.c `gsl-config --libs`

如果不是,直接使用gsl-config --libs的输出作为命令行参数。

无论如何,您的代码编译和运行在我的系统上没有任何问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72230249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档