gpt4 book ai didi

Rcpp Armadillo : Complex matrix inverse compilation error

转载 作者:行者123 更新时间:2023-12-02 04:20:36 27 4
gpt4 key购买 nike

我正在尝试使用 RcppArmadillo 反转复数方阵:

# include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;

// [[Rcpp::export]]
cx_mat fn(cx_mat x) {
return x.i();
}

但是,当我 sourceCpp 时,这会引发错误:“对 zgetri_' 的 undefined reference ”。如果我只是用 mat 替换 cx_mat ,它就能编译并正常工作,但它只能用于真实矩阵。使用 inv() 会引发相同的编译错误。有趣的是,使用伪逆pinv()可以通过编译,但结果与R的solve()相比会略有不同:

# include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;

// [[Rcpp::export]]
cx_mat fn(cx_mat x) {
return pinv(x);
}

> a<-matrix(c(3+0.1i,7+2i,4+0i,2+0.5i),ncol=2)
> a
[,1] [,2]
[1,] 3+0.1i 4+0.0i
[2,] 7+2.0i 2+0.5i
> identical(solve(a), fn(a))
[1] FALSE
> solve(a) - fn(a)
[,1] [,2]
[1,] -6.938894e-17-7.80626e-18i 8.326673e-17-6.93889e-18i
[2,] 1.665335e-16+1.95156e-17i -1.665335e-16+4.16334e-17i

我知道在这种情况下差异在于机器精度,但我仍然想知道是否有办法让 inv().i()处理复杂的矩阵。谢谢。

最佳答案

如果您将 RcppArmadillo 与使用 Rlapack.so 的 R 安装一起使用(例如在 Windows 或某些 RedHat 系统上),这是一个已知问题。

最好的答案是:

  • 不使用未包含在 Rlapack 中的复值函数 has some但遗憾的是并非全部(但你可能别无选择)
  • 重新配置 R 安装以使用完整的外部 liblapack.so

我们有三张开放票at the RcppArmadillo repo (事实上​​,我什至今天添加了一个 list the twelve missing complex functions 由 Armadillo 使用,但在 Rlapack.so 中缺失),我只是请求 R Core 向 Rlapack 添加更多复杂值函数。

为了强调第二点,你的示例在这里运行良好,因为我不在 Debian/Ubuntu 版本上使用 Rlapack:

R> library(Rcpp)
R> sourceCpp("/tmp/aenima.cpp")

R> a <- matrix(c(3+0.1i,7+2i,4+0i,2+0.5i),ncol=2)

R> fn(a)
[,1] [,2]
[1,] -0.0898473+0.0029949i 0.167715-0.047919i
[2,] 0.3174603+0.0000000i -0.126984+0.031746i
R>

使用文件的稍微修改版本以及末尾的示例:

# include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;

// [[Rcpp::export]]
cx_mat fn(cx_mat x) {
return x.i();
}

/*** R
a <- matrix(c(3+0.1i,7+2i,4+0i,2+0.5i),ncol=2)
fn(a)
*/

关于Rcpp Armadillo : Complex matrix inverse compilation error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com