将SuperLU稀疏求解器与RcppArmadillo结合使用

问题描述 投票:2回答:1

我正在尝试从犰狳(http://arma.sourceforge.net/docs.html#spsolve)到RcppArmadillo使用SparseLU解算器:

#define ARMA_USE_SUPERLU
// [Rcpp::depends(RcppArmadillo)]
#include <RcppArmadillo.h>

// [[Rcpp::export]]
arma::vec sp_solver(arma::sp_mat K, arma::vec x) {
  arma::superlu_opts opts;
  opts.symmetric = true;
  arma::vec res;
  arma::spsolve(res, K, x, "superlu", opts);
  return res;
}

/*** R
library(Matrix)
K <- sparseMatrix(i = c(1, 2, 1), j = c(1, 2, 2), x = c(1, 1, 0.5), symmetric = TRUE)
x <- runif(2)
sp_solver(K, x)
*/

我收到错误undefined reference to 'superlu_free'。我想我缺少一些库链接。知道如何解决此问题吗?


我在Windows 10上。

r rcpp armadillo rcpparmadillo
1个回答
0
投票

RcppArmadillo是超级方便,我本人一直使用。因为将要从R调用all Rcpp *代码,所以我们可以假定存在[[some功能。

这包括LAPACK和BLAS,并解释了即使Armadillo文档

明确

指出您需要LAPACK和BLAS的情况下,为什么也可以使用“无链接”的RcppArmadillo的原因。为什么?好吧[[因为R已经有LAPACK和BLAS。((顺便说一句,当且仅当R是用它自己的LAPACK子集构建的时,这会导致相当大的早期问题,因为某些复杂的有价值的例程不可用。由于需要他的软件包,Baptiste受到了相当大的打击)这些年来,Brian Ripley在将那些缺少的例程添加到R的LAPACK方面最有帮助。当用外部LAPACK和BLAS构建R时,这是从来没有问题的,这在例如] Debian / Ubuntu软件包I中很常见。维护。)

这里您要SuperLU。这是可选的,它是您的工作

,以确保将其链接。简而言之,它确实可以神奇地工作。而且,由于涉及链接,因此很难实现自动化,这使我们难以依赖平台和安装要求,因此无法轻松控制。

但是这个问题并不新鲜,实际上这个话题有an entire Rcpp Gallery post

© www.soinside.com 2019 - 2024. All rights reserved.