2017-04-25 144 views
0

我想将ODE_vector类型的对象转换为armadillo vec,以便新对象将继承犰狳库的线性代数功能。正如我有此问题的一个简单的例子是使用C++阵列的示范:包含在B1使用高级构造函数将数组转换为armadillo vec

#include <iostream> 
#include <random> 
#include <armadillo> 

using namespace std; 
using namespace arma; 

int main() { 

double b1 = 0.2; 
double b2 = 0.1; 
const double state[2] = {b1, b2}; 

rowvec B(&state[0], 2); 
cout << B << endl; 

mat A(2,2); A.fill(0.2); A.diag().ones(); 
cout << A << endl; 

cout << B(0) * A(0,0) << endl; // x 

return 0; 

} 

数据和b2被保存在B的元素,以便运行该脚本返回以下结果:

0.2000 
    0.1000 

    1.0000 0.2000 
    0.2000 1.0000 

0.2 

但是,如果我替换上面

cout << B * A << endl; 

行x我得到的错误提示B没有继承了标准犰狳线性代数功能:

[ 50%] Building CXX object CMakeFiles/untitled.dir/main.cpp.o 
[100%] Linking CXX executable untitled 
CMakeFiles/untitled.dir/main.cpp.o: In function `void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)': 
/usr/include/armadillo_bits/wrapper_blas.hpp:36: undefined reference to `wrapper_dgemv_' 
CMakeFiles/untitled.dir/main.cpp.o: In function `void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)': 
/usr/include/armadillo_bits/wrapper_blas.hpp:71: undefined reference to `wrapper_dgemm_' 
collect2: error: ld returned 1 exit status 
CMakeFiles/untitled.dir/build.make:94: recipe for target 'untitled' failed 
make[3]: *** [untitled] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/untitled.dir/all' failed 
make[2]: *** [CMakeFiles/untitled.dir/all] Error 2 
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/untitled.dir/rule' failed 
make[1]: *** [CMakeFiles/untitled.dir/rule] Error 2 
Makefile:118: recipe for target 'untitled' failed 
make: *** [untitled] Error 2 

任何人都可以解释如何正确使用高级构造函数(arma documentation)得到这个工作?

谢谢

回答

0

您需要在乘法中使用正确的格式。 B型是2x1,A是2×2。更改为

mat B(&state[0], 1,2); 

rowvec B(&state[0], 2); 
+0

我想它是如此简单!我试过了犰狳类的各种组合,但是这并不能解决问题。我将编辑该问题以避免混淆,并感谢您的建议。 –

+0

您确定您的构建中启用了BLAS吗?对我来说,上面两行'x'的 替代品运行正常。 –

+0

你是对的!它没有正确的链接,这是一个CMake问题......如果有其他人遇到类似问题,请查看此链接:https://intellij-support.jetbrains.com/hc/en-us/community/posts/205823019 - 错误 - 编译 - 代码与犰狳感谢帮助! –

相关问题